Amazon EMR
관리 안내서

4단계: Hive 스크립트를 단계로 실행하여 데이터 처리

클러스터를 실행하여 Hive 스크립트를 제출할 수 있습니다. 이 자습서에서는 Amazon EMR 콘솔을 사용하여 Hive 스크립트를 단계로 제출합니다. Amazon EMR에서 단계는 하나 이상의 작업이 포함된 작업 단위입니다. 2단계: 샘플 Amazon EMR 클러스터 시작에서 배운 것처럼 장기 실행 클러스터에 단계를 제출할 수 있습니다. 이 단계에서는 이 작업을 수행합니다. 클러스터를 생성할 때 단계를 지정하거나 마스터 노드에 연결하고 로컬 파일 시스템에 스크립트를 생성한 다음 명령줄을 사용하여 실행할 수도 있습니다(예: hive -f Hive_CloudFront.q).

데이터 및 스크립트 이해

이 자습서에서 사용하는 샘플 데이터 및 스크립트는 사용자가 액세스할 수 있는 Amazon S3 위치에서 이미 사용할 수 있습니다.

샘플 데이터는 일련의 Amazon CloudFront 액세스 로그 파일입니다. CloudFront 및 로그 파일 형식에 대한 자세한 내용은 Amazon CloudFront 개발자 안내서 단원을 참조하십시오. 데이터는 Amazon S3의 s3://region.elasticmapreduce.samples/cloudfront/data에 저장되며, 여기서 region은 사용자의 리전(예: us-west-2)입니다. 단계를 제출할 때 위치를 입력하면 스크립트에서 추가하기 때문에 cloudfront/data 부분을 생략합니다.

CloudFront 로그 파일의 각 항목은 단일 사용자 요청에 대한 세부 정보를 다음과 같은 형식으로 제공합니다.

2014-07-05 20:00:00 LHR3 4260 10.0.0.15 GET eabcd12345678.cloudfront.net /test-image-1.jpeg 200 - Mozilla/5.0%20(MacOS;%20U;%20Windows%20NT%205.1;%20en-US;%20rv:1.9.0.9)%20Gecko/2009040821%20IE/3.0.9

샘플 스크립트는 지정된 시간 범위 동안 운영 체제당 총 요청 수를 계산합니다. 스크립트는 데이터 웨어하우징 및 분석을 위한 SQL 유형의 스크립팅 언어인 HiveQL을 사용합니다. 스크립트는 Amazon S3의 s3://region.elasticmapreduce.samples/cloudfront/code/Hive_CloudFront.q에 저장되며, 여기서 region은 사용자의 리전입니다.

샘플 Hive 스크립트는 다음을 수행합니다.

  • cloudfront_logs라는 Hive 테이블 스키마를 생성합니다. Hive 테이블에 대한 자세한 내용은 Hive wiki의 Hive 자습서를 참조하십시오.

  • 기본 제공된 정규 표현식 serializer/deserializer(RegEx SerDe)를 사용하여 입력 데이터를 구문 분석하고 테이블 스키마를 적용합니다. 자세한 내용은 지원되는 Hive wiki의 SerDe를 참조하십시오.

  • cloudfront_logs 테이블에 대해 HiveQL 쿼리를 실행하고 쿼리 결과를 지정한 Amazon S3 출력 위치에 씁니다.

Hive_CloudFront.q 스크립트의 콘텐츠는 다음과 같습니다. ${INPUT}${OUTPUT} 변수는 스크립트를 단계로 제출할 때 지정하는 Amazon S3 위치로 대체됩니다. 이 스크립트처럼 Amazon S3의 데이터를 참조할 때, Amazon EMR은 EMRFS(EMR 파일 시스템)를 사용하여 입력 데이터를 읽고 출력 데이터를 씁니다.

-- Summary: This sample shows you how to analyze CloudFront logs stored in S3 using Hive -- Create table using sample data in S3. Note: you can replace this S3 path with your own. CREATE EXTERNAL TABLE IF NOT EXISTS cloudfront_logs ( DateObject Date, Time STRING, Location STRING, Bytes INT, RequestIP STRING, Method STRING, Host STRING, Uri STRING, Status INT, Referrer STRING, OS String, Browser String, BrowserVersion String ) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe' WITH SERDEPROPERTIES ( "input.regex" = "^(?!#)([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+[^\(]+[\(]([^\;]+).*\%20([^\/]+)[\/](.*)$" ) LOCATION '${INPUT}/cloudfront/data'; -- Total requests per operating system for a given time frame INSERT OVERWRITE DIRECTORY '${OUTPUT}/os_requests/' SELECT os, COUNT(*) count FROM cloudfront_logs WHERE dateobject BETWEEN '2014-07-05' AND '2014-08-05' GROUP BY os;

