자습서: Amazon EMR 시작하기 - Amazon EMR

자습서: Amazon EMR 시작하기

개요

Amazon EMR을 사용하면 단 몇 분 만에 빅 데이터 프레임워크로 데이터를 처리하고 분석하도록 클러스터를 설정할 수 있습니다. 이 자습서에서는 Spark를 사용하여 샘플 클러스터를 시작하는 방법과 Amazon S3 버킷에 저장된 간단한 PySpark 스크립트를 실행하는 방법을 보여줍니다. 그리고 계획 및 구성, 관리, 정리와 같은 세 가지 주요 워크플로 카테고리에서 핵심 Amazon EMR 작업을 다룹니다.

다음 단계 섹션에서는 자습서를 진행하면서 더 자세한 주제로 연결되는 링크와 추가 단계에 대한 아이디어를 제공합니다. 질문이 있거나 문제가 있는 경우 토론 포럼을 통해 Amazon EMR 팀에 문의하세요.


				계획 및 구성, 관리, 정리의 세 가지 주요 워크플로 카테고리를 요약한 Amazon EMR용 워크플로 다이어그램.
필수 조건
  • Amazon EMR 클러스터를 시작하기 전에 Amazon EMR 설정에서 작업을 완료해야 합니다.

비용
  • 사용자가 생성하는 샘플 클러스터는 실제 환경에서 실행됩니다. 클러스터에는 최소 요금이 누적됩니다. 추가 요금이 발생하지 않도록 하려면 이 자습서의 마지막 단계에서 정리 작업을 완료해야 합니다. 요금은 Amazon EMR 요금에 따라 초당 요금으로 누적됩니다. 요금은 리전에 따라서도 다릅니다. 자세한 내용은 Amazon EMR 요금을 참조하세요.

  • Amazon S3에 저장하는 작은 파일에도 최소 요금이 누적될 수 있습니다. AWS 프리 티어 사용량 한도 내에 있는 경우 Amazon S3에 대한 요금 중 일부 또는 전체가 면제될 수 있습니다. 자세한 내용은 Amazon S3 요금AWS 프리 티어를 참조하세요.

1단계: Amazon EMR 클러스터 계획 및 구성

Amazon EMR에서 사용할 스토리지 준비

Amazon EMR을 사용하는 경우 다양한 파일 시스템 중에서 선택하여 입력 데이터, 출력 데이터 및 로그 파일을 저장할 수 있습니다. 이 자습서에서는 EMRFS를 사용하여 데이터를 S3 버킷에 데이터를 저장합니다. EMRFS는 Amazon S3에서 일반 파일을 읽고 쓸 수 있게 지원하는 Hadoop 파일 시스템의 구현입니다. 자세한 내용은 스토리지 및 파일 시스템 작업 섹션을 참조하세요.

이 자습서에서 사용할 버킷을 생성하려면 Amazon Simple Storage Service 사용 설명서에서 S3 버킷을 생성하려면 어떻게 해야 하나요?의 지침을 따릅니다. Amazon EMR 클러스터를 시작하려는 동일한 AWS 리전에서 버킷을 생성합니다. 예를 들어, 미국 서부(오레곤) us-west-2와 같습니다.

Amazon EMR에서 사용하는 버킷 및 폴더에는 다음과 같은 제한 사항이 있습니다.

  • 이름에 소문자, 숫자, 마침표(.), 하이픈(-)을 포함할 수 있습니다.

  • 이름은 숫자로 끝날 수 없습니다.

  • 버킷 이름은 모든 AWS 계정에서 고유해야 합니다.

  • 출력 폴더는 비어 있어야 합니다.

Amazon EMR에서 입력 데이터로 애플리케이션 준비

Amazon EMR용 애플리케이션을 준비하는 가장 일반적인 방법은 애플리케이션과 해당 입력 데이터를 Amazon S3에 업로드하는 것입니다. 그런 다음 클러스터에 작업을 제출할 때 스크립트와 데이터에 대한 Amazon S3 위치를 지정합니다.

이 단계에서는 Amazon S3 버킷에 PySpark 스크립트 샘플을 업로드합니다. 사용할 수 있는 PySpark 스크립트가 제공됩니다. 스크립트는 식품 시설 검사 데이터를 처리하고 S3 버킷에 결과 파일을 반환합니다. 결과 파일에는 'Red' 유형 위반이 가장 많은 상위 10개 시설이 나열됩니다.

또한 PySpark 스크립트에서 처리할 수 있도록 Amazon S3에 샘플 입력 데이터를 업로드합니다. 입력 데이터는 2006년부터 2020년까지 워싱턴 주 킹 카운티의 보건부 검사 결과를 수정한 버전입니다. 자세한 내용은 King County Open Data: Food Establishment Inspection Data를 참조하세요. 다음은 데이터 세트의 행 샘플입니다.

