

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

# 步驟 6：檢閱 Amazon EMR 叢集的組態設定
<a name="emr-troubleshoot-slow-6"></a>

 組態設定會指定叢集執行方式的詳細資訊，例如重試任務的次數，以及可用於排序的記憶體量。當您使用 Amazon EMR 啟動叢集時，除了標準 Hadoop 組態設定，還有 Amazon EMR 特定的設定。組態設定是存放在叢集的主節點。您可以檢查組態設定，以確保叢集擁有為了可有效執行而所需的資源。

 Amazon EMR 會定義預設的 Hadoop 組態設定，其會使用此設定來啟動叢集。這些值是根據您為叢集指定的 AMI 和執行個體類型而定。您可以使用引導操作或透過在任務執行參數中指定新的值來從預設值修改組態設定。如需詳細資訊，請參閱[建立引導操作以使用 Amazon EMR 叢集安裝其他軟體](emr-plan-bootstrap.md)。若要判斷引導操作是否已變更組態設定，請檢查引導操作日誌。

 Amazon EMR 會記錄用來執行每個作業的 Hadoop 設定。日誌資料會存放在主節點的 `/mnt/var/log/hadoop/history/` 目錄下名為 `job_{{job-id}}_conf.xml` 的檔案中，其中任務的識別符會取代 {{job-id}}。如果您已啟用日誌存檔，則系統會將此資料複製到在 `logs/{{date}}/{{jobflow-id}}/jobs` 資料夾的 Amazon S3 中，其中 {{date}} 是作業執行的日期而 {{jobflow-id}} 是叢集識別符。

 以下 Hadoop 任務組態設定特別適用於研究效能問題。如需 Hadoop 組態設定以及這些設定如何影響 Hadoop 行為的詳細資訊，請移至 [ http://hadoop.apache.org/docs/](http://hadoop.apache.org/docs/)。

**警告**  
如果單一節點發生故障，在少於四個節點的叢集上將 `dfs.replication` 設定為 1 可能會導致 HDFS 資料遺失。建議您對生產工作負載使用至少具有四個核心節點的叢集。
Amazon EMR 不允許叢集將核心節點擴展至低於 `dfs.replication`。例如，如果 `dfs.replication = 2`，核心節點的最小數量為 2。
當您使用受管擴展即自動擴展，或選擇手動調整叢集大小時，建議您將 `dfs.replication` 設定為 2 或更高。


| 組態設定 | Description | 
| --- | --- | 
| dfs.replication | 要將單一區塊 (例如硬碟區塊) 複製到其中的 HDFS 節點數，以產生類似 RAID 的環境。決定 HDFS 節點的數量，其中包含區塊複本。 | 
| io.sort.mb | 可用於排序的記憶體總數。這個值應該是 10 乘以 io.sort.factor。此設定還可用於計算任務節點所用的記憶體總數，方法是將 io.sort.mb 乘以 mapred.tasktracker.ap.tasks.maximum 來計算而得。 | 
| io.sort.spill.percent | 此值會在排序時用到，在該時間點會開始使用磁碟，因為配置的排序記憶體即將用盡。 | 
| mapred.child.java.opts | 已廢除。改用 mapred.map.child.java.opts 和 mapred.reduce.child.java.opts。TaskTracker 在為要在其中執行任務啟動 JVM 時使用的 Java 選項。設定最大記憶體大小的常見參數為 "-Xmx"。 | 
| mapred.map.child.java.opts | TaskTracker 在為要在其中執行映射啟動 JVM 時使用的 Java 選項。設定最大記憶體堆積大小的常見參數為 "-Xmx"。 | 
| mapred.map.tasks.speculative.execution | 決定相同任務的映射任務嘗試是否會平行啟動。 | 
| mapred.reduce.tasks.speculative.execution | 決定相同任務的縮減任務嘗試是否會平行啟動。 | 
| mapred.map.max.attempts | 映射任務可以嘗試的次數上限。如果所有次數皆失敗，那麼會將映射任務標示為失敗。 | 
| mapred.reduce.child.java.opts | TaskTracker 在為要在其中執行縮減啟動 JVM 時使用的 Java 選項。設定最大記憶體堆積大小的常見參數為 "-Xmx"。 | 
| mapred.reduce.max.attempts | 縮減任務可以嘗試的次數上限。如果所有次數皆失敗，那麼會將映射任務標示為失敗。 | 
| mapred.reduce.slowstart.completed.maps | 在嘗試縮減任務前應完成的映射任務數。等待時間不足可能會在嘗試時導致「擷取失敗太多次」錯誤。 | 
| mapred.reuse.jvm.num.tasks | 任務會在單一 JVM 中執行。指定可能重複使用相同 JVM 的任務數。 | 
| mapred.tasktracker.map.tasks.maximum | 映射期間每一任務節點可平行執行的最大任務數。 | 
| mapred.tasktracker.reduce.tasks.maximum | 縮減期間每一任務節點可平行執行的最大任務數。 | 

 如果叢集任務需要使用大量記憶體，您可以讓每個核心節點使用較少的任務，並降低任務追蹤器堆積大小來增強效能。