

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

# Spark 단계 추가
<a name="emr-spark-submit-step"></a>

Amazon EMR 단계를 사용하여 EMR 클러스터에 설치된 Spark 프레임워크로 작업을 제출할 수 있습니다. 자세한 내용은 Amazon EMR 관리 안내서에서 [단계](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-overview.html#emr-overview-data-processing)를 참조하세요. 콘솔 및 CLI에서 Spark 애플리케이션 단계를 사용하여 이 작업을 수행할 수 있습니다. 그러면 사용자를 대신하여 `spark-submit` 스크립트가 실행됩니다. API에서는 단계를 사용하여 `spark-submit` 파일을 통해 `command-runner.jar`를 호출할 수 있습니다.

Spark로 애플리케이션 제출에 대한 자세한 내용은 Apache Spark 설명서에서 [Submitting applications](https://spark.apache.org/docs/latest/submitting-applications.html) 주제를 참조하세요.

**콘솔을 사용하여 Spark 단계를 제출하려면**

1. [https://console.aws.amazon.com/emr](https://console.aws.amazon.com/emr/) Amazon EMR 콘솔을 엽니다.

1. **클러스터 목록**에서 클러스터의 이름을 선택합니다.

1. **단계** 섹션으로 스크롤하여 섹션을 확장한 후 **단계 추가**를 선택합니다.

1. **단계 추가** 대화 상자에서 다음을 수행합니다.
   + **단계 유형**에서 **Spark 애플리케이션**을 선택합니다.
   + **이름**에서 기본 이름(Spark 애플리케이션)을 그대로 사용하거나 새 이름을 입력합니다.
   + **Deploy mode(배포 모드)**에서 **클라이언트** 또는 **클러스터** 모드를 선택합니다. 클라이언트 모드는 클러스터의 프라이머리 인스턴스에서 드라이버 프로그램을 시작하고, 클러스터 모드는 클러스터에서 드라이버 프로그램을 시작합니다. 클라이언트 모드의 경우 드라이버의 로그 출력이 단계 로그에 나타나고, 클러스터 모드의 경우 드라이버의 로그 출력이 첫 번째 YARN 컨테이너의 로그에 나타납니다. 자세한 내용은 Apache Spark 설명서의 [Cluster mode overview](https://spark.apache.org/docs/latest/cluster-overview.html)를 참조하세요.
   + 원하는 **Spark-submit 옵션**을 지정합니다. `spark-submit` 옵션에 대한 자세한 내용은 [Launching applications with spark-submit](https://spark.apache.org/docs/latest/submitting-applications.html#launching-applications-with-spark-submit)을 참조하세요.
   + **애플리케이션 위치**에는 해당 애플리케이션의 로컬 또는 S3 URI 경로를 지정합니다.
   + **인수**에서 필드를 비워 둡니다.
   + **실패 시 작업**에서 기본 옵션(**계속**)을 그대로 사용합니다.

1. **추가**를 선택합니다. 단계가 콘솔에 [Pending] 상태로 나타납니다.

1. 단계의 상태는 단계가 실행됨에 따라 **대기 중**에서 **실행 중**을 거쳐 **완료됨**으로 바뀝니다. 상태를 업데이트하려면 **작업** 열 위의 **새로 고침** 아이콘을 선택합니다.

1. 단계 결과는 로깅을 구성한 경우 Amazon EMR 콘솔 클러스터 세부 정보 페이지에서 **로그 파일** 아래 단계 옆에 있습니다. 또는 클러스터를 시작할 때 구성한 로그 버킷에서도 단계 정보를 찾아볼 수 있습니다.

**를 사용하여 Spark에 작업을 제출하려면 AWS CLI**

클러스터 생성 시 단계를 제출하거나 기존 클러스터에서 `aws emr add-steps` 하위 명령을 사용합니다.

1. 다음 예제에 표시된 대로 `create-cluster`를 사용합니다.
**참고**  
가독성을 위해 Linux 줄 연속 문자(\$1)가 포함됩니다. Linux 명령에 사용하거나 제외할 수 있습니다. Windows에서는 제외시키거나 캐럿(^)으로 바꿉니다.

   ```
   aws emr create-cluster --name "Add Spark Step Cluster" --release-label emr-7.12.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.12.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 줄 연속 문자(\$1)가 포함됩니다. Linux 명령에 사용하거나 제외할 수 있습니다. Windows에서는 제외시키거나 캐럿(^)으로 바꿉니다.

1. 또는 이미 실행 중인 클러스터에 단계를 추가합니다. `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);
   ```

1. 단계에 대한 로그를 검토하여 단계의 결과를 살펴봅니다. 단계를 선택하고 **단계를** 선택한 다음 로그 **파일**에서 `stdout` 또는 중 하나를 선택하여 로깅을 활성화한 AWS Management Console 경우에서이 작업을 수행할 수 있습니다`stderr`. 사용할 수 있는 로그를 보려면 **로그 보기**를 선택합니다.

## Spark 기본 구성 설정 재정의
<a name="dynamic-configuration"></a>

애플리케이션마다 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 설명서의 [Dynamically Loading Spark Properties](https://spark.apache.org/docs/latest/configuration.html#dynamically-loading-spark-properties) 주제를 참조하세요.