BLOG

AWS Systems Manager Run Command 활용법 – Amazon EMR에서 Spark/Hadoop 작업 제출하기
작성일: 2020-02-03

많은 고객이 Apache Spark와 함께 Amazon EMR을 사용 하여 확장 가능한 빅 데이터 파이프 라인을 구축합니다. 대규모 생산 파이프 라인의 경우 일반적인 사용 사례는 다양한 소스에서 복잡한 데이터를 읽는 것입니다. 머신 러닝 파이프 라인, 분석 대시 보드 및 비즈니스 보고서와 같은 다운 스트림 애플리케이션에 유용하도록 이 데이터를 변환해야합니다. 이러한 파이프 라인은 종종 Spark 또는 Hadoop 작업을 Amazon EMR에 제출해야합니다 . 오늘은 AWS SystemManager Run Command를 사용하여 Amazon EMR 클러스터에서 Hadoop 또는 Spark 작업을 제출하는 방법을 다루어 보겠습니다.

 

개요

AWS Systems Manager의 일부인 Run Command는 인스턴스를 원격으로 안전하게 관리할 수 ​​있도록 설계되었습니다. Run Command는 쉘 스크립트 실행, 소프트웨어 또는 패치 설치 등과 같은 일반적인 관리 작업을 자동화하는 간단한 방법을 제공합니다. Run Command를 사용하면 여러 인스턴스에서 이러한 명령을 실행할 수 있으며 결과를 볼 수 있습니다. IAM 과의 통합을 통해 세부적인 권한을 적용하여 사용자가 인스턴스에서 수행할 수있는 작업을 제어할 수 있습니다. Run Command로 수행한 모든 작업은 AWS CloudTrail에 의해 기록 되므로 집합의 변경 사항을 감사할 수 있습니다.

기존 서버 기반 리소스에 대한 대화식 SSH 액세스가 종종 높은 관리 및 보안 오버 헤드와 함께 제공되기 때문에 여기선 SSH를 사용하지 않고 SSM Run Command를 사용하여 Amazon EMR에서 Spark 및 Hadoop 작업을 안전하게 제출하는 방법을 보여드리겠습니다. 이 수준의 액세스를 제공하려면 사용자 계정, 비밀번호, SSH 키 및 인바운드 네트워크 포트를 유지해야하며, 요새 호스트 등을위한 추가 인프라를 지원하는 추가 비용 또한 종종 발생합니다.

 

전제 조건

시작하기 전에 다음을 수행했는지 확인하십시오.

1. AWS Systems Manager 및 Amazon S3 서비스에 대한 최소 액세스 권한으로 IAM 역할을 생성하십시오.

  • 다음 스크린 샷과 같이 생성된 역할에 대한 AmazonSSMManagedInstanceCore 관리형 정책을 연결하십시오.
  •  유일한 Amazon S3 버킷에 액세스할 수있는 최소 제한 정책을 생성하고 첨부하십시오. 다음 스크린 샷에서 볼 수 있듯이 s3 : // ssmruncmdemr 버킷은 쉘 스크립트 코드를 스테이징하고 SSM RUNCMD 실행 결과를 유지하는 데 사용됩니다.

