Amazon EMR의 이전 AMI 버전에 고유한 Spark 애플리케이션 - Amazon EMR

Amazon EMR의 이전 AMI 버전에 고유한 Spark 애플리케이션

대화식 또는 배치 모드로 Spark 사용

Amazon EMR에서는 두 가지 모드로 Spark 애플리케이션을 실행할 수 있습니다.

  • 대화형

  • Batch

콘솔이나 AWS CLI를 사용하여 장기 실행 클러스터를 시작하면 SSH를 사용하여 마스터 노드에 Hadoop 사용자로 연결하고 Spark 셸을 사용하여 Spark 애플리케이션을 대화식으로 개발 및 실행할 수 있습니다. Spark를 대화식으로 사용하면 배치 환경에서보다 더 쉽게 Spark 애플리케이션을 시제품화하거나 테스트할 수 있습니다. Spark 애플리케이션을 대화형 모드에서 수정한 후에는 해당 애플리케이션 JAR 또는 Python 프로그램을 Amazon S3에 있는 클러스터의 로컬 프라이머리 노드 파일 시스템에 추가할 수 있습니다. 그런 다음 이 애플리케이션을 배치 워크플로로 제출할 수 있습니다.

배치 모드에서는 Spark 스크립트를 Amazon S3 또는 로컬 프라이머리 노드 파일 시스템에 업로드한 다음, 작업을 클러스터에 하나의 단계로 제출합니다. 장기 실행 클러스터 또는 일시적 클러스터에 Spark 단계를 제출할 수 있습니다.

Spark가 설치된 클러스터 생성

콘솔을 사용하여 Spark가 설치된 클러스터를 시작하려면
  1. 새 Amazon EMR 콘솔로 이동하고 측면 탐색에서 이전 콘솔로 전환을 선택합니다. 이전 콘솔로 전환할 때 예상되는 사항에 대한 자세한 내용은 이전 콘솔 사용을 참조하세요.

  2. 클러스터 생성(Create cluster)을 선택합니다.

  3. 소프트웨어 구성에서 필요한 AMI 릴리스 버전을 선택합니다.

  4. 설치할 애플리케이션의 목록에서 Spark를 선택한 다음 구성 및 추가를 선택합니다.

  5. 인수를 추가하여 원하는 대로 Spark 구성을 변경합니다. 자세한 내용은 Spark 구성 섹션을 참조하세요. 추가(Add)를 선택합니다.

  6. 필요에 따라 다른 옵션을 선택한 다음 클러스터 생성을 선택합니다.

다음은 Java를 사용하여 Spark가 설치된 클러스터를 생성하는 방법을 보여주는 예제입니다.

AmazonElasticMapReduceClient emr = new AmazonElasticMapReduceClient(credentials); SupportedProductConfig sparkConfig = new SupportedProductConfig() .withName("Spark"); RunJobFlowRequest request = new RunJobFlowRequest() .withName("Spark Cluster") .withAmiVersion("3.11.0") .withNewSupportedProducts(sparkConfig) .withInstances(new JobFlowInstancesConfig() .withEc2KeyName("myKeyName") .withInstanceCount(1) .withKeepJobFlowAliveWhenNoSteps(true) .withMasterInstanceType("m3.xlarge") .withSlaveInstanceType("m3.xlarge") ); RunJobFlowResult result = emr.runJobFlow(request);

Spark 구성

클러스터를 생성할 때 Github의 awslabs/emr-bootstrap-actions/spark 리포지토리에 있는 부트스트랩 작업을 실행하여 Spark를 구성합니다. 부트스트랩 작업이 허용하는 인수는 해당 리포지토리의 README를 참조하십시오. 부트스트랩 작업은 $SPARK_CONF_DIR/spark-defaults.conf 파일의 속성을 구성합니다. 설정에 대한 자세한 내용은 Spark 설명서의 Spark 구성 주제를 참조하십시오. 다음 URL의 "latest"를 2.2.0 http://spark.apache.org/docs/latest/configuration.html과 같이 설치하는 Spark 버전 번호로 대체할 수 있습니다.

또한 각 애플리케이션 제출 시 Spark를 동적으로 구성할 수 있습니다. spark 구성 파일을 사용하여 실행기에 대한 리소스 할당을 자동으로 최대화하는 설정을 사용할 수 있습니다. 자세한 내용은 Spark 기본 구성 설정 재정의 섹션을 참조하세요.

Spark 기본 설정 변경

다음은 AWS CLI를 사용하여 spark.executor.memory가 2G로 설정된 클러스터를 생성하는 방법을 보여주는 예입니다.

참고

2.x 및 3.x AMI 버전 Linux 명령에 사용하거나 제외할 수 있습니다. Windows에서는 제외시키거나 캐럿(^)으로 바꿉니다.

aws emr create-cluster --name "Spark cluster" --ami-version 3.11.0 \ --applications Name=Spark, Args=[-d,spark.executor.memory=2G] --ec2-attributes KeyName=myKey \ --instance-type m3.xlarge --instance-count 3 --use-default-roles

Spark에 작업 제출

작업을 클러스터로 제출하려면 단계를 사용하여 EMR 클러스터에서 spark-submit 스크립트를 실행합니다. AmazonElasticMapReduceClient에서 addJobFlowSteps 메서드를 사용하여 단계를 추가합니다.

AWSCredentials credentials = new BasicAWSCredentials(accessKey, secretKey); AmazonElasticMapReduceClient emr = new AmazonElasticMapReduceClient(credentials); StepFactory stepFactory = new StepFactory(); AddJobFlowStepsRequest req = new AddJobFlowStepsRequest(); req.withJobFlowId("j-1K48XXXXXXHCB"); List<StepConfig> stepConfigs = new ArrayList<StepConfig>(); StepConfig sparkStep = new StepConfig() .withName("Spark Step") .withActionOnFailure("CONTINUE") .withHadoopJarStep(stepFactory.newScriptRunnerStep("/home/hadoop/spark/bin/spark-submit","--class","org.apache.spark.examples.SparkPi","/home/hadoop/spark/lib/spark-examples-1.3.1-hadoop2.4.0.jar","10")); stepConfigs.add(sparkStep); req.withSteps(stepConfigs); AddJobFlowStepsResult result = emr.addJobFlowSteps(req);

Spark 기본 구성 설정 재정의

애플리케이션마다 Spark 기본 구성 값을 재정의해야 할 때가 있습니다. 이 작업은 단계를 사용하여 애플리케이션을 제출할 때 기본적으로 옵션을 spark-submit에 전달함으로써 수행할 수 있습니다. 예를 들면 spark.executor.memory를 변경하여 실행자 프로세스에 할당된 메모리를 변경해야 할 때가 있습니다. 다음과 같은 인수를 사용하여 --executor-memory 스위치를 공급할 수 있습니다.

/home/hadoop/spark/bin/spark-submit --executor-memory 1g --class org.apache.spark.examples.SparkPi /home/hadoop/spark/lib/spark-examples*.jar 10

마찬가지로, --executor-cores--driver-memory를 조정할 수 있습니다. 단계에서 다음 인수를 단계에 제공합니다.

--executor-memory 1g --class org.apache.spark.examples.SparkPi /home/hadoop/spark/lib/spark-examples*.jar 10

또한 --conf 옵션을 사용하여 기본 제공 스위치가 없는 설정을 조정할 수도 있습니다. 조정 가능한 다양한 설정에 대한 자세한 내용은 Apache Spark 설명서의 Dynamically Loading Spark Properties 주제를 참조하세요.