本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
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。
下列範例 AWS CLI 命令會使用 AMI 版本啟動叢集。
注意
包含 Linux 行接續字元 (\) 是為了提高可讀性。它們可以在 Linux 命令中移除或使用。對於 Windows,請將其移除或取代為插入符號 (^)。
aws emr create-cluster --name "
Test cluster
" --ami-version3.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.8.0
")
.withInstances(new JobFlowInstancesConfig()
.withEc2KeyName("myKeyPair")
.withInstanceCount(1)
.withKeepJobFlowAliveWhenNoSteps(true)
.withMasterInstanceType("m3.xlarge")
.withSlaveInstanceType("m3.xlarge");
設定叢集大小
當叢集執行時,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 會自動佈建額外的任務節點,以取代失敗的節點。
對於每個叢集步驟,您可以有不同數量的任務節點。您也可以將步驟新增至執行中的叢集來修改任務節點的數量。由於所有步驟依預設都保證會按順序執行,您可以為任何步驟的執行中任務節點指定數量。