{ “Version”: “2012-10-17”, “Statement”: [ { “Effect”: “Allow”, “Action”: “s3:PutObject”,”s3:GetObject” “Resource”: [ “arn:aws:s3:::ssmruncmdemr”, “arn:aws:s3:::ssmruncmdemr/*” ] } ] }

 

2. Amazon EMR 클러스터를 시작합니다. 기본적으로 Amazon EMR은 EMR_EC2_Instance 역할로 시작됩니다. 이전 단계에서 생성한 역할을 선택하십시오. Amazon EMR 클러스터가 준비되고 대기 상태가되면 Amazon EC2 인스턴스 프로파일은 다음 스크린 샷과 같이 지정한 역할을 갖습니다.

 

AWS 콘솔을 사용하여 AWS-RunShellScript 시연

다음 단계에 따라 AWS-Run-Shell-Script를 시연하십시오.

  1. Systems Manager 콘솔에 로그인하고 왼쪽 탐색 창에서 Run Command를 선택합니다.
  2. 다음 스크린 샷과 같이 AWS Systems Manager AWS-RunShellScript 문서를 선택하십시오.
  3. Run Command 및 AWS-RunShellScript 문서를 사용하면 마치 로컬로 로그온 한 것처럼 Amazon EMR 인스턴스에서 모든 명령 또는 스크립트를 실행할 수 있습니다.

4. 명령 매개 변수의 값을 전달하십시오. Amazon EMR 인스턴스에있는 스크립트 경로 또는 직접 Unix 또는 Hadoop 명령을 지정할 수 있습니다.

실시 예 1

이 단계에서는 쉘 스크립트를 명령 매개 변수로 전달합니다. 쉘 스크립트는 스파크 작업을 실행의 일부로 호출합니다. 다음 스크린 샷과 같이 스크립트가 Amazon S3에서 Amazon EMR 홈 / hadoop 디렉토리로 복사됩니다.

Run Command는 태그, 수동 또는 리소스 그룹별로 인스턴스를 선택할 수있는 옵션을 제공합니다. 다음 스크린 샷과 같이 Amazon EMR 마스터 노드 인스턴스를 수동으로 선택하십시오.

명령이 제출 된 후 UI에서 AWS-RunShellScript 명령을 추적 할 수 있습니다. 다음 스크린 샷과 같이 명령의 상태가 진행 중이며 완료 후 성공으로 표시됩니다. 명령 결과는 Amazon S3 버킷에 유지됩니다.

 

다음 스크린 샷에 표시된 출력은 성공적인 실행을 보여줍니다.

스크립트는 다음 작업을 수행했습니다.

  1. 아티팩트가 Amazon S3 버킷에서 Amazon EMR 홈 / hadoop 디렉토리로 복사되었습니다.
  2. 실제 쉘 스크립트 코드는 Unix cat 명령을 사용하여 표시됩니다. 다음 스크린 샷에서 쉘 스크립트 코드를 볼 수 있습니다
  3. 10 초 동안 기다렸습니다.
  4. Spark 스크립트 sparkPi를 실행하는 쉘 스크립트 Big_data_processing.sh가 실행됩니다.

#Big_data_processing.sh #!bin/sh echo “Starting Spark Job1” echo “start time:” date ‘+%F %T’ spark-submit –executor-memory 1g –class org.apache.spark.examples.SparkPi /usr/lib/spark/examples/jars/spark-examples.jar 10 echo “end time:” date ‘+%F %T’ echo “ETL Job 1 completed”

참고 : 여러 Apache Spark 작업을 동시에 실행하려는 경우 현재 명령이 완료되기를 기다리지 않고 다음 명령을 실행할 수 있도록 백그라운드 모드에서 쉘 스크립트를 호출하십시오. Amazon EMR에 병렬로드를 실행하도록 지원되는 구성이 있는지 확인하십시오.

 

실시 예 2

이 예에서는 HDFS 파일 시스템 사용을 확인하기 위해 Hadoop 관리 명령을 전달합니다.

hdfs dfs -df -h

위의 명령은 사람이 읽을 수있는 형식으로 Amazon EMR에서 HDFS의 사용 된 공간과 사용 가능한 공간을 표시합니다.

 

AWS CLI를 사용하여 AWS-Run-Shell-Script 시연

다음 AWS CLI 명령을 사용하여 동일한 작업을 수행할 수 있습니다.

aws ssm send-command --document-name "AWS-RunShellScript" --document-version "1" --targets '[{"Key":"InstanceIds","Values":["i-instanceid"]}]' --parameters '{"workingDirectory":[""],"executionTimeout":["3600"],"commands":["sh /home/hadoop/Big_data_processing.sh"]}' --timeout-seconds 600 --max-concurrency "50" --max-errors "0" --output-s3-bucket-name "ssmruncmdemr" --output-s3-key-prefix "output" --region us-east-1

aws ssm list-command-invocations --command-id "f0a3241c-29a8-418b-bb16-33f2f9337874" --details

 

YARN Resource Manager UI에서 Hadoop 또는 Spark 작업 상태 확인

다음 스크린 샷과 같이 Amazon EMR 리소스 관리자 UI (http : // master-public-dns-name : 8088 /)를 열어 run 명령을 사용하여 제출 된 Spark 또는 Hadoop 작업의 실행을 확인하십시오.

 

글을 마치며…

오늘은 System Manager Run Command를 사용하여 SSH 키없이 Amazon EMR에서 Hadoop 및 Spark 작업을 제출하는 방법을 시연했습니다. Run Command 실행 결과는 Amazon S3 버킷에 유지됩니다. Systems Manager Run-Command는 Amazon EMR 작업 및 관리를 수행하고 SSH없이 쉘 스크립트를 실행하여 새 소프트웨어를 설치하는 안전한 방법을 제공합니다.

System Manager  기능에 대한 자세한 내용은 AWS 설명서를 참고해 주시기 바라며, EC2 인스턴스에서 원격 명령을 실행하려면 문서를 확인해 주십시오.

 


 

원문 URL: https://aws.amazon.com/ko/blogs/mt/integrating-aws-systems-manager-run-command-with-amazon-emr-to-submit-spark-hadoop-jobs/

** 메가존 클라우드 TechBlog는 AWS BLOG 영문 게재 글 중에서 한국 사용자들에게 유용한 정보 및 콘텐츠를 우선적으로 번역하여 내부 엔지니어 검수를 받아서, 정기적으로 게재하고 있습니다. 추가로 번역 및 게재를 희망하는 글에 대해서 관리자에게 메일 또는 SNS 페이지에 댓글을 남겨주시면, 우선적으로 번역해서 전달해드리도록 하겠습니다.