

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

# 使用 Amazon EMR 的舊版 AMI 來建立叢集
<a name="emr-3x-create"></a>

Amazon EMR 2.x 和 3.x 版本由 AMI 版本加以參考。有了 Amazon EMR 4.0.0 版和更高版本、發行版本會使用版本標籤 (例如 `emr-5.11.0`) 來參考版本。當您使用 AWS CLI 或以程式設計方式建立叢集時，此變更最為明顯。

當您使用 AWS CLI 來使用 AMI 發行版本建立叢集時，請使用 `--ami-version`選項，例如 `--ami-version 3.11.0`。當您指定 `--ami-version` 時，Amazon EMR 4.0.0 及更高版本中推出的許多選項、功能和應用程式皆不可使用。如需詳細資訊，請參閱《AWS CLI 命令參考》**中的 [create-cluster](https://docs.aws.amazon.com/cli/latest/reference/emr/create-cluster.html)。

下列範例 AWS CLI 命令會使用 AMI 版本啟動叢集。

**注意**  
包含 Linux 行接續字元 (\\) 是為了提高可讀性。它們可以在 Linux 命令中移除或使用。對於 Windows，請將其移除或取代為插入符號 (^)。

```
aws emr create-cluster --name "{{Test cluster}}" --ami-version {{3.11.0}} \
--applications Name={{Hue}} Name={{Hive}} Name={{Pig}} \
--use-default-roles --ec2-attributes KeyName={{myKey}} \
--instance-groups InstanceGroupType={{MASTER}},InstanceCount={{1}},\
InstanceType={{m3.xlarge}} InstanceGroupType={{CORE}},InstanceCount={{2}},\
InstanceType={{m3.xlarge}} --bootstrap-actions Path={{s3://elasticmapreduce/bootstrap-actions/configure-hadoop}},\
Name={{"Configuring infinite JVM reuse"}},Args=[{{"-m","mapred.job.reuse.jvm.num.tasks=-1"}}]
```

所有 Amazon EMR 發行版本會以程式設計方式，在 EMR API 中使用 `RunJobFlowRequest` 動作來建立叢集。以下範例 Java 程式碼會使用 AMI 發行版本 3.11.0 建立叢集。

```
RunJobFlowRequest request = new RunJobFlowRequest()
			.withName("AmiVersion Cluster")
			.withAmiVersion("3.11.0")
			.withInstances(new JobFlowInstancesConfig()
				.withEc2KeyName("myKeyPair")
				.withInstanceCount(1)
				.withKeepJobFlowAliveWhenNoSteps(true)
				.withMasterInstanceType("m3.xlarge")
				.withSlaveInstanceType("m3.xlarge");
```

以下 `RunJobFlowRequest` 呼叫會改用發行標籤：

```
RunJobFlowRequest request = new RunJobFlowRequest()
			.withName("ReleaseLabel Cluster")
			.withReleaseLabel("{{emr-7.13.0}}")
			.withInstances(new JobFlowInstancesConfig()
				.withEc2KeyName("myKeyPair")
				.withInstanceCount(1)
				.withKeepJobFlowAliveWhenNoSteps(true)
				.withMasterInstanceType("m3.xlarge")
				.withSlaveInstanceType("m3.xlarge");
```

## 設定叢集大小
<a name="emr-3x-cluster-size"></a>

當叢集執行時，Hadoop 會判斷任務處理資料所需的映射器和縮減器的數量。叢集越大，應擁有更多任務以更佳使用資源並縮短處理時間。一般而言，EMR 叢集大小在整個叢集中會維持相同；您在建立叢集時會設定任務數。當您調整執行中叢集的大小，您可能會在叢集執行期間改變處理方式。因此，您可以不使用固定數量的任務，而是在叢集的生命週期期間變更任務數。有兩種組態選項，可協助您設定理想的任務數：
+ `mapred.map.tasksperslot`
+ `mapred.reduce.tasksperslot`

您可以在 `mapred-conf.xml` 檔案中設定兩種選項。當您將任務提交到叢集，任務用戶端會檢查叢集間可用的映射和縮減插槽的目前總數。然後，任務用戶端會使用以下方程式來設定任務數：
+ `mapred.map.tasks` =` mapred.map.tasksperslot` \* 在叢集中的映射插槽
+ `mapred.reduce.tasks` =`mapred.reduce.tasksperslot` \* 在叢集中的縮減插槽

如果尚未設定任務數量，則任務用戶端只會讀取 `tasksperslot` 參數。您可以隨時透過新增步驟來變更組態，以便透過引導操作或根據個別任務為所有叢集覆寫任務數量。

即使任務節點變成無法使用，Amazon EMR 仍會承受任務節點失敗並繼續執行叢集。Amazon EMR 會自動佈建額外的任務節點，以取代失敗的節點。

對於每個叢集步驟，您可以有不同數量的任務節點。您也可以將步驟新增至執行中的叢集來修改任務節點的數量。由於所有步驟依預設都保證會按順序執行，您可以為任何步驟的執行中任務節點指定數量。