如何通过spark-submit向YARN集群传递配置并临时修改作业配置?
如何通过spark-submit临时设置YARN作业配置(包括日志ACL)
当然可以!Spark on YARN提交作业时,完全可以通过spark-submit的--conf参数传递YARN/MapReduce的配置项,只是需要用特定的前缀来让Spark识别并传递这些配置到YARN环境中。
核心方法:使用spark.hadoop.前缀传递Hadoop/YARN配置
Spark允许你通过spark.hadoop.作为前缀,将任意Hadoop配置参数传递给作业的底层Hadoop环境(包括YARN)。当你用这个前缀时,Spark会自动去掉前缀,把对应的配置项注入到Hadoop的Configuration对象中,YARN就能正确识别这些参数了。
针对你提到的mapreduce.job.acl-view-job(控制作业日志查看权限的ACL),具体的提交命令示例如下:
spark-submit \ --class com.your.package.YourSparkApp \ --master yarn \ --deploy-mode cluster \ # 允许当前用户(比如你的用户名是user123)查看作业日志 --conf spark.hadoop.mapreduce.job.acl-view-job=user123 \ # 如果要允许多个用户,用逗号分隔 # --conf spark.hadoop.mapreduce.job.acl-view-job=user123,user456 \ your-spark-app.jar
为什么这个方法可行?
mapreduce.job.acl-view-job本质是Hadoop MapReduce的核心配置项,而Spark on YARN作业会依赖Hadoop的配置环境。通过spark.hadoop.前缀,我们相当于告诉Spark:"把这个参数传递给底层的Hadoop配置",这样YARN在启动作业时就会读取到这个临时设置的ACL规则,而不是集群默认的mapreduce-default.xml中的配置。
扩展:其他YARN配置也能用同样方式传递
除了日志ACL,你还可以用同样的方法临时修改其他YARN/MapReduce的配置,比如:
- 修改作业的AppMaster内存分配:
--conf spark.hadoop.yarn.app.mapreduce.am.resource.mb=4096 - 指定作业提交的队列:
--conf spark.hadoop.mapreduce.job.queuename=your-priority-queue
这些配置都是针对当前提交的作业生效,不会修改集群的全局配置,非常适合临时调整单个作业的参数。
内容的提问来源于stack exchange,提问作者user3593261
相关产品推荐
相关产品推荐

