2014-10-02 45 views
9

我该如何从Java(或Scala)代码中配置SparkConfigSparkContext的执行程序?我不断看到2位执行者。看起来像spark.default.parallelism不起作用,是关于不同的东西。如何设置Spark执行程序的数量?

我只需要设置执行程序的数量等于簇大小,但总是只有2个。我知道我的群集大小。如果这很重要,我就使用YARN。

回答

16

好的,明白了。 执行程序的数量实际上并不是Spark属性本身,而是驱动程序用于将作业放在YARN上。因此,我使用SparkSubmit类作为驱动程序,它有适当的--num-executors参数,这正是我所需要的。

UPDATE:

对于一些工作,我不跟随SparkSubmit办法了。我不能主要为Spark作业只是其中一个应用程序组件(甚至是可选的)的应用程序执行此操作。对于这些情况,我使用连接到集群配置的spark-defaults.conf和其中的spark.executor.instances属性。这种方法更加通用,可以根据群集(开发人员工作站,分段,生产)正确地平衡资源。

+0

spark.default.parallelism属性用于reduce,比如join,reduceByKey,groupBy。 – Rags 2015-12-29 03:30:38

5

您也可以通过在SparkConf对象上设置参数“spark.executor.instances”和“spark.executor.cores”来以编程方式执行此操作。

实施例:

SparkConf conf = new SparkConf() 
     // 4 workers 
     .set("spark.executor.instances", "4") 
     // 5 cores on each workers 
     .set("spark.executor.cores", "5"); 

第二个参数是只对纱和独立模式。它允许应用程序在同一个worker上运行多个executors,前提是该worker上有足够的内核。

相关问题