name, inspection_result, inspection_closed_business, violation_type, violation_points 100 LB CLAM, Unsatisfactory, FALSE, BLUE, 5 100 PERCENT NUTRICION, Unsatisfactory, FALSE, BLUE, 5 7-ELEVEN #2361-39423A, Complete, FALSE, , 0
EMR용 PySpark 스크립트 예제를 준비하는 방법
  1. 원하는 편집기에서 아래 예제 코드를 새 파일에 복사합니다.

    import argparse from pyspark.sql import SparkSession def calculate_red_violations(data_source, output_uri): """ Processes sample food establishment inspection data and queries the data to find the top 10 establishments with the most Red violations from 2006 to 2020. :param data_source: The URI of your food establishment data CSV, such as 's3://DOC-EXAMPLE-BUCKET/food-establishment-data.csv'. :param output_uri: The URI where output is written, such as 's3://DOC-EXAMPLE-BUCKET/restaurant_violation_results'. """ with SparkSession.builder.appName("Calculate Red Health Violations").getOrCreate() as spark: # Load the restaurant violation CSV data if data_source is not None: restaurants_df = spark.read.option("header", "true").csv(data_source) # Create an in-memory DataFrame to query restaurants_df.createOrReplaceTempView("restaurant_violations") # Create a DataFrame of the top 10 restaurants with the most Red violations top_red_violation_restaurants = spark.sql("""SELECT name, count(*) AS total_red_violations FROM restaurant_violations WHERE violation_type = 'RED' GROUP BY name ORDER BY total_red_violations DESC LIMIT 10""") # Write the results to the specified output URI top_red_violation_restaurants.write.option("header", "true").mode("overwrite").csv(output_uri) if __name__ == "__main__": parser = argparse.ArgumentParser() parser.add_argument( '--data_source', help="The URI for you CSV restaurant data, like an S3 bucket location.") parser.add_argument( '--output_uri', help="The URI where output is saved, like an S3 bucket location.") args = parser.parse_args() calculate_red_violations(args.data_source, args.output_uri)
  2. 파일을 health_violations.py로 저장합니다.

  3. 이 자습서에서 생성한 Amazon S3의 버킷에 health_violations.py를 업로드합니다. 지침을 보려면 Amazon Simple Storage Service 시작하기 안내서에서 버킷에 객체 업로드를 참조하세요.

EMR에 사용할 샘플 입력 데이터를 준비하는 방법
  1. zip 파일(food_establishment_data.zip)를 다운로드합니다.

  2. 압축을 풀고 컴퓨터에 food_establishment_data.zipfood_establishment_data.csv으로 저장합니다.

  3. CSV 파일을 이 자습서에서 생성한 S3 버킷에 업로드합니다. 지침을 보려면 Amazon Simple Storage Service 시작하기 안내서에서 버킷에 객체 업로드를 참조하세요.

EMR에서 사용할 데이터 설정에 대한 자세한 내용은 입력 데이터 준비 섹션을 참조하세요.

Amazon EMR 클러스터 시작

스토리지 위치와 애플리케이션을 준비한 후 샘플 Amazon EMR 클러스터를 시작할 수 있습니다. 이 단계에서는 최신 Amazon EMR 릴리스 버전을 사용하여 Apache Spark 클러스터를 시작합니다.

New console
새 콘솔을 사용하여 Spark가 설치된 클러스터를 시작하는 방법
  1. AWS Management Console에 로그인한 후 https://console.aws.amazon.com/emr에서 Amazon EMR 콘솔을 엽니다.

  2. 왼쪽 탐색 창의 EMR on EC2에서 클러스터를 선택하고 클러스터 생성을 선택합니다.

  3. 클러스터 생성 페이지에서 릴리스, 인스턴스 유형, 인스턴스 수권한의 기본값을 기록합니다. 이러한 필드는 범용 클러스터에 적합한 값으로 자동으로 채워집니다.

  4. 클러스터 이름 필드에 클러스터를 식별하는 데 도움이 되는 고유한 클러스터 이름(예: My first cluster)을 입력합니다.

  5. 애플리케이션에서 Spark 옵션을 선택하여 클러스터에 Spark를 설치합니다.

    참고

    클러스터를 시작하기 전에 Amazon EMR 클러스터에서 원하는 애플리케이션을 선택합니다. 시작한 후에는 클러스터에서 애플리케이션을 추가하거나 클러스터에서 애플리케이션을 제거할 수 없습니다.

  6. 클러스터 로그에서 Amazon S3에 클러스터별 로그 게시 확인란을 선택합니다. Amazon S3 위치 값을 이전에 생성한 Amazon S3 버킷으로 바꾸고 /logs를 추가합니다. 예: s3://DOC-EXAMPLE-BUCKET/logs. /logs를 추가하면 버킷에 'logs'라는 새 폴더가 생성되며, 이 폴더에서 Amazon EMR이 클러스터의 로그 파일을 복사할 수 있습니다.

  7. 보안 구성 및 권한에서 EC2 키 페어를 선택합니다. 동일한 섹션에서 Amazon EMR에 대한 서비스 역할 드롭다운 메뉴를 선택하고 EMR_DefaultRole을 선택합니다. 그런 다음, 인스턴스 프로파일에 대한 IAM 역할 드롭다운 메뉴를 선택하고 EMR_EC2_DefaultRole을 선택합니다.

  8. 클러스터 생성을 선택하여 클러스터를 시작하고 클러스터 세부 정보 페이지를 엽니다.

  9. 클러스터 이름 옆에서 클러스터 상태를 찾습니다. Amazon EMR이 클러스터를 프로비저닝함에 따라 상태가 시작 중에서 실행 중, 대기 중으로 변경됩니다. 상태 업데이트를 확인하려면 오른쪽에서 새로 고침 아이콘을 선택하거나 브라우저를 새로 쳐야 할 수도 있습니다.

