이전 AMI 버전의 Amazon EMR을 사용한 스파크 애플리케이션 세부 사항 - Amazon EMR

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

이전 AMI 버전의 Amazon EMR을 사용한 스파크 애플리케이션 세부 사항

대화형으로 또는 배치 모드에서 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. https://console.aws.amazon.com/elasticmapreduce/에서 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로 설정된 클러스터를 생성하는 방법을 보여주는 예입니다.

참고

가독성을 위해 Linux 줄 연속 문자(\)가 포함됩니다. 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 스크립트를 실행합니다. 다음을 사용하여 단계 추가addJobFlowSteps메서드AmazonElasticMapReduceClient:

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 옵션을 사용하여 기본 제공 스위치가 없는 설정을 조정할 수도 있습니다. 조정 가능한 기타 설정에 대한 자세한 내용은 다음 단원을 참조하십시오.Spark 프로퍼티를 동적으로Apache Spark 설명서의 주제를 참조하십시오.