스트리밍을 사용하여 데이터 처리 - Amazon EMR

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

스트리밍을 사용하여 데이터 처리

하둡 스트리밍은 하둡과 함께 제공되는 유틸리티로, 이를 통해 Java 이외의 언어로 실행 파일을 개발할 수 있습니다. MapReduce 스트리밍은 JAR 파일 형식으로 구현되므로 Amazon EMR API 또는 명령줄에서 표준 JAR 파일과 같이 스트리밍을 실행할 수 있습니다.

이 섹션에서는 Amazon EMR에서 스트리밍을 사용하는 방법을 설명합니다.

참고

Apache Hadoop 스트리밍은 독립적인 도구입니다. 따라서 모든 기능 및 파라미터는 여기에 설명되어 있지 않습니다. 하둡 스트리밍에 대한 자세한 내용은 http://hadoop.apache.org/docs/stable/hadoop-streaming/ .html을 참조하십시오. HadoopStreaming

Hadoop 스트리밍 유틸리티 사용

이 섹션에서는 Hadoop의 스트리밍 유틸리티를 사용하는 방법을 설명합니다.

1

원하는 프로그래밍 언어로 mapper 및 reducer 실행 파일을 작성하십시오.

Hadoop 설명서의 지침에 따라 스트리밍 실행 파일을 작성하십시오. 프로그램은 표준 출력을 통해 표준 입력 및 출력 데이터에서 입력을 읽어야 합니다. 기본적으로 각 입력/출력 행은 레코드를 나타내며 각 행의 첫 번째 탭은 키와 값 사이의 구분 기호로 사용됩니다.

2

실행 파일을 로컬에서 테스트하여 Amazon S3에 업로드합니다.

3

Amazon EMR 명령줄 인터페이스 또는 Amazon EMR 콘솔을 사용하여 애플리케이션을 실행합니다.

각 mapper 스크립트는 클러스터에서 별도의 프로세스로 실행됩니다. 각 reducer 실행 파일은 mapper 실행 파일의 출력을 작업 흐름에 의해 데이터 출력으로 변환합니다.

대부분의 스트리밍 애플리케이션에는 input, output, mapperreducer 파라미터가 필요합니다. 다음 표에서는 이 파라미터와 다른 선택적 파라미터를 설명합니다.

파라미터 설명 필수
-입력

Amazon S3에서 입력 데이터의 위치.

타입: 문자열

기본값: None

제약 조건: URI 프로토콜을 지정하지 않으면 클러스터의 기본 파일 시스템을 사용합니다.

-출력

Amazon EMR이 처리된 데이터를 업로드하는 Amazon S3의 위치.

타입: 문자열

기본값: None

제약 조건: URI

기본값: 위치를 지정하지 않으면 Amazon EMR이 input에서 지정하는 위치로 데이터를 업로드합니다.

-mapper

mapper 실행 파일의 이름.

타입: 문자열

기본값: None

-reducer

reducer 실행 파일의 이름.

타입: 문자열

기본값: None

-cacheFile

주로 성능 향상을 위해 Hadoop이 로컬 작업 디렉터리에 복사할 파일이 들어있는 Amazon S3의 위치.

타입: 문자열

기본값: None

제약 조건: [URI]#[작업 디렉터리에 생성할 symlink 이름]

아니요
-cacheArchive

작업 디렉터리에 추출할 JAR 파일

타입: 문자열

기본값: None

제약 조건: [URI]#[작업 디렉터리에 생성할 symlink 디렉터리 이름]

아니요
-combiner

결과를 결합

타입: 문자열

기본값: None

제약 조건: Java 클래스 이름

아니요

다음 코드 샘플은 Python으로 작성된 mapper 실행 파일입니다. 이 스크립트는 샘플 애플리케이션의 일부입니다. WordCount

#!/usr/bin/python import sys def main(argv): line = sys.stdin.readline() try: while line: line = line.rstrip() words = line.split() for word in words: print "LongValueSum:" + word + "\t" + "1" line = sys.stdin.readline() except "end of file": return None if __name__ == "__main__": main(sys.argv)