步骤 6:审查配置设置 - Amazon EMR
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

步骤 6:审查配置设置

配置设置指定集群如何运行的详细信息,例如,重试任务的次数和排序可用的内存大小。当使用 Amazon EMR 启动集群时,除了标准 Hadoop 配置设置外,还有 Amazon EMR 特定的设置。这些配置设置存储在集群的主节点上。您可以检查配置设置,以确保集群有所需的资源高效运行。

Amazon EMR 定义用于启动集群的默认 Hadoop 配置设置。这些值基于 AMI 和您为该集群指定的实例类型。您可以使用引导操作或在作业执行参数中指定新值,从而修改配置设置的默认值。有关更多信息,请参阅创建引导操作以安装其它软件。为了确定引导操作是否更改了配置设置,请检查引导操作日志。

Amazon EMR 记录用于执行每次任务的 Hadoop 设置。日志数据存储在主节点 /mnt/var/log/hadoop/history/ 目录下名为 job_job-id_conf.xml 的文件中,其中,将 job-id 替换为作业标识符。如果您已启用了日志归档,此数据复制到 Amazon S3 中的 logs/date/jobflow-id/jobs 文件夹,其中,date 是该任务运行的日期,jobflow-id 是该集群的标识符。

以下 Hadoop 作业配置设置对于调查性能问题尤其有用。有关 Hadoop 配置设置及它们如何影响 Hadoop 操作的详细信息,请转到 http://hadoop.apache.org/docs/

警告
  1. 如果单个节点出现故障,则在少于四个节点的集群上将 dfs.replication 设置为 1 可能会导致 HDFS 数据丢失。建议您使用具有至少四个核心节点的集群来处理生产工作负载。

  2. Amazon EMR 不允许集群扩展 dfs.replication 下方的核心节点。例如,如果是 dfs.replication = 2,则最小核心节点数为 2。

  3. 当您使用托管扩缩、自动扩缩或选择手动调整集群大小时,建议您将设置 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 化简期间每个任务节点可并行执行的任务的最大数量。

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