

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 步骤 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 或更高。


| 配置设置 | 说明 | 
| --- | --- | 
| dfs.replication | 为了形成类似 RAID 的环境而接收复制的单个数据块 (类似于硬盘数据块) 的 HDFS 节点的数量。确定包含该数据块副本的 HDFS 节点的数量。 | 
| io.sort.mb | 排序可用的总内存大小。此值应该是 10x 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。启动 JVM 时 TaskTracker 使用的 Java 选项，以便在其中执行任务。通用参数是“-Xmx”，设置最大的内存大小。 | 
| mapred.map.child.java.opts | 启动 JVM 时 TaskTracker 使用的 Java 选项，以便在其中执行地图任务。通用参数是“-Xmx”，设置最大的内存堆大小。 | 
| mapred.map.tasks.speculative.execution | 确定同一任务的映射任务尝试是否可以并行启动。 | 
| mapred.reduce.tasks.speculative.execution | 确定同一任务的 reduce 任务尝试是否可以并行启动。 | 
| mapred.map.max.attempts | 可以尝试映射任务的最大次数。如果所有尝试都失败，那么该映射任务可标记为“失败”。 | 
| mapred.reduce.child.java.opts | 启动 JVM 时 TaskTracker 使用的 Java 选项，以便在其中执行简化任务。通用参数是“-Xmx”，设置最大的内存堆大小。 | 
| mapred.reduce.max.attempts | 可以尝试 reduce 任务的最大次数。如果所有尝试都失败，那么该映射任务可标记为“失败”。 | 
| mapred.reduce.slowstart.completed.maps | 尝试 reduce 任务前应该完成的映射任务量。不等待足够长的时间可能会造成在尝试中出现“Too many fetch-failure”错误。 | 
| mapred.reuse.jvm.num.tasks | 一个任务在单个 JVM 中运行。指定可以重新使用相同 JVM 的任务数。 | 
| mapred.tasktracker.map.tasks.maximum | 映射期间每个任务节点可并行执行的任务的最大数量。 | 
| mapred.tasktracker.reduce.tasks.maximum | 化简期间每个任务节点可并行执行的任务的最大数量。 | 

 如果您的集群任务需要使用大量内存，您可以通过在每个核心节点使用较少的任务以及降低作业跟踪程序堆大小来增强性能。