如何在 Amazon EMR 中设置 Spark 参数?

2 分钟阅读
0

我想在 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 重新配置实时修改您的集群

AWS 官方
AWS 官方已更新 2 年前