클러스터가 가동 및 실행 중이고 작업을 수락할 준비가 되면 클러스터 상태가 대기 중으로 변경됩니다. 클러스터 요약 읽기에 대한 자세한 내용은 클러스터 상태 및 세부 정보 보기 단원을 참조하십시오. 클러스터 상태에 대한 자세한 내용은 클러스터 수명 주기 이해 섹션을 참조하세요.

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

  2. 클러스터 생성을 선택하여 빠른 옵션 마법사를 엽니다.

  3. 클러스터 생성 - 빠른 옵션 페이지에서 릴리스, 인스턴스 유형, 인스턴스 수권한의 기본값을 기록합니다. 이러한 필드는 범용 클러스터에 적합한 값으로 자동 채워집니다.

  4. 클러스터를 식별하는 데 도움이 되는 클러스터 이름을 입력합니다. 예를 들어 My first cluster와 같습니다.

  5. 로깅을 활성화한 상태로 두되 S3 폴더 값을 이전에 생성한 Amazon S3 버킷으로 바꾼 후 /logs를 추가합니다. 예: s3://DOC-EXAMPLE-BUCKET/logs. /logs를 추가하면 버킷에 'logs'라는 새 폴더가 생성되며, 이 폴더에서 EMR이 클러스터의 로그 파일을 복사할 수 있습니다.

  6. 애플리케이션 아래에서 Spark 옵션을 선택하여 클러스터에 Spark를 설치합니다.

    참고

    클러스터를 시작하기 전에 Amazon EMR 클러스터에서 원하는 애플리케이션을 선택합니다. 시작한 후에는 클러스터에서 애플리케이션을 추가하거나 클러스터에서 애플리케이션을 제거할 수 없습니다.

  7. 보안 및 액세스에서 EC2 키 페어를 선택합니다.

  8. 클러스터 생성을 선택하여 클러스터를 시작하고 클러스터 상태 페이지를 엽니다.

  9. 클러스터 이름 옆에서 클러스터 상태를 찾습니다. Amazon EMR이 클러스터를 프로비저닝함에 따라 상태가 시작 중에서 실행 중, 대기 중으로 변경됩니다. 상태 업데이트를 확인하려면 오른쪽에서 새로 고침 아이콘을 선택하거나 브라우저를 새로 쳐야 할 수도 있습니다.

클러스터가 가동 및 실행 중이고 작업을 수락할 준비가 되면 클러스터 상태가 대기 중으로 변경됩니다. 클러스터 요약 읽기에 대한 자세한 내용은 클러스터 상태 및 세부 정보 보기 단원을 참조하십시오. 클러스터 상태에 대한 자세한 내용은 클러스터 수명 주기 이해 섹션을 참조하세요.

CLI
AWS CLI를 사용하여 Spark가 설치된 클러스터를 시작하려는 방법
  1. 다음 명령을 사용하여 클러스터를 생성하는 데 사용할 수 있는 IAM 기본 역할을 생성합니다.

    aws emr create-default-roles

    create-default-roles에 대한 자세한 내용은 AWS CLI 명령 참조를 참조하세요.

  2. 다음 명령을 사용하여 Spark 클러스터를 생성합니다. --name 옵션을 사용하여 클러스터 이름을 입력하고 --ec2-attributes 옵션을 사용하여 EC2 키 페어 이름을 지정합니다.

    aws emr create-cluster \ --name "<My First EMR Cluster>" \ --release-label <emr-5.36.1> \ --applications Name=Spark \ --ec2-attributes KeyName=<myEMRKeyPairName> \ --instance-type m5.xlarge \ --instance-count 3 \ --use-default-roles

    --instance-type, --instance-count--use-default-roles의 기타 필수 값을 기록합니다. 이 값은 범용 클러스터용으로 선택되었습니다. create-cluster에 대한 자세한 내용은 AWS CLI 명령 참조를 참조하세요.

    참고

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

    그러면 다음과 같은 결과가 표시됩니다. 출력에는 새 클러스터의 ClusterIdClusterArn이 표시됩니다. ClusterId를 기록합니다. ClusterId를 사용하여 클러스터 상태를 확인하고 작업을 제출합니다.

    { "ClusterId": "myClusterId", "ClusterArn": "myClusterArn" }
  3. 다음 명령을 사용하여 클러스터 상태를 확인합니다.

    aws emr describe-cluster --cluster-id <myClusterId>

    새 클러스터에 대한 Status 객체와 함께 다음과 같은 결과가 표시됩니다.

    { "Cluster": { "Id": "myClusterId", "Name": "My First EMR Cluster", "Status": { "State": "STARTING", "StateChangeReason": { "Message": "Configuring cluster software" } } } }

    Amazon EMR이 클러스터를 프로비저닝함에 따라 State 값이 STARTING에서 RUNNING, WAITING으로 변경됩니다.

클러스터가 가동 및 실행 중이고 작업을 수락할 준비가 되면 클러스터 상태가 WAITING으로 변경됩니다. 클러스터 상태에 대한 자세한 내용은 클러스터 수명 주기 이해 섹션을 참조하세요.

2단계: Amazon EMR 클러스터 관리

Amazon EMR에 작업 제출

클러스터를 시작한 후 실행 중인 클러스터에 작업을 제출하여 데이터를 처리하고 분석할 수 있습니다. 단계로 Amazon EMR 클러스터에 작업을 제출합니다. 단계는 하나 이상의 작업으로 구성된 작업 단위입니다. 예를 들어 값을 계산하거나 데이터를 전송 및 처리하는 단계를 제출할 수 있습니다. 단계는 클러스터를 실행할 때 제출하거나 실행 중인 클러스터에 제출할 수도 있습니다. 자습서의 이 부분에서는 실행 중인 클러스터에 단계로 health_violations.py를 제출합니다. 단계에 대한 자세한 내용은 클러스터에 작업 제출 섹션을 참조하세요.