Hive 스크립트를 단계로 제출

단계 추가 옵션을 사용하여 콘솔에서 Hive 스크립트를 클러스터에 제출합니다. Hive 스크립트 및 샘플 데이터는 Amazon S3에 업로드되었으며 이전에 Amazon S3 버킷 생성에서 생성한 폴더로 출력 위치를 지정합니다.

단계별로 제출하여 Hive 스크립트를 실행하려면

  1. https://console.aws.amazon.com/elasticmapreduce/에서 Amazon EMR 콘솔을 엽니다.

  2. 클러스터 목록에서 클러스터의 이름을 선택합니다. 클러스터가 대기 중 상태인지 확인합니다.

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

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

    • 단계 유형에서 Hive 프로그램을 선택합니다.

    • 이름에서 기본 이름을 사용하거나 새 이름을 입력합니다. 클러스터에 여러 단계가 있는 경우 이름을 사용하여 해당 단계를 추적할 수 있습니다.

    • 스크립트 S3 위치s3://region.elasticmapreduce.samples/cloudfront/code/Hive_CloudFront.q를 입력합니다. region을 해당 리전 식별자로 대체합니다. 예를 들어 Oregon 리전에서 작업 중인 경우 s3://us-west-2.elasticmapreduce.samples/cloudfront/code/Hive_CloudFront.q입니다. 리전 및 해당 리전 식별자 목록은 AWS General ReferenceAmazon EMR의 AWS 리전 및 엔드포인트를 참조하십시오.

    • 입력 S3 위치s3://region.elasticmapreduce.samples를 입력합니다.

      region을 해당 리전 식별자로 대체합니다.

    • 출력 S3 위치에서 Amazon S3 버킷 생성 단원에서 생성한 output 버킷을 입력하거나 검색합니다.

    • 실패 시 작업에서 기본 옵션(계속)을 그대로 사용합니다. 그러면 단계가 실패해도 클러스터가 계속 실행되고 후속 단계가 처리됩니다. 취소 및 대기 옵션은 실패한 단계를 취소하고 후속 단계를 실행하지 않고 클러스터를 계속 실행하도록 지정합니다. 클러스터 종료 옵션은 단계가 실패할 경우 클러스터를 종료하도록 지정합니다.

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

  6. 단계의 상태는 단계가 실행됨에 따라 대기 중에서 실행 중을 거쳐 완료됨으로 바뀝니다. 상태를 업데이트하려면 필터의 오른쪽에 있는 새로 고침 아이콘을 선택합니다. 스크립트 실행에는 약 1분이 걸립니다.

결과 보기

단계가 완료되면 Hive 쿼리 출력이 단계를 제출할 때 지정한 Amazon S3 출력 폴더에 텍스트 파일로 저장됩니다.

Hive 스크립트의 출력을 보려면

  1. https://console.aws.amazon.com/s3/에서 Amazon S3 콘솔을 엽니다.

  2. 버킷 이름을 선택한 다음 앞에서 설정한 폴더를 선택합니다. 예를 들어 mybucketMyHiveQueryResults를 차례로 선택합니다.

  3. 이 쿼리는 출력 폴더의 os_requests 폴더에 결과를 씁니다. 해당 폴더를 선택합니다. 폴더에 000000_0라는 단일 파일이 있어야 합니다. 이 파일은 Hive 쿼리 결과가 포함된 텍스트 파일입니다.

  4. 파일을 선택한 다음 다운로드를 선택하여 로컬에 저장합니다.

  5. 원하는 텍스트 편집기를 사용하여 파일을 엽니다. 출력 파일은 운영 체제별로 정렬된 액세스 요청 수를 표시합니다. 다음 예제에서는 워드패드에 출력을 보여 줍니다.

    워드패드의 샘플 Hive 쿼리 결과