E nd-to-end Amazon EMR Java 源代码示例 - Amazon EMR
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

E nd-to-end Amazon EMR Java 源代码示例

开发人员可使用自定义 Java 代码调用 Amazon EMR API,以便执行与使用 Amazon EMR 控制台或 CLI 可能执行的相同操作。本节提供了安装 Amazon Toolkit for Eclipse 和运行功能齐全的 Java 源代码示例所需的 end-to-end 步骤,该示例向 Amazon EMR 集群添加了步骤。

注意

此示例的重点是 Java,但 Amazon EMR 还利用 Amazon EMR SDK 集合支持多种编程语言。有关更多信息,请参阅使用 SDK 调用 Amazon EMR API

此 Java 源代码示例演示了如何使用 Amazon EMR API 执行以下任务:

  • 检索 Amazon 凭证并将其发送到 Amazon EMR 以进行 API 调用

  • 配置新的自定义步骤和新的预定义步骤

  • 将新步骤添加到现有 Amazon EMR 集群

  • 从正在运行的集群检索集群步骤 ID

注意

此示例演示了如何将步骤添加到现有集群,因此要求在您的账户上具有活动集群。

在您开始之前,请安装与您的计算机平台相匹配的 Eclipse IDE for Java EE Developers 版本。有关更多信息,请转到 Eclipse 下载

下一步,安装适用于 Eclipse 的数据库开发插件。

安装数据库开发 Eclipse 插件
  1. 打开 Eclipse IDE。

  2. 依次选择 Help (帮助)Install New Software (安装新软件)

  3. Work with: (使用:) 字段中,键入 http://download.eclipse.org/releases/kepler,或者键入与您的 Eclipse IDE 版本号相匹配的路径。

  4. 在项目列表中,依次选择 Database Development (数据库开发)Finish (完成)

  5. 在提示时重新启动 Eclipse。

接下来,安装 Toolkit for Eclipse,以便提供实用的预配置源代码项目模板。

安装 Toolkit for Eclipse
  1. 打开 Eclipse IDE。

  2. 依次选择 Help (帮助)Install New Software (安装新软件)

  3. Work with: (使用:) 字段中,输入 https://aws.amazon.com/eclipse

  4. 在项目列表中,依次选择 Amazon Toolkit for EclipseFinish (完成)

  5. 在提示时重新启动 Eclipse。

接下来,创建一个新的 Amazon Java 项目并运行示例 Java 源代码。

创建新的 Amazon Java 项目
  1. 打开 Eclipse IDE。

  2. 依次选择 File (文件)New (新建)Other (其它)

  3. Select a wizard (选择向导) 对话框中,依次选择 Amazon Java Project (亚马逊云科技 Java 项目)Next (下一步)

  4. 例如,在 “新建 Amazon Java 项目” 对话框的Project name:字段中,输入新项目的名称EMR-sample-code

  5. 选择配置 Amazon 帐户...,输入您的公钥和私有访问密钥,然后选择完成。有关创建访问密钥的更多信息,请参阅《亚马逊云科技一般参考》中的如何获取安全凭证?

    注意

    不应直接在代码中嵌入访问密钥。使用 Amazon EMR SDK,可以在已知位置放置访问密钥,这样就不必保留在代码中。

  6. 在新的 Java 项目中,右键单击 src 文件夹,然后选择 New (新建)Class (类)

  7. Java Class (Java 类) 对话框的 Name (名称) 字段中,输入新类的名称,例如 main

  8. Which method stubs would you like to create? (您想创建哪些方法存根?) 部分中,依次选择 public static void main(String[] args)Finish (完成)

  9. 在您的新类中输入 Java 源代码,然后添加示例中针对这些类和方法的相应 import 语句。为方便起见,以下显示了完整的源代码清单。

    注意

    在以下示例代码中,使用以下 Amazon CLI 命令将示例集群 ID (JobFlowId) 替换为在 Amazon Web Services Management Console 或中找到的账户中的有效集群 ID:j-xxxxxxxxxxxx

    aws emr list-clusters --active | grep "Id"

    此外,将示例 Amazon S3 路径 s3://path/to/my/jarfolder 替换为您的 JAR 的有效路径。最后,将示例类名称 com.my.Main1 替换为您的 JAR 中的类的正确名称(如果适用)。

    import com.amazonaws.AmazonClientException; import com.amazonaws.auth.AWSCredentials; import com.amazonaws.auth.AWSStaticCredentialsProvider; import com.amazonaws.auth.profile.ProfileCredentialsProvider; import com.amazonaws.services.elasticmapreduce.AmazonElasticMapReduce; import com.amazonaws.services.elasticmapreduce.AmazonElasticMapReduceClientBuilder; import com.amazonaws.services.elasticmapreduce.model.*; import com.amazonaws.services.elasticmapreduce.util.StepFactory; public class Main { public static void main(String[] args) { AWSCredentials credentials_profile = null; try { credentials_profile = new ProfileCredentialsProvider("default").getCredentials(); } catch (Exception e) { throw new AmazonClientException( "Cannot load credentials from .aws/credentials file. " + "Make sure that the credentials file exists and the profile name is specified within it.", e); } AmazonElasticMapReduce emr = AmazonElasticMapReduceClientBuilder.standard() .withCredentials(new AWSStaticCredentialsProvider(credentials_profile)) .withRegion(Regions.US_WEST_1) .build(); // Run a bash script using a predefined step in the StepFactory helper class StepFactory stepFactory = new StepFactory(); StepConfig runBashScript = new StepConfig() .withName("Run a bash script") .withHadoopJarStep(stepFactory.newScriptRunnerStep("s3://jeffgoll/emr-scripts/create_users.sh")) .withActionOnFailure("CONTINUE"); // Run a custom jar file as a step HadoopJarStepConfig hadoopConfig1 = new HadoopJarStepConfig() .withJar("s3://path/to/my/jarfolder") // replace with the location of the jar to run as a step .withMainClass("com.my.Main1") // optional main class, this can be omitted if jar above has a manifest .withArgs("--verbose"); // optional list of arguments to pass to the jar StepConfig myCustomJarStep = new StepConfig("RunHadoopJar", hadoopConfig1); AddJobFlowStepsResult result = emr.addJobFlowSteps(new AddJobFlowStepsRequest() .withJobFlowId("j-xxxxxxxxxxxx") // replace with cluster id to run the steps .withSteps(runBashScript, myCustomJarStep)); System.out.println(result.getStepIds()); } }
  10. 依次选择 Run (运行)Run As (运行方式)Java Application (Java 应用程序)

  11. 如果示例正确运行,则在 Eclipse IDE 控制台窗口中会显示这些新步骤的 ID 列表。正确的输出类似于:

    [s-39BLQZRJB2E5E, s-1L6A4ZU2SAURC]