

# 매퍼 수 조정
<a name="EMRforDynamoDB.PerformanceTuning.Mappers"></a>

Hive는 Hadoop 작업을 시작하면 작업은 하나 이상의 매퍼 작업에 의해 처리됩니다. DynamoDB 테이블의 처리량이 충분하다는 전제하에, 클러스터 내 매퍼 수를 수정하여 성능을 개선할 수도 있습니다.

**참고**  
Hadoop 작업에 사용되는 매퍼 작업 수는 Hadoop이 데이터를 논리 블록으로 분할하는 *입력 분할*에 의해 영향을 받습니다. Hadoop이 충분한 입력 분할을 수행하지 않을 경우 쓰기 작업이 DynamoDB 테이블에서 사용 가능한 쓰기 처리량을 모두 소비하지 못할 수 있습니다.

## 매퍼 수 증가
<a name="EMRforDynamoDB.PerformanceTuning.Mappers.Increasing"></a>

Amazon EMR의 각 매퍼는 최대 읽기 속도가 초당 1MiB입니다. 클러스터 내 매퍼 수는 클러스터 내 노드 크기에 따라 결정됩니다. (노드 크기 및 노드당 매퍼 수에 대한 정보는 *Amazon EMR 개발자 안내서*의 [태스크 구성](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-hadoop-task-config.html) 단원을 참조하세요.)

DynamoDB 테이블의 읽기 처리량이 충분할 경우 다음 중 한 방법으로 매퍼 수를 늘릴 수 있습니다.
+ 클러스터 내 노드의 크기를 증가시킵니다. 예를 들어 클러스터가 *m1.large* 노드(노드당 매퍼 3개)를 사용하는 경우 *m1.xlarge* 노드(노드당 매퍼 8개)로 업그레이드할 수 있습니다.
+ 클러스터 내 노드 수를 증가시킵니다. 예를 들어 클러스터에 *m1.xlarge* 노드가 3개일 경우 총 24개 매퍼를 사용할 수 있습니다. 동일한 노드 유형에서 클러스터 크기를 두 배로 늘리면 매퍼는 48개로 증가합니다.

AWS Management Console을 사용하여 클러스터 내 노드 크기 또는 수를 관리할 수 있습니다. (이 설정이 적용되려면 클러스터를 재시작해야 합니다.)

매퍼 수를 늘리는 또 한 가지 방법은 `mapred.tasktracker.map.tasks.maximum` Hadoop 구성 파라미터를 수정하는 것입니다. (이것은 Hive 파라미터가 아니라 Hadoop 파라미터입니다. 명령 프롬프트에서 대화형으로 이 파라미터를 수정할 수 없습니다.). `mapred.tasktracker.map.tasks.maximum` 값을 높일 경우 노드 크기 또는 수를 증가시키지 않고 매퍼 수를 늘릴 수 있습니다. 하지만 이 값을 너무 높게 설정할 경우 클러스터 노드 메모리가 부족해질 수 있습니다.

`mapred.tasktracker.map.tasks.maximum` 값은 처음 Amazon EMR 클러스터를 시작할 때 부트스트랩 작업으로 설정합니다. 자세한 내용은 *Amazon EMR 관리 가이드*드 [(선택 사항) 부트스트랩 작업을 생성하여 추가 소프트웨어 설치](https://docs.aws.amazon.com/ElasticMapReduce/latest/ManagementGuide/emr-plan-bootstrap.html) 단원을 참조하세요.

## 매퍼 수 감소
<a name="EMRforDynamoDB.PerformanceTuning.Mappers.Decreasing"></a>

`SELECT` 문을 사용하여 DynamoDB로 매핑되는 외부 Hive 테이블에서 데이터를 선택할 경우 Hadoop 작업은 필요에 따라 클러스터 내 최대 매퍼 수까지 작업을 사용할 수 있습니다. 이 시나리오에서는 장시간 실행되는 Hive 쿼리가 DynamoDB 테이블의 프로비저닝된 읽기 용량을 모두 소비하여 다른 사용자에게 부정적인 영향을 미칠 수 있습니다.

`dynamodb.max.map.tasks` 파라미터를 사용하여 매퍼 작업 수 상한을 설정할 수 있습니다.

```
SET dynamodb.max.map.tasks=1
```

이 값은 1보다 크거나 같아야 합니다. Hive가 쿼리를 처리할 때 Hadoop 작업이 DynamoDB 테이블에서 데이터를 읽으면서 `dynamodb.max.map.tasks`보다 많은 작업을 사용하지 않습니다.