Sha*_*nil 5 hadoop-yarn apache-spark
我试图覆盖火花属性,例如num-executors通过spark-submit提交应用程序,如下所示:
spark-submit --class WC.WordCount \
--num-executors 8 \
--executor-cores 5 \
--executor-memory 3584M \
...../<myjar>.jar \
/public/blahblahblah /user/blahblah
Run Code Online (Sandbox Code Playgroud)
但它运行的默认执行程序数为2.但是如果我添加,我可以覆盖属性
--master yarn
Run Code Online (Sandbox Code Playgroud)
有人可以解释为什么会这样吗?有趣的是,在我的应用程序代码中,我将master设置为yarn-client:
val conf = new SparkConf()
.setAppName("wordcount")
.setMaster("yarn-client")
.set("spark.ui.port","56487")
val sc = new SparkContext(conf)
Run Code Online (Sandbox Code Playgroud)
有人可以说明该选项的--master工作原理
如果您想使用不同的主服务器或不同的内存量运行相同的应用程序.Spark允许您使用默认值执行此操作.当您提到属性时,那些应用程序的优先级最高,请检查最后的属性优先级.SparkConfSparkConf
例:
val sc = new SparkContext(new SparkConf())
Run Code Online (Sandbox Code Playgroud)
然后,您可以在运行时提供配置值:
./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
Run Code Online (Sandbox Code Playgroud)
属性优先顺序(前一个更多)
- 直接在
SparkConf(在代码中)设置的属性具有最高优先级.- 指定为flags或属性文件中的任何值都将传递给应用程序,并与通过SparkConf指定的值 合并.
- 然后标志传递给
spark-submit或spark-shell类似--master等- 那么
spark-defaults.conf文件中的选项.自早期版本的Spark以来,已经重命名了一些配置键; 在这种情况下,旧的密钥名称仍然被接受,但优先级低于新密钥的任何实例.
来源:动态加载Spark属性
我正在尝试通过Spark-Submit提交应用程序时覆盖Spark属性(例如num-executors),如下所示
这将不会工作(除非你重写spark.master的conf/spark-defaults.conf文件或相似的,所以你不必明确指定它的命令行)。
原因是默认的Spark master是local[*],执行程序的数量恰好是一个,即驱动程序。那只是本地部署环境。请参阅主URL。
事实上,num-executors正如您在帮助中所看到的,它与YARN密切相关:
$ ./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.
Run Code Online (Sandbox Code Playgroud)
这就解释了为什么切换到YARN后它可以工作。它应该与YARN一起使用(不管部署模式如何,即客户端或群集仅与驱动程序有关,而与执行者无关)。
您可能想知道为什么它不能与您的代码中定义的母版一起使用。原因是为时已晚,因为当您使用spark-submit启动应用程序时,已经在启动时分配了主服务器。这就是为什么您不应在代码中将部署环境特定的属性指定为以下原因的原因:
这就是为什么您应该始终使用spark-submit提交Spark应用程序的原因(除非您有理由不提交,但随后您将知道原因并可以轻松地对其进行解释)。
| 归档时间: |
|
| 查看次数: |
1924 次 |
| 最近记录: |