원격 시스템 또는 엣지 노드에서 Amazon EMR 클러스터로 Spark 작업을 제출하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2021년 8월 25일

Amazon EC2(Amazon Elastic Compute Cloud) 인스턴스와 같은 원격 시스템에서 Amazon EMR 클러스터로 Apache Spark 작업을 제출하려고 합니다.

간략한 설명

Amazon EMR 클러스터 노드에 로그인하지 않고도 원격 시스템 또는 엣지 노드에서 Spark 작업을 실행할 수 있습니다. Spark는 클라이언트 모드와 클러스터 모드를 포함하여 두 가지 유형의 배포 모드를 지원합니다. 배포 모드를 클러스터로 지정하지 않으면 원격 시스템 또는 엣지 노드의 Spark 작업이 클라이언트 모드에서 실행됩니다.

원격 시스템에서 EMR 클러스터로 Spark 작업을 제출하려면 다음 조건이 충족되어야 합니다.

  • 원격 시스템에서 모든 클러스터 노드로의 네트워크 트래픽이 허용됩니다.
  • 모든 Spark 및 Hadoop 바이너리가 원격 시스템에 설치되어 있습니다.
  • 원격 시스템의 구성 파일이 EMR 클러스터를 가리킵니다.

참고: AWS CLI 명령을 실행할 때 오류가 발생하는 경우 최신 버전의 AWS CLI를 사용하고 있는지 확인하세요.

해결 방법

원격 시스템에서 모든 클러스터 노드로 네트워크 트래픽이 허용되는지 확인

  • Amazon EC2 인스턴스를 원격 시스템 또는 엣지 노드로 사용하는 경우: 해당 인스턴스의 보안 그룹에서 각 클러스터 노드의 보안 그룹으로의 인바운드 트래픽을 허용합니다.
  • 자체 시스템을 사용하는 경우: 해당 시스템의 IP 주소에서 각 클러스터 노드의 보안 그룹으로의 인바운드 트래픽을 허용합니다.

원격 시스템에 Spark 및 기타 종속 바이너리 설치

바이너리를 설치하려면 다음 단계에 설명된 대로 EMR 클러스터의 프라이머리 노드에서 파일을 복사합니다. 이는 EMR 클러스터와 원격 시스템 모두에 동일한 버전이 설치되도록 하는 가장 쉬운 방법입니다.

1.    다음 명령을 실행하여 원격 시스템에 폴더 구조를 생성합니다.

sudo mkdir -p /var/aws/emr/
sudo mkdir -p /etc/hadoop/conf
sudo mkdir -p /etc/spark/conf
sudo mkdir -p /var/log/spark/user/
sudo mkdir /mnt1
sudo chmod 777 -R /var/log/spark/
sudo chmod 777 /mnt /mnt1

2.    다음 명령을 실행하여 EMR 클러스터의 프라이머리 노드에서 원격 시스템으로 리포지토리 파일 및 퍼블릭 키 파일을 복사합니다. 폴더 구조 또는 파일 이름은 변경하지 마세요.

참고: yours3bucket은 사용할 S3 버킷 이름으로 바꿉니다.

Amazon EMR 5.29 버전 이하의 경우:

EMR 클러스터에서:

aws s3 cp /etc/yum.repos.d/emr-apps.repo s3://yours3bucket/path/to/copy/repo/
aws s3 cp /var/aws/emr/repoPublicKey.txt s3://yours3bucket/path/to/copy/key/

Amazon EC2 인스턴스에서:

sudo aws s3 cp s3://yours3bucket/path/to/copy/repo/emr-apps.repo /etc/yum.repos.d/
sudo aws s3 cp s3://yours3bucket/path/to/copy/key/repoPublicKey.txt /var/aws/emr/repoPublicKey.txt

Amazon EMR 버전 5.30 이상의 경우:

EMR 클러스터에서:

aws s3 cp /etc/yum.repos.d/ s3://yours3bucket/path/to/copy/repo/ --recursive
aws s3 cp /var/aws/emr/repoPublicKey.txt s3://yours3bucket/path/to/copy/key/

Amazon EC2 인스턴스에서:

