我想在 Amazon EMR 中配置 Apache Spark 参数。
简短描述
配置 Spark 应用程序有两种方法:
- 使用命令行参数(例如 spark-submit 命令)以避免对值进行硬编码。
- 配置 spark-defaults.conf 文件中的值以使更改永久生效。
解决方法
使用 spark-submit 配置 Spark 参数
Spark Shell 和 spark-submit 命令支持两种动态加载配置的方法:
- 使用命令行选项,例如 --num-executors。
- 使用标志 --conf。
**注意:**运行 spark-submit--help 以显示完整的选项列表。
spark-submit 命令还会读取 spark-defaults.conf 中的配置选项,在 spark-defaults.conf 文件中,每行由用空格分隔的一个键和一个值组成。
有关更多信息,请参阅借助 spark-submit 提交用户应用程序。
有关 Spark 支持的参数的更多信息,请参阅 Spark 配置。
以下是一些最常见的配置选项:
--class <main-class> \
--master <master-url>
--deploy-mode <deploy-mode>
--conf <key>=<value>
--num-executors <value> \
--executor-memory <value>G \
--driver-memory <value>G \
--executor-cores <number of cores> \
--driver-cores <number of cores> \
--jars <Comma-separated list of jars> \
--packages <Comma-separated list of Maven coordinates> \
--py-files < Comma-separated list of .zip, .egg, or .py files to place on the PYTHONPATH for Python apps> \
使用 spark-submit 时,应用程序 JAR 和 --jars 选项中包含的任何 JAR 都会自动传输到集群。--jars 之后提供的 URL 必须用逗号分隔。该列表包含在驱动程序和执行程序的类路径中,JAR 和文件将被复制到执行程序节点上每个 SparkContext 的工作目录中。请记住,目录扩展不适用于 --jars。
示例
spark-submit --deploy-mode cluster --class org.apache.spark.examples.SparkPi --conf spark.dynamicAllocation.enabled=false --master yarn --num-executors 4 --driver-memory 4G --executor-memory 4G --executor-cores 1 /usr/lib/spark/examples/jars/spark-examples.jar 10
您可以使用标志 --conf 传递内存参数,如以下示例所示:
spark-submit --deploy-mode cluster --class org.apache.spark.examples.SparkPi --conf spark.dynamicAllocation.enabled=false --master yarn >--conf spark.driver.memory=1G --conf spark.executor.memory=1G /usr/lib/spark/examples/jars/spark-examples.jar 10
使用自定义 Spark 参数启动 spark-shell 和 pyspark shell
要启动 spark-shell 或 pyspark shell,请运行以下命令:
spark-shell
spark-shell --conf spark.driver.maxResultSize=1G --conf spark.driver.memory=1G --deploy-mode client --conf spark.executor.memory=1G --conf spark.executor.heartbeatInterval=10000000s --conf spark.network.timeout=10000001s --executor-cores 1 --num-executors 5 --packages org.apache.spark:spark-avro_2.12:3.1.2 --conf 'spark.serializer=org.apache.spark.serializer.KryoSerializer'
pyspark shell
pyspark --conf spark.driver.maxResultSize=1G --conf spark.driver.memory=1G --deploy-mode client --conf spark.executor.memory=1G --conf spark.executor.heartbeatInterval=10000000s --conf spark.network.timeout=10000001s --executor-cores 1 --num-executors 5 --packages org.apache.spark:spark-avro_2.12:3.1.2 --conf 'spark.serializer=org.apache.spark.serializer.KryoSerializer'
使用 spark-defaults.conf 配置 Spark 参数
要使配置更改永久生效,请将配置附加到 /etc/spark/conf/spark-defaults.conf 文件。然后,重新启动 Spark History Server。以下示例在 spark-defaults.conf 中配置执行程序内存和驱动程序内存。在该示例中,每行由用空格分隔的一个键和一个值组成。
示例
spark.executor.memory 9486M
spark.driver.memory 9486M
以下示例配置在集群启动期间配置 Spark 驱动程序和执行程序内存:
{
"Classification": "spark-defaults",
"Properties": {
"spark.executor.memory": "9486M",
"spark.driver.memory": "9486M"
}
}
]
相关信息
在 Amazon EMR 上成功管理 Apache Spark 应用程序内存的最佳实践
添加 Spark 步骤
使用 Amazon EMR 重新配置实时修改您的集群