2017-10-20 395 views
3

我试图重写火花性能,如num-executors在提交应用程序火花提交如下:但是它与执行人是2的默认号码运行为什么我无法用spark-submit覆盖num-executors选项?

spark-submit --class WC.WordCount \ 
--num-executors 8 \ 
--executor-cores 5 \ 
--executor-memory 3584M \ 
...../<myjar>.jar \ 
/public/blahblahblah /user/blahblah 

但我有能力,如果覆盖性能我加

--master yarn 

有人可以解释为什么是这样吗?有趣的是,在我的应用程序代码,我设置主纱的客户端:

val conf = new SparkConf() 
    .setAppName("wordcount") 
    .setMaster("yarn-client") 
    .set("spark.ui.port","56487") 

val sc = new SparkContext(conf) 

可有人扔一些轻为--master工作

回答

2

我试图重写火花性能,如NUM-执行者在提交应用程序火花提交如下

它将工作(除非您覆盖spark.masterconf/spark-defaults.conf文件或类似文件,所以您不必在命令行中明确指定它)。

原因是默认的Spark主设备是local[*],并且执行程序的数量恰好是一个驱动程序。这只是本地部署环境。请参阅Master URLs

由于事实上,num-executors非常纱相关的,你可以在帮助看到:

$ ./bin/spark-submit --help 
... 
YARN-only: 
    --num-executors NUM   Number of executors to launch (Default: 2). 
           If dynamic allocation is enabled, the initial number of 
           executors will be at least NUM. 

这就解释了为什么它的工作,当你切换到纱。它应该与YARN一起工作(不管部署模式,即客户端或群集,这个驱动程序本身不是执行者)。

您可能想知道为什么它不适用于您的代码中定义的主人。原因在于,当您使用spark-submit启动应用程序时,已经在启动时分配了主设备,这为时已晚。这正是为什么你不应该在代码中指定的部署环境特定属性的原因:

  1. 它可能并不总是有效(见与主的情况下)
  2. 它要求代码必须重新编译每配置更改(并使它有点笨拙)

这就是为什么你应该总是使用​​提交您的申请星火(除非你有原因不能,但随后你会知道为什么,可能解释轻松)。

4

选项如果您想如何运行相同的应用程序不同的主人或不同数量的内存。 Spark允许你使用默认的SparkConf来做到这一点。由于您提到的属性为SparkConf,那些应用程序的优先级为,请检查属性优先级。

实施例:

val sc = new SparkContext(new SparkConf()) 

然后,可以在运行时提供的配置值:

./bin/spark-submit \ 
    --name "My app" \ 
    --deploy-mode "client" \ 
    --conf spark.ui.port=56487 \ 
    --conf spark.master=yarn \ #alternate to --master 
    --conf spark.executor.memory=4g \ #alternate to --executor-memory 
    --conf "spark.executor.extraJavaOptions=-XX:+PrintGCDetails -XX:+PrintGCTimeStamps" \ 
    --class WC.WordCount \ 
    /<myjar>.jar \ 
    /public/blahblahblah \ 
    /user/blahblah 

属性优先顺序(上面一个是多个)

  1. 直接在SparkConf上设置的属性(在代码中)取最高优先级为 。
  2. 指定为标志或在属性任何值文件将被上到应用程序传递 和合并与那些通过 SparkConf指定。
  3. 然后标志传递给​​或spark-shell--master
  4. 然后在spark-defaults.conf文件的选项。

自早期版本的Spark以来,一些配置键已被重命名;在这种情况下,旧键名仍然可以接受,但优先级低于新键的任何实例。

来源:Dynamically Loading Spark Properties

相关问题