sudo aws s3 cp s3://yours3bucket/path/to/copy/repo/ /etc/yum.repos.d/ --recursive
sudo aws s3 cp s3://yours3bucket/path/to/copy/key/repoPublicKey.txt /var/aws/emr/repoPublicKey.txt

3.    다음 명령을 실행하여 Amazon EC2 인스턴스에서 Spark 및 Hadoop 바이너리를 설치합니다.

sudo yum install -y hadoop-client
sudo yum install -y hadoop-hdfs
sudo yum install -y spark-core
sudo yum install -y java-1.8.0-openjdk

Amazon EMR 5.33 및 6.3 버전의 경우 다음 명령도 실행합니다.

sudo useradd hadoop -g hadoop
sudo yum install -y hadoop

구성 파일을 생성하고 EMR 클러스터를 가리키도록 설정

참고: rsync와 같은 도구를 사용하여 EMR 프라이머리 노드에서 원격 인스턴스로 구성 파일을 복사할 수도 있습니다.

1.    EMR 클러스터의 마스터 노드에서 다음 명령을 실행하여 구성 파일을 Amazon S3(Amazon Simple Storage Service)로 복사합니다. yours3bucket은 사용하려는 버킷 이름으로 바꿉니다.

aws s3 cp /etc/spark/conf s3://yours3bucket/path/to/copy/spark/ --recursive
aws s3 cp /etc/hadoop/conf s3://yours3bucket/path/to/copy/hadoop/ --recursive
aws s3 cp /usr/share/aws/ s3://yours3bucket/path/to/copy/usr_share_aws/ --recursive
aws s3 cp /usr/lib/spark/jars s3://yours3bucket/path/to/copy/lib_spark_jars/ --recursive
aws s3 cp /usr/lib/hadoop-lzo s3://yours3bucket/path/to/copy/lib_hadoop_lzo/ --recursive

2.    코어 및 작업 노드에서 다음 명령을 실행하여 S3 버킷에서 원격 시스템으로 구성 파일을 다운로드합니다. yours3bucket은 이전 단계에서 사용한 버킷 이름으로 바꿉니다.

sudo aws s3 cp s3://yours3bucket/path/to/copy/spark/ /etc/spark/conf  --recursive
sudo aws s3 cp s3://yours3bucket/path/to/copy/hadoop/ /etc/hadoop/conf  --recursive
sudo aws s3 cp s3://yours3bucket/path/to/copy/usr_share_aws/ /usr/share/aws/ --recursive
sudo aws s3 cp s3://yours3bucket/path/to/copy/lib_spark_jars/ /usr/lib/spark/jars/ --recursive
sudo aws s3 cp s3://yours3bucket/path/to/copy/lib_hadoop_lzo/ /usr/lib/hadoop-lzo/ --recursive

3.    다음 명령을 실행하여 원격 시스템에 Hadoop 사용자를 추가합니다.

sudo useradd hadoop -g hadoop

참고: 다른 Hadoop 사용자 이름과 그룹 이름을 사용하는 경우 EMR 클러스터에 해당 이름이 있는지 확인합니다.

이제 원격 시스템이 Spark 작업을 수행할 준비가 되었습니다.

Spark 작업 제출

사용자를 Hadoop으로 전환합니다. 그런 다음, 다음 명령을 실행하여 EMR 클러스터에 Spark 작업을 제출합니다.

명령에서 다음과 같이 값을 변경합니다.

  • org.apache.spark.examples.SparkPi: 작업의 진입점 역할을 하는 클래스
  • /usr/lib/spark/examples/jars/spark-examples.jar: Java .jar 파일의 경로

배포 모드를 클러스터로 지정하려면 다음 명령을 실행합니다.

spark-submit --master yarn --deploy-mode cluster --class org.apache.spark.examples.SparkPi /usr/lib/spark/examples/jars/spark-examples.jar

배포 모드를 클라이언트로 지정하려면 다음 명령을 실행합니다.

spark-submit --master yarn --deploy-mode client --class org.apache.spark.examples.SparkPi /usr/lib/spark/examples/jars/spark-examples.jar

원격 시스템에서 hdfs 명령을 사용하여 HDFS 데이터에 액세스할 수도 있습니다.


이 문서가 도움이 되었나요?


결제 또는 기술 지원이 필요하세요?