

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

# 스트리밍을 사용하여 데이터 처리
<a name="UseCase_Streaming"></a>

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

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

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

## Hadoop 스트리밍 유틸리티 사용
<a name="HadoopStreamCommands"></a>

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


**Hadoop 프로세스**  

|  |  | 
| --- |--- |
| 1 | 원하는 프로그래밍 언어로 mapper 및 reducer 실행 파일을 작성하세요.<br />Hadoop 설명서의 지침에 따라 스트리밍 실행 파일을 작성하세요. 프로그램은 표준 출력을 통해 표준 입력 및 출력 데이터에서 입력을 읽어야 합니다. 기본적으로 각 입력/출력 행은 레코드를 나타내며 각 행의 첫 번째 탭은 키와 값 사이의 구분 기호로 사용됩니다. | 
| 2 | 실행 파일을 로컬에서 테스트하여 Amazon S3에 업로드합니다. | 
| 3 | Amazon EMR 명령줄 인터페이스 또는 Amazon EMR 콘솔을 사용하여 애플리케이션을 실행합니다. | 

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

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


| 파라미터 | 설명 | 필수 | 
| --- | --- | --- | 
| -입력 | Amazon S3에서 입력 데이터의 위치.<br />유형: 문자열<br />기본값: None<br />제약 조건: URI 프로토콜을 지정하지 않으면 클러스터의 기본 파일 시스템을 사용합니다. | 예 | 
| -출력 | Amazon EMR이 처리된 데이터를 업로드하는 Amazon S3의 위치.<br />유형: 문자열<br />기본값: None<br />제약 조건: URI<br />기본값: 위치를 지정하지 않으면 Amazon EMR이 `input`에서 지정하는 위치로 데이터를 업로드합니다. | 예 | 
| -mapper | mapper 실행 파일의 이름.<br />유형: 문자열<br />기본값: None | 예 | 
| -reducer | reducer 실행 파일의 이름.<br />유형: 문자열<br />기본값: None | 예 | 
| -cacheFile | 주로 성능 향상을 위해 Hadoop이 로컬 작업 디렉터리에 복사할 파일이 들어있는 Amazon S3의 위치.<br />유형: 문자열<br />기본값: None<br />제약 조건: [URI]\#[작업 디렉터리에 생성할 symlink 이름]  | 아니요 | 
| -cacheArchive | 작업 디렉터리에 추출할 JAR 파일<br />유형: 문자열<br />기본값: None<br />제약 조건: [URI]\#[작업 디렉터리에 생성할 symlink 디렉터리 이름]  | 아니요 | 
| -combiner | 결과를 결합<br />유형: 문자열<br />기본값: None<br />제약 조건: Java 클래스 이름 | 아니요 | 

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

```
 1. #!/usr/bin/python
 2. import sys
 3. 
 4. def main(argv):
 5.   line = sys.stdin.readline()
 6.   try:
 7.     while line:
 8.       line = line.rstrip()
 9.       words = line.split()
10.       for word in words:
11.         print "LongValueSum:" + word + "\t" + "1"
12.       line = sys.stdin.readline()
13.   except "end of file":
14.     return None
15. if __name__ == "__main__":
16.   main(sys.argv)
```