New console
새 콘솔을 사용하여 Spark 애플리케이션을 단계로 제출하는 방법
  1. AWS Management Console에 로그인한 후 https://console.aws.amazon.com/emr에서 Amazon EMR 콘솔을 엽니다.

  2. 왼쪽 탐색 창의 EMR on EC2에서 클러스터를 선택하고 작업을 제출할 클러스터를 선택합니다. 클러스터 상태는 대기 중이어야 합니다.

  3. 단계를 선택하고 단계 추가를 선택합니다.

  4. 다음 지침에 따라 단계를 구성합니다.

    • 유형에서 Spark 애플리케이션을 선택합니다. 배포 모드, 애플리케이션 위치, Spark-submit 옵션에 대한 추가 필드가 표시됩니다.

    • 이름에 새 이름을 입력합니다. 클러스터에 여러 단계가 있는 경우 각 단계에 이름을 지정하면 단계를 추적하는 데 도움이 됩니다.

    • 배포 모드의 경우 기본값인 클러스터 모드를 그대로 둡니다. Spark 배포 모드에 대한 자세한 내용은 Apache Spark 설명서에서 Cluster mode overview를 참조하세요.

    • 애플리케이션 위치에는 Amazon S3의 health_violations.py 스크립트 위치(예: s3://DOC-EXAMPLE-BUCKET/health_violations.py)를 입력합니다.

    • Spark-submit 옵션 필드는 비워 둡니다. spark-submit 옵션에 대한 자세한 내용은 Launching applications with spark-submit을 참조하세요.

    • 인수 필드에 다음 인수 및 값을 입력합니다.

      --data_source s3://DOC-EXAMPLE-BUCKET/food_establishment_data.csv --output_uri s3://DOC-EXAMPLE-BUCKET/myOutputFolder

      s3://DOC-EXAMPLE-BUCKET/food_establishment_data.csvAmazon EMR에서 입력 데이터로 애플리케이션 준비에서 준비한 입력 데이터의 S3 버킷 URI로 바꿉니다.

      DOC-EXAMPLE-BUCKET을 이 자습서에서 생성한 버킷 이름으로 바꾸고, myOutputFolder를 클러스터 출력 폴더의 이름으로 바꿉니다.

    • 단계 실패 시 작업에서 기본 옵션(계속)을 수락합니다. 이렇게 하면 단계가 실패해도 클러스터가 계속 실행됩니다.

  5. 추가를 선택하여 단계를 제출합니다. 단계가 콘솔에 보류 중 상태로 나타납니다.

  6. 단계 상태를 모니터링합니다. 대기 중에서 실행 중으로, 그리고 완료됨으로 변경됩니다. 콘솔에서 상태를 업데이트하려면 필터의 오른쪽에 있는 새로 고침 아이콘을 선택합니다. 스크립트를 실행하는 데 약 1분이 걸립니다. 상태가 완료됨으로 변경되면 단계가 성공적으로 완료된 것입니다.

Old console
이전 콘솔을 사용하여 Spark 애플리케이션을 단계로 제출하는 방법
  1. 새 Amazon EMR 콘솔로 이동하고 측면 탐색에서 이전 콘솔로 전환을 선택합니다. 이전 콘솔로 전환할 때 예상되는 사항에 대한 자세한 내용은 이전 콘솔 사용을 참조하세요.

  2. 클러스터 목록에서 클러스터의 이름을 선택합니다. 클러스터 상태는 대기 중이어야 합니다.

  3. 단계를 선택하고 단계 추가를 선택합니다.

  4. 다음 지침에 따라 단계를 구성합니다.

    • 단계 유형에서 Spark 애플리케이션을 선택합니다. 배포 모드, Spark-submit 옵션애플리케이션 위치에 대한 추가 필드가 표시됩니다.

    • 이름에서 기본 이름을 그대로 두거나 새 이름을 입력합니다. 클러스터에 여러 단계가 있는 경우 각 단계에 이름을 지정하면 단계를 추적하는 데 도움이 됩니다.

    • 배포 모드의 경우 기본값인 클러스터를 그대로 둡니다. 자세한 내용은 Apache Spark 설명서에서 Cluster mode overview를 참조하세요.

    • Spark-submit 옵션 필드는 비워 둡니다. spark-submit 옵션에 대한 자세한 내용은 Launching applications with spark-submit을 참조하세요.

    • 애플리케이션 위치에 Amazon S3에 있는 health_violations.py 스크립트의 위치를 입력합니다. 예를 들어 s3://DOC-EXAMPLE-BUCKET/health_violations.py와 같습니다.

    • 인수 필드에 다음 인수 및 값을 입력합니다.

      --data_source s3://DOC-EXAMPLE-BUCKET/food_establishment_data.csv --output_uri s3://DOC-EXAMPLE-BUCKET/myOutputFolder

      s3://DOC-EXAMPLE-BUCKET/food_establishment_data.csvAmazon EMR에서 입력 데이터로 애플리케이션 준비에서 준비한 입력 데이터의 S3 URI로 바꿉니다.

      DOC-EXAMPLE-BUCKET을 이 자습서에서 생성한 버킷 이름으로 바꾸고, myOutputFolder를 클러스터 출력 폴더의 이름으로 바꿉니다.

    • 실패 시 작업에서 기본 옵션인 계속을 수락하여 단계에 실패해도 클러스터가 계속 실행되도록 합니다.

  5. 추가를 선택하여 단계를 제출합니다. 단계가 콘솔에 대기 중 상태로 나타납니다.

  6. 단계 상태가 대기 중에서 실행 중, 완료됨으로 변경되는지 확인합니다. 콘솔에서 상태를 업데이트하려면 필터의 오른쪽에 있는 새로 고침 아이콘을 선택합니다. 스크립트를 실행하는 데 약 1분이 걸립니다.

상태가 완료됨으로 변경되면 단계가 성공적으로 종료된 것입니다.

CLI
AWS CLI를 사용하여 Spark 애플리케이션을 단계로 제출하는 방법
  1. Amazon EMR 클러스터 시작에서 실행한 클러스터의 ClusterId가 있는지 확인합니다. 다음 명령을 사용하여 클러스터 ID를 검색할 수도 있습니다.

    aws emr list-clusters --cluster-states WAITING
  2. add-steps 명령 및 ClusterId를 사용하여 health_violations.py를 단계로 제출합니다.

    • "My Spark Application"를 바꾸어 단계 이름을 지정할 수 있습니다. Args 배열에서 s3://DOC-EXAMPLE-BUCKET/health_violations.pyhealth_violations.py 애플리케이션 위치로 바꿉니다.

    • s3://DOC-EXAMPLE-BUCKET/food_establishment_data.csvfood_establishment_data.csv 데이터 세트의 S3 위치로 바꿉니다.

    • s3://DOC-EXAMPLE-BUCKET/MyOutputFolder를 지정된 버킷의 S3 경로와 클러스터 출력 폴더의 이름으로 바꿉니다.

    • ActionOnFailure=CONTINUE는 단계에 실패해도 클러스터가 계속 실행됨을 의미합니다.

    aws emr add-steps \ --cluster-id <myClusterId> \ --steps Type=Spark,Name="<My Spark Application>",ActionOnFailure=CONTINUE,Args=[<s3://DOC-EXAMPLE-BUCKET/health_violations.py>,--data_source,<s3://DOC-EXAMPLE-BUCKET/food_establishment_data.csv>,--output_uri,<s3://DOC-EXAMPLE-BUCKET/MyOutputFolder>]

    CLI를 사용하여 단계를 제출하는 방법에 대한 자세한 내용은 AWS CLI 명령 참조를 참조하세요.

    단계를 제출한 후에는 StepIds의 목록에서 다음과 같은 출력이 표시됩니다. 한 단계를 제출했으므로 목록에 ID가 하나만 표시됩니다. 단계 ID를 복사합니다. 단계 ID를 사용하여 단계 상태를 확인합니다.

    { "StepIds": [ "s-1XXXXXXXXXXA" ] }
  3. describe-step 명령을 사용하여 단계 상태를 쿼리합니다.

    aws emr describe-step --cluster-id <myClusterId> --step-id <s-1XXXXXXXXXXA>

    단계에 대한 정보와 함께 다음과 같은 결과가 표시됩니다.

    { "Step": { "Id": "s-1XXXXXXXXXXA", "Name": "My Spark Application", "Config": { "Jar": "command-runner.jar", "Properties": {}, "Args": [ "spark-submit", "s3://DOC-EXAMPLE-BUCKET/health_violations.py", "--data_source", "s3://DOC-EXAMPLE-BUCKET/food_establishment_data.csv", "--output_uri", "s3://DOC-EXAMPLE-BUCKET/myOutputFolder" ] }, "ActionOnFailure": "CONTINUE", "Status": { "State": "COMPLETED" } } }

    단계가 실행됨에 따라 단계의 StatePENDING에서 RUNNING, 그리고 COMPLETED로 바뀝니다. 단계를 실행하는 데 약 1분이 걸리므로 상태를 몇 번 확인해야 할 수도 있습니다.

StateCOMPLETED로 변경되면 단계가 성공적으로 수행된 것입니다.

단계 수명 주기에 대한 자세한 내용은 단계를 실행하여 데이터 처리 섹션을 참조하세요.

결과 보기

단계가 성공적으로 실행되면 Amazon S3 출력 폴더에서 출력 결과를 볼 수 있습니다.

health_violations.py의 결과를 보는 방법
  1. https://console.aws.amazon.com/s3/에서 Amazon S3 콘솔을 엽니다.

  2. 버킷 이름을 선택하고 단계를 제출할 때 지정한 출력 폴더를 선택합니다. 예를 들어 DOC-EXAMPLE-BUCKETmyOutputFolder와 같습니다.

  3. 출력 폴더에 다음 항목이 나타나는지 확인합니다.

    • _SUCCESS라고 하는 작은 크기의 객체.

    • 결과를 포함하는 part- 접두사로 시작하는 CSV 파일.

  4. 결과를 포함하는 개체를 선택하고 다운로드를 선택하여 결과를 로컬 파일 시스템에 저장합니다.

  5. 원하는 편집기에서 결과를 엽니다. 출력 파일에는 Red 위반이 가장 많은 상위 10개 식품 시설이 나열됩니다. 또한 출력 파일에는 각 시설의 총 Red 위반 건수도 표시됩니다.

    다음은 health_violations.py 결과 예제입니다.

    name, total_red_violations SUBWAY, 322 T-MOBILE PARK, 315 WHOLE FOODS MARKET, 299 PCC COMMUNITY MARKETS, 251 TACO TIME, 240 MCDONALD'S, 177 THAI GINGER, 153 SAFEWAY INC #1508, 143 TAQUERIA EL RINCONSITO, 134 HIMITSU TERIYAKI, 128

Amazon EMR 클러스터 출력에 대한 자세한 내용은 출력 위치 구성 섹션을 참조하세요.

Amazon EMR을 사용하는 경우 실행 중인 클러스터에 연결하여 로그 파일을 읽거나 클러스터를 디버깅하거나 Spark 쉘과 같은 CLI 도구를 사용할 수 있습니다. Amazon EMR을 사용하면 Secure Shell(SSH) 프로토콜을 사용하여 클러스터에 연결할 수 있습니다. 이 섹션에서는 SSH를 구성하고, 클러스터에 연결하며, Spark의 로그 파일을 보는 방법을 다룹니다. 클러스터에 연결하는 방법에 대한 자세한 내용은 Amazon EMR 클러스터 노드에 대한 인증 섹션을 참조하세요.

클러스터에 대한 SSH 연결 승인

클러스터에 연결하기 전에 클러스터 보안 그룹을 수정하여 인바운드 SSH 연결을 승인해야 합니다. Amazon EC2 보안 그룹은 클러스터에 대한 인바운드 및 아웃바운드 트래픽을 제어하는 가상 방화벽 역할을 합니다. 이 자습서에서 클러스터를 생성할 때 Amazon EMR은 사용자를 대신하여 다음 보안 그룹을 생성했습니다.

ElasticMapReduce-master

프라이머리 노드에 연결된 기본 Amazon EMR 관리형 보안 그룹. Amazon EMR 클러스터에서 프라이머리 노드는 클러스터를 관리하는 Amazon EC2 인스턴스입니다.

ElasticMapReduce-slave

코어 및 태스크 노드에 연결된 기본 보안 그룹.

New console
새 콘솔을 사용하여 기본 보안 그룹의 신뢰할 수 있는 소스에 대한 SSH 액세스를 허용하는 방법

보안 그룹을 편집하려면 클러스터가 속한 VPC의 보안 그룹을 관리할 권한이 있어야 합니다. 자세한 내용은 사용자의 권한 변경IAM 사용 설명서에서 EC2 보안 그룹을 관리할 수 있는 예제 정책을 참조하세요.

  1. AWS Management Console에 로그인한 후 https://console.aws.amazon.com/emr에서 Amazon EMR 콘솔을 엽니다.

  2. 왼쪽 탐색 창의 EMR on EC2에서 클러스터를 선택하고 업데이트할 클러스터를 선택합니다. 그러면 클러스터 세부 정보 페이지가 열립니다. 이 페이지의 속성 탭은 미리 선택해야 합니다.

  3. 속성 탭의 네트워킹에서 EC2 보안 그룹(방화벽) 옆의 화살표를 선택하여 이 섹션을 확장합니다. 프라이머리 노드에서 보안 그룹 링크를 선택합니다. 다음 단계를 완료한 경우 선택적으로 이 단계로 돌아와서 코어 및 태스크 노드를 선택하고 다음 단계를 반복하여 SSH 클라이언트가 코어 및 태스크 노드에 액세스하도록 허용할 수 있습니다.

  4. EC2 콘솔이 열립니다. 인바운드 규칙 탭을 선택한 후 인바운드 규칙 편집을 선택합니다.

  5. 다음 설정으로 퍼블릭 액세스를 허용하는 인바운드 규칙이 있는지 확인합니다. 존재하는 경우 삭제를 선택하여 제거합니다.

    • 유형

      SSH

    • 포트

      22

    • 소스

      사용자 지정 0.0.0.0/0

    주의

    2020년 12월 이전에 ElasticMapReduce-master 보안 그룹은 포트 22에서 모든 소스의 인바운드 트래픽을 허용하도록 사전 구성된 규칙을 적용했습니다. 이 규칙은 프라이머리 노드에 대한 초기 SSH 연결을 단순화하기 위해 생성되었습니다. 이 인바운드 규칙을 제거하고 신뢰할 수 있는 소스로 이동하는 트래픽을 제한하는 것이 좋습니다.

  6. 규칙 목록의 하단으로 스크롤하고 규칙 추가를 선택합니다.

  7. 유형에서 SSH를 선택합니다. SSH를 선택하면 프로토콜에는 TCP가 자동으로 입력되고 포트 범위에는 22가 입력됩니다.

  8. 소스의 경우 내 IP를 선택하면 IP 주소가 소스 주소로 자동 추가됩니다. 신뢰할 수 있는 사용자 지정 클라이언트 IP 주소 범위를 추가하거나 다른 클라이언트에 대한 추가 규칙을 생성할 수도 있습니다. 많은 네트워크 환경에서 IP 주소를 동적으로 할당하므로 향후에 신뢰할 수 있는 클라이언트의 IP 주소를 업데이트해야 할 수 있습니다.

  9. Save를 선택합니다.

  10. 선택적으로 목록에서 코어 및 태스크 노드를 선택하고 위의 단계를 반복하여 코어 및 태스크 노드에 대한 SSH 클라이언트 액세스를 허용합니다.

Old console
이전 콘솔을 사용하여 신뢰할 수 있는 소스에 기본 보안 그룹에 대한 SSH 액세스 권한을 부여하는 방법

보안 그룹을 편집하려면 클러스터가 속한 VPC의 보안 그룹을 관리할 권한이 있어야 합니다. 자세한 내용은 사용자의 권한 변경IAM 사용 설명서에서 EC2 보안 그룹을 관리할 수 있는 예제 정책을 참조하세요.

  1. 새 Amazon EMR 콘솔로 이동하고 측면 탐색에서 이전 콘솔로 전환을 선택합니다. 이전 콘솔로 전환할 때 예상되는 사항에 대한 자세한 내용은 이전 콘솔 사용을 참조하세요.

  2. 클러스터를 선택하십시오. 수정할 클러스터의 이름을 선택합니다.

  3. 보안 및 액세스에서 마스터에 대한 보안 그룹 링크를 선택합니다.

  4. 목록에서 ElasticMapReduce-master를 선택합니다.

  5. 인바운드 규칙 탭을 선택한 후 인바운드 규칙 편집을 선택합니다.

  6. 다음 설정으로 퍼블릭 액세스를 허용하는 인바운드 규칙이 있는지 확인합니다. 존재하는 경우 삭제를 선택하여 제거합니다.

    • 유형

      SSH

    • 포트

      22

    • 소스

      사용자 지정 0.0.0.0/0

    주의

    2020년 12월 이전에 ElasticMapReduce-master 보안 그룹은 포트 22에서 모든 소스의 인바운드 트래픽을 허용하도록 사전 구성된 규칙을 적용했습니다. 이 규칙은 프라이머리 노드에 대한 초기 SSH 연결을 단순화하기 위해 생성되었습니다. 이 인바운드 규칙을 제거하고 신뢰할 수 있는 소스로 이동하는 트래픽을 제한하는 것이 좋습니다.

  7. 규칙 목록의 하단으로 스크롤하고 규칙 추가를 선택합니다.

  8. 유형에서 SSH를 선택합니다.

    SSH를 선택하면 프로토콜에는 TCP가 자동으로 입력되고 포트 범위에는 22가 입력됩니다.

  9. 소스의 경우 내 IP를 선택하면 IP 주소가 소스 주소로 자동 추가됩니다. 신뢰할 수 있는 사용자 지정 클라이언트 IP 주소 범위를 추가하거나 다른 클라이언트에 대한 추가 규칙을 생성할 수도 있습니다. 많은 네트워크 환경에서 IP 주소를 동적으로 할당하므로 향후에 신뢰할 수 있는 클라이언트의 IP 주소를 업데이트해야 할 수 있습니다.

  10. Save를 선택합니다.

  11. 선택적으로 목록에서 ElasticMapReduce-slave를 선택하고 위의 단계를 반복하여 코어 및 태스크 노드에 대한 SSH 클라이언트 액세스를 허용합니다.

AWS CLI를 사용하여 클러스터에 연결

운영 체제와 상관없이 AWS CLI를 사용하여 클러스터에 대한 SSH 연결을 생성할 수 있습니다.

AWS CLI를 사용하여 클러스터에 연결하고 로그 파일을 보는 방법
  1. 클러스터에 대한 SSH 연결을 열려면 다음 명령을 사용합니다. <mykeypair.key>를 키 페어 파일의 전체 경로 및 파일 이름으로 바꿉니다. 예: C:\Users\<username>\.ssh\mykeypair.pem.

    aws emr ssh --cluster-id <j-2AL4XXXXXX5T9> --key-pair-file <~/mykeypair.key>
  2. /mnt/var/log/spark로 이동하여 클러스터의 프라이머리 노드에서 Spark 로그에 액세스합니다. 그런 다음 해당 위치에 있는 파일을 봅니다. 프라이머리 노드의 추가 로그 파일 목록은 프라이머리 노드에서 로그 파일 보기 섹션을 참조하세요.

    cd /mnt/var/log/spark ls

3단계: Amazon EMR 리소스 정리

클러스터 종료

이제 클러스터에 작업을 제출하고 PySpark 애플리케이션의 결과를 확인했으므로 클러스터를 종료할 수 있습니다. 클러스터를 종료하면 클러스터와 관련된 모든 Amazon EMR 요금 청구 및 Amazon EC2 인스턴스가 중지됩니다.

클러스터를 종료하면 Amazon EMR은 클러스터에 대한 메타데이터를 2개월 동안 무료로 보관합니다. 아카이브된 메타데이터는 새 작업을 위해 클러스터를 복제하거나 참조용으로 클러스터 구성을 다시 검토하는 데 도움이 됩니다. 클러스터가 S3에 쓰는 데이터 또는 클러스터의 HDFS에 저장된 데이터는 메타데이터에 포함되지 않습니다.

참고

Amazon EMR 콘솔에서는 클러스터를 종료한 후 목록 보기에서 클러스터를 삭제할 수 없습니다. Amazon EMR이 메타데이터를 지우면 종료된 클러스터가 콘솔에서 사라집니다.

New console
새 콘솔을 사용하여 클러스터를 종료하는 방법
  1. AWS Management Console에 로그인한 후 https://console.aws.amazon.com/emr에서 Amazon EMR 콘솔을 엽니다.

  2. 먼저 클러스터를 선택하고 종료할 클러스터를 선택합니다.

  3. 작업 드롭다운 메뉴에서 클러스터 종료를 선택합니다.

  4. 대화 상자에서 종료를 선택합니다. 클러스터 구성에 따라 종료하는 데 5~10분이 소요될 수 있습니다. Amazon EMR 클러스터 생성에 대한 자세한 내용은 클러스터 종료 섹션을 참조하세요.

Old console
이전 콘솔을 사용하여 클러스터를 종료하는 방법
  1. 새 Amazon EMR 콘솔로 이동하고 측면 탐색에서 이전 콘솔로 전환을 선택합니다. 이전 콘솔로 전환할 때 예상되는 사항에 대한 자세한 내용은 이전 콘솔 사용을 참조하세요.

  2. 클러스터를 선택하고 종료할 클러스터를 선택합니다. 예를 들어 My First EMR Cluster와 같습니다.

  3. 종료를 선택하여 클러스터 종료 프롬프트를 엽니다.

  4. 열린 프롬프트에서 종료를 선택합니다. 클러스터 구성에 따라 종료하는 데 5~10분이 소요될 수 있습니다. Amazon EMR 클러스터 종료에 대한 자세한 내용은 클러스터 종료 섹션을 참조하세요.

    참고

    자습서를 정확히 따라왔다면 종료 방지 기능이 꺼져 있어야 합니다. 클러스터 종료 방지 기능은 실수로 인한 종료를 방지합니다. 종료 방지 기능이 켜져 있으면 클러스터를 종료하기 전에 설정을 변경하라는 메시지가 나타납니다. 변경끄기를 차례로 선택합니다.

CLI
AWS CLI를 사용하여 클러스터를 종료하는 방법
  1. 다음 명령을 사용하여 클러스터 종료 프로세스를 시작합니다. <myClusterId>를 샘플 클러스터 ID로 바꿉니다. 명령은 출력을 반환하지 않습니다.

    aws emr terminate-clusters --cluster-ids <myClusterId>
  2. 클러스터 종료 프로세스가 진행 중인지 확인하려면 다음 명령을 사용하여 클러스터 상태를 확인합니다.

    aws emr describe-cluster --cluster-id <myClusterId>

    다음은 JSON 형식의 출력 예제입니다. 클러스터 StatusTERMINATING에서 TERMINATED로 변경됩니다. 클러스터 구성에 따라 종료하는 데 5분~10분이 소요될 수 있습니다. Amazon EMR 클러스터 종료에 대한 자세한 내용은 클러스터 종료 섹션을 참조하세요.

    { "Cluster": { "Id": "j-xxxxxxxxxxxxx", "Name": "My Cluster Name", "Status": { "State": "TERMINATED", "StateChangeReason": { "Code": "USER_REQUEST", "Message": "Terminated by user request" } } } }

S3 리소스 삭제

추가 비용을 피하려면 Amazon S3 버킷을 삭제해야 합니다. 버킷을 삭제하면 이 자습서의 모든 Amazon S3 리소스가 제거됩니다. 버킷에는 다음이 포함되어야 합니다.

  • PySpark 스크립트

  • 입력 데이터 세트

  • 출력 결과 폴더

  • 로그 파일 폴더

PySpark 스크립트 또는 출력을 다른 위치에 저장한 경우 저장된 파일을 삭제하려면 추가 단계를 수행해야 할 수 있습니다.

참고

버킷을 삭제하기 전에 클러스터를 종료해야 합니다. 그렇지 않으면 버킷을 비울 수 없습니다.

버킷을 삭제하려면 Amazon Simple Storage Service 사용 설명서에서 S3 버킷을 삭제하려면 어떻게 해야 하나요?의 지침을 따릅니다.

다음 단계

이제 첫 번째 Amazon EMR 클러스터를 처음부터 끝까지 실행했습니다. 빅 데이터 애플리케이션 준비 및 제출, 결과 보기, 클러스터 종료와 같은 필수 EMR 작업도 완료했습니다.

Amazon EMR 워크플로를 사용자 지정하는 방법에 대해 자세히 알아보려면 다음 주제를 참조하세요.

Amazon EMR용 빅 데이터 애플리케이션 살펴보기

Amazon EMR 릴리스 안내서에서 클러스터에 설치할 수 있는 빅 데이터 애플리케이션을 검색하고 비교해보세요. 릴리스 안내서에는 각 EMR 릴리스 버전이 자세히 설명되어 있으며 Amazon EMR에서 Spark 및 Hadoop과 같은 프레임워크를 사용하기 위한 팁도 포함되어 있습니다.

클러스터 하드웨어, 네트워킹 및 보안 계획

이 자습서에서는 고급 옵션을 구성하지 않고 간단한 EMR 클러스터를 생성했습니다. 고급 옵션을 사용하면 Amazon EC2 인스턴스 유형, 클러스터 네트워킹 및 클러스터 보안을 지정할 수 있습니다. 요구 사항을 충족하는 클러스터를 계획하고 시작하는 방법에 대한 자세한 내용은 클러스터 계획 및 구성Amazon EMR의 보안 섹션을 참조하세요.

클러스터 관리

클러스터 관리에서 클러스터를 실행하는 작업에 대해 자세히 알아봅니다. 클러스터를 관리하기 위해 클러스터에 연결하고, 단계를 디버깅하며, 클러스터 활동 및 상태를 추적할 수 있습니다. 또한 EMR Managed Scaling을 통해 워크로드 수요에 따라 클러스터 리소스를 조정할 수 있습니다.

다른 인터페이스 사용

Amazon EMR 콘솔 외에도, AWS Command Line Interface, 웹 서비스 API 또는 지원되는 여러 AWS SDK 중 하나를 사용하여 Amazon EMR을 관리할 수 있습니다. 자세한 내용은 관리 인터페이스 섹션을 참조하세요.

또한 다양한 방법으로 Amazon EMR 클러스터에 설치된 애플리케이션과 상호 작용할 수 있습니다. Apache Hadoop과 같은 일부 애플리케이션은 사용자가 볼 수 있는 웹 인터페이스를 게시합니다. 자세한 내용은 Amazon EMR 클러스터에 호스팅된 웹 인터페이스 보기 섹션을 참조하세요.

EMR 기술 블로그 찾아보기

새로운 Amazon EMR 기능에 대한 샘플 안내와 심층적인 기술 논의를 보려면 AWS 빅 데이터 블로그를 참조하세요.