Amazon EMR
管理指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 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. 依次选择 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: (使用:) 字段中,键入 http://www.amazonaws.cn//eclipse

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

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

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

创建新的 AWS Java 项目

  1. 打开 Eclipse IDE。

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

  3. Select a wizard (选择向导) 对话框中,依次选择 AWS Java Project (AWS Java 项目)Next (下一步)

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

    注意

    在以下示例代码中,将示例集群 ID (JobFlowId) j-xxxxxxxxxxxx 替换为您的账户中的有效集群 ID,可以在 AWS 管理控制台 中找到该 ID 或使用以下 AWS CLI 命令找到该 ID:

    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]