

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 調整映射器
<a name="EMRforDynamoDB.PerformanceTuning.Mappers"></a>

Hive 啟動 Hadoop 任務時，此任務會由一或多個映射器任務處理。假設 DynamoDB 資料表擁有足夠的輸送容量，您可以修改叢集中的映射器數目，潛在地改善效能。

**注意**  
在 Hadoop 任務中使用的映射器任務數目會受到*輸入分割*影響，其中 Hadoop 會將資料細分成邏輯區塊。如果 Hadoop 未執行足夠的輸入分割，則您的寫入作業可能會無法使用 DynamoDB 資料表中所有可用的寫入輸送量。

## 增加映射器的數目
<a name="EMRforDynamoDB.PerformanceTuning.Mappers.Increasing"></a>

Amazon EMR 中的每個映射器都有每秒 1 MiB 的最大讀取率。叢集中的映射器數目視叢集中的節點大小而定。(如需節點大小和每個節點映射器數目的相關資訊，請參閱《Amazon EMR 開發人員指南》**中的[任務組態](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-hadoop-task-config.html)。)

如果您的 DynamoDB 資料表擁有足夠的讀取輸送容量，您可以執行下列其中一項操作來嘗試增加映射器的數目：
+ 增加叢集中節點的大小。例如，如果您的叢集正在使用 *m1.large* 節點 (每個節點有三個映射器)，則可以嘗試升級至 *m1.xlarge* 節點 (每個節點有八個映射器)。
+ 增加叢集中節點的數目。例如，如果您有 *m1.xlarge* 節點的三節點叢集，則可用的映射器總共有 24 個。如果將叢集 (擁有相同類型的節點) 大小加倍，則會有 48 個映射器。

您可以使用 AWS 管理主控台 來管理叢集中的節點大小或數量。(您可能需要重新啟動叢集，才能讓這些變更生效。)

另一種增加映射器數目的方式，便是修改 `mapred.tasktracker.map.tasks.maximum` Hadoop 組態參數。(這是 Hadoop 參數，而非 Hive 參數。您無法從命令提示字元以互動方式加以修改。) 若想增加 `mapred.tasktracker.map.tasks.maximum` 的值，您只需增加映射器的數目，無需增加節點大小或數量。不過，如果您設定的值太高，叢集節點可能會耗盡記憶體。

在第一次啟動 Amazon EMR 叢集時，您可以將 `mapred.tasktracker.map.tasks.maximum` 設定為自舉動作。如需詳細資訊，請參閱《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 處理查詢時，從 DynamoDB 資料表讀取時，產生的 Hadoop 作業使用不會超過 `dynamodb.max.map.tasks`。