添加 Spark 步骤 - Amazon EMR
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

添加 Spark 步骤

您可以使用 Amazon EMR 步骤向安装在 EMR 集群上的 Spark 框架提交工作。有关更多信息,请参阅 Amazon EMR 管理指南 中的步骤。在控制台和 CLI 中,您使用 Spark 应用程序步骤 (代表您将 spark-submit 脚本作为步骤运行) 来完成此操作。借助 API,您通过 spark-submit 使用步骤调用 command-runner.jar

有关向 Spark 提交应用程序的更多信息,请参阅 Apache Spark 文档中的提交应用程序主题。

使用控制台提交 Spark 步骤

  1. 通过以下网址打开 Amazon EMR 控制台:https://console.amazonaws.cn/elasticmapreduce/

  2. Cluster List (集群列表) 中,选择您的集群的名称。

  3. 滚动到 Steps (步骤) 部分并展开它,然后选择 Add step (添加步骤)

  4. Add Step (添加步骤) 对话框中:

    • 对于 Step type (步骤类型),选择 Spark application (Spark 应用程序)

    • 对于 Name (名称),接受默认名称 (Spark application) 或键入新名称。

    • 对于 Deploy mode (部署模式),选择 Client (客户端)Cluster (集群) 模式。客户端模式在集群的主实例上启动驱动程序,而集群模式在集群上启动驱动程序。对于客户端模式,驱动程序的日志输出将显示在步骤日志中,而对于集群模式,驱动程序的日志输出将显示在第一个 YARN 容器的日志中。有关更多信息,请参阅 Apache Spark 文档中的集群模式概述

    • 指定所需的 Spark-submit options。有关 spark-submit 选项的更多信息,请参阅使用 spark-submit 启动应用程序

    • 对于 Application location (应用程序位置),指定应用程序的本地或 S3 URI 路径。

    • 对于 Arguments (参数),将该字段保留为空白。

    • 对于 Action on failure (出现故障时的操作),接受默认选项 Continue (继续)

  5. 选择添加。步骤会出现在控制台中,其状态为“Pending”。

  6. 步骤的状态会随着步骤的运行从 “Pending” 变为 “Running”,再变为 “Completed”。要更新状态,请选择 刷新 图标 操作 列。

  7. 如果您配置了日志记录,则这一步的结果将放在 Amazon EMR 控制台的“Cluster Details (集群详细信息)”页面上您的步骤旁边的 Log Files (日志文件) 下。在启动集群时,您可以选择在配置的日志存储桶中查找步骤信息。

使用 AWS CLI 向 Spark 提交工作

在创建集群时提交步骤,或使用 aws emr add-steps 子命令在现有集群中提交步骤。

  1. 使用 create-cluster,如以下示例所示。

    注意

    包含了 Linux 行继续符 (\) 以提高可读性。可以在 Linux 命令中删除或使用它们。对于 Windows,请删除它们或将其替换为脱字号 (^)。

    aws emr create-cluster --name "Add Spark Step Cluster" --release-label emr-5.31.0 --applications Name=Spark \ --ec2-attributes KeyName=myKey --instance-type m5.xlarge --instance-count 3 \ --steps Type=Spark,Name="Spark Program",ActionOnFailure=CONTINUE,Args=[--class,org.apache.spark.examples.SparkPi,/usr/lib/spark/examples/jars/spark-examples.jar,10] --use-default-roles

    作为替代方法,您可使用 command-runner.jar,如以下示例所示。

    aws emr create-cluster --name "Add Spark Step Cluster" --release-label emr-5.31.0 \ --applications Name=Spark --ec2-attributes KeyName=myKey --instance-type m5.xlarge --instance-count 3 \ --steps Type=CUSTOM_JAR,Name="Spark Program",Jar="command-runner.jar",ActionOnFailure=CONTINUE,Args=[spark-example,SparkPi,10] --use-default-roles
    注意

    包含了 Linux 行继续符 (\) 以提高可读性。可以在 Linux 命令中删除或使用它们。对于 Windows,请删除它们或将其替换为脱字号 (^)。

  2. 或者,向正在运行的集群添加步骤。使用 add-steps

    aws emr add-steps --cluster-id j-2AXXXXXXGAPLF --steps Type=Spark,Name="Spark Program",ActionOnFailure=CONTINUE,Args=[--class,org.apache.spark.examples.SparkPi,/usr/lib/spark/examples/jars/spark-examples.jar,10]

    作为替代方法,您可使用 command-runner.jar,如以下示例所示。

    aws emr add-steps --cluster-id j-2AXXXXXXGAPLF --steps Type=CUSTOM_JAR,Name="Spark Program",Jar="command-runner.jar",ActionOnFailure=CONTINUE,Args=[spark-example,SparkPi,10]

使用 适用于 Java 的开发工具包 向 Spark 提交工作

  • AWSCredentials credentials = new BasicAWSCredentials(accessKey, secretKey); AmazonElasticMapReduce emr = new AmazonElasticMapReduceClient(credentials); StepFactory stepFactory = new StepFactory(); AmazonElasticMapReduceClient emr = new AmazonElasticMapReduceClient(credentials); AddJobFlowStepsRequest req = new AddJobFlowStepsRequest(); req.withJobFlowId("j-1K48XXXXXXHCB"); List<StepConfig> stepConfigs = new ArrayList<StepConfig>(); HadoopJarStepConfig sparkStepConf = new HadoopJarStepConfig() .withJar("command-runner.jar") .withArgs("spark-submit","--executor-memory","1g","--class","org.apache.spark.examples.SparkPi","/usr/lib/spark/examples/jars/spark-examples.jar","10"); StepConfig sparkStep = new StepConfig() .withName("Spark Step") .withActionOnFailure("CONTINUE") .withHadoopJarStep(sparkStepConf); stepConfigs.add(sparkStep); req.withSteps(stepConfigs); AddJobFlowStepsResult result = emr.addJobFlowSteps(req);

您可以通过查看该步骤的日志来了解该步骤的结果。您可以在 AWS 管理控制台 如果您已通过选择 步骤,选择您的步骤,然后,为 日志文件,选择 stdoutstderr。要查看可用的日志,请选择 查看日志.

覆盖 Spark 默认配置设置

建议您为不同的应用程序覆盖 Spark 默认配置值。当您通过一个步骤提交申请时,您可执行此操作,该步骤本质上将选项传递到 spark-submit。例如,您可能希望通过更改 spark.executor.memory。您会提供 --executor-memory 使用如下参数进行切换:

spark-submit --executor-memory 1g --class org.apache.spark.examples.SparkPi /usr/lib/spark/examples/jars/spark-examples.jar 10

同样,你可以 --executor-cores--driver-memory。在步骤中,您将为步骤提供以下参数:

--executor-memory 1g --class org.apache.spark.examples.SparkPi /usr/lib/spark/examples/jars/spark-examples.jar 10

您还可以使用 --conf 选项调节没有内置开关的设置。有关可调节的其他设置的更多信息,请参阅 Apache Spark 文档中的动态加载 Spark 属性主题。