Amazon EMR
管理指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 Amazon AWS 入门

端到端 Amazon EMR Java 源代码示例

开发人员可使用自定义 Java 代码调用 Amazon EMR API,以便执行与使用 Amazon EMR 控制台或 CLI 可能执行的相同操作。本节提供了完整的操作步骤,用以安装 AWS Toolkit for Eclipse 和运行用于将步骤添加到 Amazon EMR 集群中的功能完备的 Java 源代码示例。

注意

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

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

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

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

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

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

注意

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

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

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

安装数据库开发 Eclipse 插件

  1. 打开 Eclipse IDE。

  2. 依次选择 HelpInstall New Software

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

  4. 在项目列表中,依次选择 Database DevelopmentFinish

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

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

安装 Toolkit for Eclipse

  1. 打开 Eclipse IDE。

  2. 依次选择 HelpInstall New Software

  3. Work with: 字段中,键入 http://www.amazonaws.cn//eclipse

  4. 在项目列表中,依次选择 AWS Toolkit for EclipseFinish

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

下一步,创建一个新的 AWS Java 项目,然后运行示例 Java 源代码。

创建新的 AWS Java 项目

  1. 打开 Eclipse IDE。

  2. 依次选择 FileNewOther

  3. Select a wizard 对话框中,依次选择 AWS Java ProjectNext

  4. New AWS Java Project (新建 AWS Java 项目) 对话框的 Project name: (项目名称:) 字段中,输入新项目的名称,如 EMR-sample-code

  5. 选择 Configure AWS accounts…,输入您的公有和秘密访问密钥,然后选择 Finish。有关创建访问密钥的更多信息,请参阅 Amazon Web Services 一般参考中的如何获取安全凭证?

    注意

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

  6. 在新的 Java 项目中,右键单击 src 文件夹,然后选择 NewClass

  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 语句。为方便起见,以下显示了完整的源代码清单。

    注意

    在以下示例代码中,将示例集群 ID (j-1HTE8WKS7SODR) 替换为您账户中的有效集群 ID,可在 AWS Management Console 中找到或使用以下 AWS CLI 命令找到此 ID:

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

    此外,将示例 Amazon S3 路径 (s3://mybucket/my-jar-location1) 替换成到您的 JAR 的有效路径。最后,将示例类名称 (com.my.Main1) 替换成您 JAR 中的类的正确名称 (如果适用)。

    import java.io.IOException; import com.amazonaws.auth.AWSCredentials; import com.amazonaws.auth.PropertiesCredentials; import com.amazonaws.services.elasticmapreduce.*; import com.amazonaws.services.elasticmapreduce.model.AddJobFlowStepsRequest; import com.amazonaws.services.elasticmapreduce.model.AddJobFlowStepsResult; import com.amazonaws.services.elasticmapreduce.model.HadoopJarStepConfig; import com.amazonaws.services.elasticmapreduce.model.StepConfig; import com.amazonaws.services.elasticmapreduce.util.StepFactory; public class main { public static void main(String[] args) { AWSCredentials credentials = null; try { credentials = new PropertiesCredentials( main.class.getResourceAsStream("AwsCredentials.properties")); } catch (IOException e1) { System.out.println("Credentials were not properly entered into AwsCredentials.properties."); System.out.println(e1.getMessage()); System.exit(-1); } AmazonElasticMapReduce client = new AmazonElasticMapReduceClient(credentials); // predefined steps. See StepFactory for list of predefined steps StepConfig hive = new StepConfig("Hive", new StepFactory().newInstallHiveStep()); // A custom step HadoopJarStepConfig hadoopConfig1 = new HadoopJarStepConfig() .withJar("s3://mybucket/my-jar-location1") .withMainClass("com.my.Main1") // optional main class, this can be omitted if jar above has a manifest .withArgs("--verbose"); // optional list of arguments StepConfig customStep = new StepConfig("Step1", hadoopConfig1); AddJobFlowStepsResult result = client.addJobFlowSteps(new AddJobFlowStepsRequest() .withJobFlowId("j-1HTE8WKS7SODR") .withSteps(hive, customStep)); System.out.println(result.getStepIds()); } }
  10. 依次选择 RunRun AsJava Application

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

    [s-39BLQZRJB2E5E, s-1L6A4ZU2SAURC]