如何使用动态资源分配执行 Spark 程序?
How to execute Spark programs with Dynamic Resource Allocation?
我正在使用 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
现在我想使用 Spark 的动态资源分配来执行同一个程序。能否请您帮助在执行Spark程序中使用动态资源分配。
在 Spark 动态分配中,spark.dynamicAllocation.enabled
需要设置为 true
,因为它默认为 false
。
这需要将 spark.shuffle.service.enabled
设置为 true
,因为 Spark 应用程序在 YARN 上是 运行。检查此 link to start the shuffle service on each NodeManager in YARN。
以下配置也相关:
spark.dynamicAllocation.minExecutors,
spark.dynamicAllocation.maxExecutors, and
spark.dynamicAllocation.initialExecutors
这些选项可以通过 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 \ # same as --num-executors 10
--class com.spark.sql.jdbc.SparkDFtoOracle2 \
Spark-hive-sql-Dataframe-0.0.1-SNAPSHOT-jar-with-dependencies.jar
2。 SparkConf
内部 Spark 程序
设置 SparkConf
中的属性,然后用它创建 SparkSession
或 SparkContext
val conf: SparkConf = new SparkConf()
conf.set("spark.dynamicAllocation.minExecutors", "5");
conf.set("spark.dynamicAllocation.maxExecutors", "30");
conf.set("spark.dynamicAllocation.initialExecutors", "10");
.....
3。 spark-defaults.conf
通常位于 $SPARK_HOME/conf/
如果没有从命令行和代码传递任何配置,请在 spark-defaults.conf
中放置相同的配置以应用于所有 spark 应用程序。
我刚刚用 Spark 的动态资源分配做了一个小演示。代码在我的 Github. Specifically, the demo is in this release.
我正在使用 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
现在我想使用 Spark 的动态资源分配来执行同一个程序。能否请您帮助在执行Spark程序中使用动态资源分配。
在 Spark 动态分配中,spark.dynamicAllocation.enabled
需要设置为 true
,因为它默认为 false
。
这需要将 spark.shuffle.service.enabled
设置为 true
,因为 Spark 应用程序在 YARN 上是 运行。检查此 link to start the shuffle service on each NodeManager in YARN。
以下配置也相关:
spark.dynamicAllocation.minExecutors,
spark.dynamicAllocation.maxExecutors, and
spark.dynamicAllocation.initialExecutors
这些选项可以通过 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 \ # same as --num-executors 10
--class com.spark.sql.jdbc.SparkDFtoOracle2 \
Spark-hive-sql-Dataframe-0.0.1-SNAPSHOT-jar-with-dependencies.jar
2。 SparkConf
设置 SparkConf
中的属性,然后用它创建 SparkSession
或 SparkContext
val conf: SparkConf = new SparkConf()
conf.set("spark.dynamicAllocation.minExecutors", "5");
conf.set("spark.dynamicAllocation.maxExecutors", "30");
conf.set("spark.dynamicAllocation.initialExecutors", "10");
.....
3。 spark-defaults.conf
通常位于 $SPARK_HOME/conf/
如果没有从命令行和代码传递任何配置,请在 spark-defaults.conf
中放置相同的配置以应用于所有 spark 应用程序。
我刚刚用 Spark 的动态资源分配做了一个小演示。代码在我的 Github. Specifically, the demo is in this release.