

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 종단 간 Amazon EMR Java 소스 코드 샘플
<a name="emr-common-programming-sample"></a>

개발자는 사용자 지정 Java 코드로 Amazon EMR API를 직접 호출하여 Amazon EMR 콘솔 또는 CLI로 동일한 작업을 수행할 수 있습니다. 이 섹션에서는를 설치하고 Amazon EMR 클러스터에 단계를 추가하는 완전한 기능의 Java 소스 코드 샘플을 AWS Toolkit for Eclipse 실행하는 데 필요한 end-to-end 단계를 제공합니다.

**참고**  
이 예제는 Java에 중점을 두지만, Amazon EMR에서는 Amazon EMR SDK 모음으로 여러 프로그래밍 언어를 지원합니다. 자세한 내용은 [SDK를 사용하여 Amazon EMR API 직접 호출](call-emr-using-sdks.md) 단원을 참조하십시오.

 이 Java 소스 코드 예제는 Amazon EMR API를 사용하여 다음 작업을 수행하는 방법을 보여 줍니다.
+ 자격 AWS 증명을 검색하여 Amazon EMR로 전송하여 API 호출
+ 새로운 사용자 지정 단계 및 미리 정의된 단계 구성
+ 기존 Amazon EMR 클러스터에 새 단계 추가
+ 실행 중인 클러스터에서 클러스터 단계 ID 검색

**참고**  
이 샘플은 기존 클러스터에 단계를 추가하는 방법을 보여 주며 계정에 활성 클러스터가 있어야 합니다.

시작하기 전에 컴퓨터 플랫폼과 일치하는 **Eclipse IDE for Java EE Developers** 버전을 설치합니다. 자세한 내용은 [Eclipse Downloads](http://www.eclipse.org/downloads/)를 참조하세요.

다음으로, Eclipse용 Database Development 플러그인을 설치합니다.

**Database Development Eclipse 플러그인을 설치하는 방법**

1. Eclipse IDE를 엽니다.

1. **Help(도움말)**와 **Install New Software(새 소프트웨어 설치)**를 선택합니다.

1. **Work with:(다음을 사용하여 작업:)** 필드에 **http://download.eclipse.org/releases/kepler** 또는 Eclipse IDE 버전 번호에 맞는 경로를 입력합니다.

1. 항목 목록에서 **Database Development(데이터베이스 개발)** 및 **Finish(완료)**를 선택합니다.

1. 메시지가 표시되면 Eclipse를 다시 시작합니다.

다음으로, Toolkit for Eclipse를 설치하여 미리 구성된 유용한 소스 코드 프로젝트 템플릿을 사용 가능하도록 설정합니다.

**Toolkit for Eclipse를 설치하는 방법**

1. Eclipse IDE를 엽니다.

1. **Help(도움말)**와 **Install New Software(새 소프트웨어 설치)**를 선택합니다.

1. **Work with:(다음을 사용하여 작업:)** 필드에 **https://aws.amazon.com/eclipse**를 입력합니다.

1. 항목 목록에서 **AWS Toolkit for Eclipse**를 선택하고 **완료**를 선택합니다.

1. 메시지가 표시되면 Eclipse를 다시 시작합니다.

그런 다음 새 AWS Java 프로젝트를 생성하고 샘플 Java 소스 코드를 실행합니다.

**새 AWS Java 프로젝트를 생성하려면**

1. Eclipse IDE를 엽니다.

1. [**File**], [**New**] 및 [**Other**]를 선택합니다.

1. **마법사 선택** 대화 상자에서 **AWS Java 프로젝트** 및 **다음**을 선택합니다.

1. **새 AWS Java 프로젝트** 대화 상자의 **Project name:** 필드에와 같이 새 프로젝트의 이름을 입력합니다**EMR-sample-code**.

1. ** AWS 계정 구성...**을 선택하고 퍼블릭 및 프라이빗 액세스 키를 입력한 다음 **완료**를 선택합니다. 액세스 키 생성에 대한 자세한 내용은 *Amazon Web Services 일반 참조*에서 [How do I get security credentials?](https://docs.aws.amazon.com/general/latest/gr/getting-aws-sec-creds.html)를 참조하세요.
**참고**  
코드에 액세스 키를 직접 포함하면 **안 됩니다**. Amazon EMR SDK를 사용하면 코드에서 유지할 필요가 없도록 알려진 위치에 액세스 키를 추가할 수 있습니다.

1. 새 Java 프로젝트에서 [**src**] 폴더를 마우스 오른쪽 버튼으로 클릭한 다음 [**New**] 및 [**Class**]를 선택합니다.

1. **Java Class(Java 클래스)** 대화 상자의 **Name(이름)** 필드에 새 클래스 이름을 입력합니다(예: **main**).

1. **Which method stubs would you like to create?(어떤 메서드 스텁(Stub)을 생성하시겠습니까?)** 섹션에서 **public static void main(String[] args)** 및 **Finish(완료)**를 선택합니다.

1. 새 클래스 내부에 Java 소스 코드를 입력하고 샘플의 클래스 및 메서드에 대해 해당**import **문을 추가합니다. 편의를 위해 전체 소스 코드 내용이 아래에 나와 있습니다.
**참고**  
다음 샘플 코드에서 다음 AWS CLI 명령을 사용하여 예제 클러스터 ID(JobFlowId), {{`j-xxxxxxxxxxxx`}}를 AWS Management Console 또는에 있는 계정의 유효한 클러스터 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());
   
   	}
   }
   ```

1. **실행**, **Run As(다음으로 실행)** 및 **Java Application(Java 애플리케이션)**을 선택합니다.

1. 샘플이 올바르게 실행되는 경우 새 단계에 대한 ID 목록이 Eclipse IDE 콘솔 창에 나타납니다. 올바른 출력은 다음과 같습니다.

   ```
   [s-39BLQZRJB2E5E, s-1L6A4ZU2SAURC]
   ```