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

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

添加 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.aws.amazon.com/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 提交的应用

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

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

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

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

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

  7. 此步骤的结果位于 Amazon EMR 控制台的 “Amazon EMR 集群详细信息” 页面上您的步骤旁边的日志文件(如果您已配置日志记录)。在启动集群时,您可以选择在配置的日志存储桶中查找步骤信息。

使用 Amazon 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.33.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.33.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]

使用 SDK for 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);

您可以通过查看该步骤的日志来了解该步骤的结果。如果您已启用日志记录,则可通过以下方式在 Amazon Web Services Management Console中执行此操作:选择 Steps (步骤),选择您的步骤,然后为 Log files (日志文件) 选择 stdoutstderr。要查看可用日志,请选择 View Logs (查看日志)

覆盖 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 选项调节没有内置开关的设置。有关可调节的其他设置的更多信息,请参阅动态加载 Spark 属性Apache Spark 文档中的主题。