

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

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

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

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


| 파라미터 | 설명 | 필수 | 
| --- | --- | --- | 
| -입력 |  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]\$1[작업 디렉터리에 생성할 symlink 이름]   | 아니요 | 
| -cacheArchive |  작업 디렉터리에 추출할 JAR 파일 유형: 문자열 기본값: None 제약 조건: [URI]\$1[작업 디렉터리에 생성할 symlink 디렉터리 이름]   | 아니요 | 
| -combiner |  결과를 결합 유형: 문자열 기본값: None 제약 조건: 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)
```

# 스트리밍 단계 제출
<a name="CLI_CreateStreaming"></a>

이 섹션에서는 클러스터에 스트리밍 단계를 제출하는 기본 사항을 설명합니다. 스트리밍 애플리케이션은 표준 입력에서 입력을 읽은 다음 각 입력에 대해 스크립트 또는 실행 파일(매퍼라고 함)을 실행합니다. 각 입력의 결과는 일반적으로 하둡 분산 파일 시스템(HDFS) 파티션에 로컬로 저장됩니다. 모든 입력이 mapper에 의해 처리된 후 두 번째 스크립트 또는 실행 파일(reducer라고 함)이 mapper 결과를 처리합니다. reducer의 결과는 표준 출력으로 전송됩니다. 한 단계의 출력이 다른 단계의 입력이 되는 일련의 스트리밍 단계를 함께 연결할 수 있습니다.

mapper와 reducer는 각각 파일로 참조되거나 사용자가 Java 클래스를 제공할 수 있습니다. Ruby, Perl, Python, PHP 또는 Bash를 비롯한 지원되는 언어로 mapper 및 reducer를 구현할 수 있습니다.

## 콘솔을 사용하여 스트리밍 단계 제출
<a name="emr-dev-create-stream-console"></a>

이 예제는 Amazon EMR 콘솔을 사용하여 스트리밍 단계를 실행 중인 클러스터에 제출하는 방법을 설명합니다.

**스트리밍 단계를 제출하는 방법**

1. [https://console.aws.amazon.com/emr](https://console.aws.amazon.com/emr/) Amazon EMR 콘솔을 엽니다.

1. **클러스터 목록**에서 클러스터의 이름을 선택합니다.

1. **단계** 섹션으로 스크롤하여 섹션을 확장한 후 **단계 추가**를 선택합니다.

1. **단계 추가** 대화 상자에서 다음을 수행합니다.
   + **Step type(단계 유형)**에서 **Streaming program(스트리밍 프로그램)**을 선택합니다.
   + **Name(이름)**에서 기본 이름(Streaming program)을 수락하거나 새 이름을 입력합니다.
   + **Mapper(매퍼)**에서 하둡의 매퍼 클래스 위치 또는 매퍼 실행 파일(예: Python 프로그램)이 있는 S3 버킷을 입력하거나 찾습니다. 경로 값은 *BucketName*/*path*/*MapperExecutable* 형식이어야 합니다.
   + **Reducer**에서 하둡의 reducer 클래스 위치 또는 reducer 실행 파일(예: Python 프로그램)이 있는 S3 버킷을 입력하거나 찾습니다. 경로 값은 *BucketName*/*path*/*MapperExecutable* 형식이어야 합니다. Amazon EMR은 특수 *aggregate* 키워드를 지원합니다. 자세한 내용은 Hadoop에서 제공하는 Aggregate 라이브러리를 참조하세요.
   + **Input S3 location(입력 S3 위치)**에서 입력 데이터의 위치를 입력하거나 찾아봅니다.
   + **출력 S3 위치**에서 Amazon S3 출력 버킷의 이름을 입력하거나 찾아봅니다.
   + **인수**에서 필드를 비워 둡니다.
   + **실패 시 작업**에서 기본 옵션(**계속**)을 그대로 사용합니다.

1. **추가**를 선택합니다. 단계가 콘솔에 [Pending] 상태로 나타납니다.

1. 단계의 상태는 단계가 실행됨에 따라 대기 중에서 실행 중을 거쳐 완료됨으로 바뀝니다. 상태를 업데이트하려면 Actions(작업) 열 위의 **Refresh(새로 고침)** 아이콘을 선택합니다.

## AWS CLI
<a name="emr-dev-create-stream-cli"></a>

이 예제에서는를 사용하여 클러스터 AWS CLI 를 생성하고 스트리밍 단계를 제출하는 방법을 보여줍니다.

**를 사용하여 클러스터를 생성하고 스트리밍 단계를 제출하려면 AWS CLI**
+ 를 사용하여 클러스터를 생성하고 스트리밍 단계를 제출하려면 다음 명령을 AWS CLI입력하고 *myKey*를 EC2 키 페어의 이름으로 바꿉니다. `--files`에 대한 인수는 스크립트 위치에 대한 Amazon S3 경로여야 하고, `-mapper` 및 `-reducer`에 대한 인수는 해당 스크립트 파일의 이름이어야 합니다.

  ```
  aws emr create-cluster --name "Test cluster" --release-label emr-7.12.0 --applications Name=Hue Name=Hive Name=Pig --use-default-roles \
  --ec2-attributes KeyName=myKey --instance-type m5.xlarge --instance-count 3 \
  --steps Type=STREAMING,Name="Streaming Program",ActionOnFailure=CONTINUE,Args=[--files,pathtoscripts,-mapper,mapperscript,-reducer,reducerscript,aggregate,-input,pathtoinputdata,-output,pathtooutputbucket]
  ```
**참고**  
가독성을 위해 Linux 줄 연속 문자(\$1)가 포함됩니다. Linux 명령에 사용하거나 제외할 수 있습니다. Windows에서는 제외시키거나 캐럿(^)으로 바꿉니다.

  `--instance-groups` 파라미터를 사용하지 않고 인스턴스 수를 지정하면 단일 마스터 노드가 시작되고 나머지 인스턴스는 코어 노드로 시작됩니다. 모든 노드에는 이 명령에 지정된 인스턴스 유형이 사용됩니다.
**참고**  
Amazon EMR 서비스 역할과 EC2 인스턴스 프로파일을 아직 생성하지 않았다면 `emr create-default-roles` 하위 명령을 입력하기 전에 aws `create-cluster`를 입력하여 생성합니다.

  에서 Amazon EMR 명령을 사용하는 방법에 대한 자세한 내용은 섹션을 AWS CLI참조하세요[https://docs.aws.amazon.com/cli/latest/reference/emr](https://docs.aws.amazon.com/cli/latest/reference/emr).