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

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

添加 Spark 步骤

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

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

使用控制台提交 Spark 步骤
  1. 打开亚马逊 EMR 控制台,网址为 https://console.aws.amazon.com/emr。

  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”。要更新状态,请选择 Actions (操作) 列上方的 Refresh (刷新) 图标。

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

要使用 Spark 将作品提交给 Spark Amazon CLI

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

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

    注意

    为了便于读取,包含 Linux 行继续符(\)。它们可以通过 Linux 命令删除或使用。对于 Windows,请将它们删除或替换为脱字号(^)。

    aws emr create-cluster --name "Add Spark Step Cluster" --release-label emr-7.1.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-7.1.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 提交工作
  1. 下面的示例显示如何通过 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);
  2. 您可以通过查看该步骤的日志来了解该步骤的结果。 Amazon Web Services Management Console 如果您启用了日志记录,则可以在中执行此操作,方法是选择 “步骤”,选择您的步骤,然后在 “日志文件” 中,选择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 选项调节没有内置开关的设置。有关可调节的其他设置的更多信息,请参阅 Apache Spark 文档中的动态加载 Spark 属性主题。