使用 Amazon EMR 的舊版 AMI 來建立叢集 - Amazon EMR

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

使用 Amazon EMR 的舊版 AMI 來建立叢集

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-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.1.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 會自動佈建額外的任務節點,以取代失敗的節點。

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