如何使用动态资源分配执行Spark程序?

Arv*_*mar 8 hadoop hadoop-yarn apache-spark

我正在使用spark-summit命令执行Spark作业,其参数如下:

spark-submit --master yarn-cluster --driver-cores 2 \
 --driver-memory 2G --num-executors 10 \
 --executor-cores 5 --executor-memory 2G \
 --class com.spark.sql.jdbc.SparkDFtoOracle2 \
 Spark-hive-sql-Dataframe-0.0.1-SNAPSHOT-jar-with-dependencies.jar
Run Code Online (Sandbox Code Playgroud)

现在我想使用Spark的动态资源分配执行相同的程序.在执行Spark程序时,能否帮助您使用动态资源分配.

mrs*_*vas 7

在星火动态分配spark.dynamicAllocation.enabled需要被设置为true,因为它是false在默认情况下.

这需要spark.shuffle.service.enabled设置为true,因为火花应用程序在YARN上运行.检查此链接以在YARN中的每个NodeManager上启动shuffle服务.

以下配置也相关:

spark.dynamicAllocation.minExecutors, 
spark.dynamicAllocation.maxExecutors, and 
spark.dynamicAllocation.initialExecutors
Run Code Online (Sandbox Code Playgroud)

可以通过3种方式将这些选项配置为Spark应用程序

1.来自Spark提交 --conf <prop_name>=<prop_value>

spark-submit --master yarn-cluster \
    --driver-cores 2 \
    --driver-memory 2G \
    --num-executors 10 \
    --executor-cores 5 \
    --executor-memory 2G \
    --conf spark.dynamicAllocation.minExecutors=5
    --conf spark.dynamicAllocation.maxExecutors=30
    --conf spark.dynamicAllocation.initialExecutors=10 
    --class com.spark.sql.jdbc.SparkDFtoOracle2 \
    Spark-hive-sql-Dataframe-0.0.1-SNAPSHOT-jar-with-dependencies.jar
Run Code Online (Sandbox Code Playgroud)

2.内部Spark程序用 SparkConf

设置属性SparkConf然后创建SparkSessionSparkContext使用它

val conf: SparkConf = new SparkConf()
conf.set("spark.dynamicAllocation.minExecutors", "5");
conf.set("spark.dynamicAllocation.maxExecutors", "30");
conf.set("spark.dynamicAllocation.initialExecutors", "10");
.....
Run Code Online (Sandbox Code Playgroud)

3. spark-defaults.conf通常位于$SPARK_HOME/conf/

spark-defaults.conf如果没有从命令行和代码传递配置,则将相同的配置放入以应用所有spark应用程序.

Spark - 动态分配配置

  • 你为什么设置 num-executors=5 ?您已经通过 conf 设置了 spark.dynamicAllocation.minExecutors 和 spark.dynamicAllocation.maxExecutors executor。 (3认同)
  • 是的,仅当“spark.dynamicAllocation.enabled=true”时,“spark.dynamicAllocation.{min/max}Executors”才相关。这意味着这些配置将被忽略。 (3认同)