在YARN上以群集模式运行Spark应用程序时未使用SparkConf设置

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

好的,我想我发现了问题!简而言之:在StandaloneYARN管理模式下运行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.coresspark.driver.memory属性!您必须在SparkConf实例中使用相应的AM属性:

    • spark.yarn.am.cores
    • spark.yarn.am.memory
    • 您无法通过spark-submit参数设置这些AM属性!
  • 要在yarn-client模式下设置执行程序资源,您可以使用
    • spark.executor.coresspark.executor.memorySparkConf
    • --executor-coresexecutor-memory参数spark-submit
    • 如果同时SparkConf设置,则设置会覆盖spark-submit参数值!

这是我笔记的文字形式:

在此输入图像描述

希望我能用这个发现帮助别人......