기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
Spark 애플리케이션은 이전 AMI 버전의 Amazon에서만 사용할 수 있습니다. EMR
대화식 또는 배치 모드로 Spark 사용
EMRAmazon에서는 Spark 애플리케이션을 두 가지 모드로 실행할 수 있습니다.
-
대화형
-
배치
콘솔 또는 를 사용하여 장기 실행 클러스터를 시작하는 경우 를 Hadoop 사용자로 마스터 노드에 연결하고 Spark 셸을 사용하여 SSH Spark 애플리케이션을 대화식으로 개발하고 실행할 수 있습니다. AWS CLI Spark를 대화식으로 사용하면 배치 환경에서보다 더 쉽게 Spark 애플리케이션을 시제품화하거나 테스트할 수 있습니다. 대화형 모드에서 Spark 애플리케이션을 성공적으로 수정한 후에는 Amazon S3에 있는 클러스터의 마스터 노드에 있는 로컬 파일 시스템에 해당 애플리케이션 또는 JAR Python 프로그램을 배치할 수 있습니다. 그런 다음 이 애플리케이션을 배치 워크플로로 제출할 수 있습니다.
배치 모드에서는 Spark 스크립트를 Amazon S3 또는 로컬 프라이머리 노드 파일 시스템에 업로드한 다음, 작업을 클러스터에 하나의 단계로 제출합니다. 장기 실행 클러스터 또는 일시적 클러스터에 Spark 단계를 제출할 수 있습니다.
Spark가 설치된 클러스터 생성
콘솔을 사용하여 Spark가 설치된 클러스터를 시작하려면
새 Amazon EMR 콘솔로 이동한 다음 측면 탐색에서 이전 콘솔로 전환을 선택합니다. 이전 콘솔로 전환할 때 예상되는 사항에 대한 자세한 내용은 이전 콘솔 사용을 참조하세요.
-
클러스터 생성을 선택합니다.
-
소프트웨어 구성의 경우 필요한 AMI 릴리스 버전을 선택합니다.
-
설치할 애플리케이션의 목록에서 Spark를 선택한 다음 구성 및 추가를 선택합니다.
-
인수를 추가하여 원하는 대로 Spark 구성을 변경합니다. 자세한 내용은 Spark 구성 단원을 참조하십시오. 추가(Add)를 선택합니다.
-
필요에 따라 다른 옵션을 선택한 다음 클러스터 생성을 선택합니다.
다음은 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/ /spark 리포지토리에 있는 부트스트랩 작업을 실행하여 emr-bootstrap-actions Spark를$SPARK_CONF_DIR/spark-defaults.conf
파일의 속성을 구성합니다. 설정에 대한 자세한 내용은 Spark 설명서의 Spark 구성 주제를 참조하십시오. 다음의 URL “latest”를 설치 중인 Spark의 버전 번호로 바꿀 수 있습니다 (예:). 2.2.0
http://spark.apache.org/docs/latest/configuration.html
또한 각 애플리케이션 제출 시 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에 작업 제출
클러스터에 작업을 제출하려면 클러스터에서 spark-submit
스크립트를 실행하는 단계를 사용하십시오. EMR 다음 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
옵션을 사용하여 기본 제공 스위치가 없는 설정을 조정할 수도 있습니다. 조정 가능한 다양한 설정에 대한 자세한 내용은 Apache Spark 설명서의 Dynamically Loading Spark Properties