D. *_*ler 5 memory-management executor hadoop-yarn apache-spark
我编写了一个Spark应用程序,它通过SparkConf
实例设置一些配置内容,如下所示:
SparkConf conf = new SparkConf().setAppName("Test App Name");
conf.set("spark.driver.cores", "1");
conf.set("spark.driver.memory", "1800m");
conf.set("spark.yarn.am.cores", "1");
conf.set("spark.yarn.am.memory", "1800m");
conf.set("spark.executor.instances", "30");
conf.set("spark.executor.cores", "3");
conf.set("spark.executor.memory", "2048m");
JavaSparkContext sc = new JavaSparkContext(conf);
JavaRDD<String> inputRDD = sc.textFile(...);
...
Run Code Online (Sandbox Code Playgroud)
当我使用命令(master=yarn
&deploy-mode=client
)运行此应用程序时
spark-submit --class spark.MyApp --master yarn --deploy-mode client /home/myuser/application.jar
Run Code Online (Sandbox Code Playgroud)
一切似乎都运行良好,Spark History UI显示正确的执行者信息:
但是当用(master=yarn
&deploy-mode=cluster
)运行时
我的Spark UI显示错误的执行程序信息(~512 MB而不是~1400 MB):
此外,我的应用程序名称Test App Name
在客户端模式下运行时等于,但spark.MyApp
在群集模式下运行时.但是,在群集模式下运行时,似乎会采用某些默认设置.我在这做错了什么?如何为群集模式进行这些设置?
我在由YARN管理的HDP 2.5集群上使用Spark 1.6.2.
D. *_*ler 10
好的,我想我发现了问题!简而言之:在Standalone和YARN管理模式下运行Spark设置之间存在差异!
因此,当您在独立模式下运行Spark应用程序时,您可以专注于Spark的配置文档,请参阅http://spark.apache.org/docs/1.6.2/configuration.html
您可以对Driver&Executor CPU/RAM使用以下设置(正如文档中所述):
spark.executor.cores
spark.executor.memory
spark.driver.cores
spark.driver.memory
但是:在YARN管理的Hadoop环境中运行Spark时,您必须小心以下设置并考虑以下几点:
定义"Spark on YARN"文档而不是上面链接的配置文档:http://spark.apache.org/docs/1.6.2/running-on-yarn.html(这里解释的属性具有更高的优先级然后是配置文档中解释的那些(这似乎只描述了独立群集与客户端模式,而不是YARN群集与客户端模式!!))
你不能用于SparkConf
在纱线群集模式下设置属性!而是使用相应的spark-submit
参数:
--executor-cores 5
--executor-memory 5g
--driver-cores 3
--driver-memory 3g
在纱线客户端模式下,您无法使用spark.driver.cores
和spark.driver.memory
属性!您必须在SparkConf
实例中使用相应的AM属性:
spark.yarn.am.cores
spark.yarn.am.memory
spark-submit
参数设置这些AM属性!spark.executor.cores
并spark.executor.memory
在SparkConf
--executor-cores
和executor-memory
参数spark-submit
SparkConf
设置,则设置会覆盖spark-submit
参数值!这是我笔记的文字形式:
希望我能用这个发现帮助别人......