Apache Hadoop 配置文件详解

逐一详解 Apache Hadoop 3.3.6 核心配置文件 core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml、workers 与 hadoop-env.sh 中每个参数的作用、默认值与调优建议,附三节点生产配置模板。目标:让读者能依据业务场景正确编写与调优 Hadoop 配置。

Apache Hadoop大数据ApacheHadoop参数调优OpenJDK大数据与计算引擎批处理2026/09/29

Apache Hadoop 配置文件详解

目标:带读者逐个字段拆解 Apache Hadoop 3.3.6 的六大配置文件。Hadoop 的配置是"三台一致的外壳 + 少量本节点私有覆盖"的组合,理解每个参数才能在集群扩容、调优、排障时不动摇根基。本文配置均来自上文实际跑通 WordCount 的 3 节点集群。

配置文件总览

配置文件全部位于 <HADOOP_HOME>/etc/hadoop/,默认仅其中四个 XML + 两个纯文本/脚本最关键:

文件管辖子系统说明
core-site.xml全局(core)默认文件系统、临时目录、通用 I/O 缓冲
hdfs-site.xmlHDFSNameNode/DataNode 目录、副本数、块大小、Web 端口
yarn-site.xmlYARNResourceManager 地址、NodeManager 资源、aux 服务
mapred-site.xmlMapReduce框架选择(yarn)、classpath、AM/Map/Reduce JVM 参数
workers集群拓扑列出 DataNode/NodeManager 所在主机名单
hadoop-env.sh运行环境JAVA_HOME、HADOOP_HOME、各 daemon 用户、JVM 附加参数

⚠️ 惯例:前三台(node1/node2/node3)的这四个 XML 与 workers 内容必须完全一致;hadoop-env.sh 也要一致。只有"本节点私有"的信息(如 NameNode 目录、DataNode 目录各自指向本机本地盘)通过相对路径天然区分,无需额外覆盖。

core-site.xml 详解

<configuration>
  <property><name>fs.defaultFS</name><value>hdfs://node1:9000</value></property>
  <property><name>hadoop.tmp.dir</name><value>/opt/data/hadoop/hdfs/tmp</value></property>
  <property><name>hadoop.http.staticuser.user</name><value>root</value></property>
  <property><name>io.file.buffer.size</name><value>131072</value></property>
</configuration>
属性默认值取值/建议说明
fs.defaultFSfile:///hdfs://node1:9000默认文件系统 URI,客户端和 daemon 未显式指定 -fs 时连接 HDFS 的入口。集群内所有节点此值必须指向同一 NameNode。
hadoop.tmp.dir/tmp/hadoop-${user.name}/opt/data/hadoop/hdfs/tmp各种组件临时数据根目录。⚠️ 默认指向 /tmp 会被系统清理且重启丢失,生产务必显式指定到持久化数据盘。
hadoop.http.staticuser.userdr.whoroot通过 Web UI 访问 HDFS 时匿名请求所冒充的静态用户;权限校验开启后用于确定 HTTP 身份。
io.file.buffer.size4096131072读写文件所用缓冲区字节数。吞吐敏感场景调大(如 64KB/128KB)可减少系统调用与磁盘寻道;内存紧可保留默认。

hdfs-site.xml 详解

<configuration>
  <property><name>dfs.namenode.name.dir</name><value>/opt/data/hadoop/hdfs/name</value></property>
  <property><name>dfs.datanode.data.dir</name><value>/opt/data/hadoop/hdfs/data</value></property>
  <property><name>dfs.replication</name><value>2</value></property>
  <property><name>dfs.permissions.enabled</name><value>false</value></property>
  <property><name>dfs.namenode.http-address</name><value>node1:9870</value></property>
  <property><name>dfs.namenode.secondary.http-address</name><value>node2:9868</value></property>
  <property><name>dfs.datanode.data.dir.perm</name><value>755</value></property>
  <property><name>dfs.blocksize</name><value>134217728</value></property>
</configuration>
属性默认值取值/建议说明
dfs.namenode.name.dirfile://${hadoop.tmp.dir}/dfs/name/opt/data/hadoop/hdfs/nameNameNode 存放命名空间镜像(fsimage)与编辑日志(edits)的目录。建议挂独立可靠磁盘。可写逗号分隔的多个目录做冗余镜像(会同时写入每一份)。
dfs.datanode.data.dirfile://${hadoop.tmp.dir}/dfs/data/opt/data/hadoop/hdfs/dataDataNode 存储数据块的本地目录,可逗号分隔多个卷(HDFS 会按配置 IP/SD/IP 选择写入磁盘)。
dfs.replication32默认副本数。本集群仅 2 个 DataNode,故设 2。生产建议 ≥3,或按机架感知设 replication factor。
dfs.permissions.enabledtruefalse是否开启 HDFS 权限检查。演示关闭(省去 chown/group 琐事);生产必须开 true 并配合超级用户/Kerberos。
dfs.namenode.http-address0.0.0.0:9870node1:9870NameNode 的 HTTP 管理端口与绑定地址(3.x 由 50070 改为 9870)。
dfs.namenode.secondary.http-address0.0.0.0:9868node2:9868SecondaryNameNode 所在节点与其 HTTP 端口。注意 SecondaryNameNode 不参与写,只做 edit log 合并(checkpoint)。
dfs.datanode.data.dir.perm755755DataNode 数据目录的权限位,决定初始化时自动 mkdir 的目录权限。
dfs.blocksize134217728134217728默认数据块大小=128MB。大文件调大(256/512MB)可减少 NameNode 元数据量、提升顺序吞吐。

yarn-site.xml 详解

<configuration>
  <property><name>yarn.resourcemanager.hostname</name><value>node1</value></property>
  <property><name>yarn.resourcemanager.address</name><value>node1:8032</value></property>
  <property><name>yarn.resourcemanager.scheduler.address</name><value>node1:8030</value></property>
  <property><name>yarn.resourcemanager.resource-tracker.address</name><value>node1:8031</value></property>
  <property><name>yarn.resourcemanager.admin.address</name><value>node1:8033</value></property>
  <property><name>yarn.resourcemanager.webapp.address</name><value>node1:8088</value></property>
  <property><name>yarn.nodemanager.aux-services</name><value>mapreduce_shuffle</value></property>
  <property><name>yarn.nodemanager.aux-services.mapreduce_shuffle.class</name><value>org.apache.hadoop.mapred.ShuffleHandler</value></property>
  <property><name>yarn.nodemanager.vmem-check-enabled</name><value>false</value></property>
  <property><name>yarn.nodemanager.resource.memory-mb</name><value>2048</value></property>
  <property><name>yarn.nodemanager.resource.cpu-vcores</name><value>2</value></property>
  <property><name>yarn.scheduler.maximum-allocation-mb</name><value>2048</value></property>
  <property><name>yarn.scheduler.minimum-allocation-mb</name><value>256</value></property>
</configuration>
属性默认值取值/建议说明
yarn.resourcemanager.hostname0.0.0.0node1RM 所在主机名,开启后其余 RM 地址类属性会用该主机名自动补齐默认端口。集中声明便于维护。
yarn.resourcemanager.address0.0.0.0:8032node1:8032AM/Container 向 RM 注册与申请资源使用的 RPC 地址。
yarn.resourcemanager.scheduler.address0.0.0.0:8030node1:8030调度器 RPC 地址,AM 通过它提交/释放资源请求。
yarn.resourcemanager.resource-tracker.address0.0.0.0:8031node1:8031NodeManager 心跳上报节点资源给 RM 的地址。
yarn.resourcemanager.admin.address0.0.0.0:8033node1:8033管理命令(yarn rmadmin)使用的地址。
yarn.resourcemanager.webapp.address0.0.0.0:8088node1:8088RM 的 Web UI 端口,直观查看节点、应用、队列。
yarn.nodemanager.aux-services空mapreduce_shuffleNM 上运行的辅助服务列表。MapReduce 必须启用 shuffle 服务,否则 Reduce 无法拉取 Map 中间结果。
yarn.nodemanager.aux-services.mapreduce_shuffle.classorg.apache.hadoop.mapred.ShuffleHandler同上shuffle 服务具体实现类,配合上一属性成对出现。
yarn.nodemanager.vmem-check-enabledtruefalse是否校验物理内存/虚拟内存比例。容器虚拟内存超限会误杀任务,Java 17 堆外占用易误判,容器环境常关。
yarn.nodemanager.resource.memory-mb81922048单个 NM 可向集群提供的总内存(MB),决定能并发多少容器。需 ≤ 节点物理内存并留系统余量。
yarn.nodemanager.resource.cpu-vcores82单个 NM 可提供的 vcore 数。vmem-check 关闭时仅作调度参考计数。
yarn.scheduler.maximum-allocation-mb81922048单个 Container(AM/任务)能申请的最大内存。设成与 NM 内存一致表示单容器可吃满整节点。
yarn.scheduler.minimum-allocation-mb1024256容器内存分配的最小粒度,所有申请按此向上取整(如 300MB 视为 2×256)。减小粒度可容纳更多小任务。

mapred-site.xml 详解

<configuration>
  <property><name>mapreduce.framework.name</name><value>yarn</value></property>
  <property><name>mapreduce.application.classpath</name><value>绝对路径…(见部署篇)</value></property>
  <property><name>yarn.app.mapreduce.am.env</name><value>HADOOP_MAPRED_HOME=$HADOOP_HOME</value></property>
  <property><name>mapreduce.map.env</name><value>HADOOP_MAPRED_HOME=$HADOOP_HOME</value></property>
  <property><name>mapreduce.reduce.env</name><value>HADOOP_MAPRED_HOME=$HADOOP_HOME</value></property>
  <property><name>yarn.app.mapreduce.am.command-opts</name><value>--add-opens=... -Xmx1024m</value></property>
  <property><name>mapreduce.map.java.opts</name><value>--add-opens=... -Xmx512m</value></property>
  <property><name>mapreduce.reduce.java.opts</name><value>--add-opens=... -Xmx512m</value></property>
  <property><name>mapreduce.jobhistory.address</name><value>node1:10020</value></property>
  <property><name>mapreduce.jobhistory.webapp.address</name><value>node1:19888</value></property>
</configuration>
属性默认值取值/建议说明
mapreduce.framework.namelocalyarn计算框架运行模式。local 本地跑(调试)、yarn 提交到集群、classic 旧版 MRv1。生产= yarn。
mapreduce.application.classpath$HADOOP_HOME/share/hadoop/mapreduce/*:$HADOOP_COMMON_HOME/...(相对)绝对路径的五个 share 子目录AM 容器的 classpath。2.6+ / 3.x 常出现相对路径失效导致 AM 启动即 exit 1,务必用 $HADOOP_HOME 拼绝对路径(含 lib/*)。
yarn.app.mapreduce.am.env空HADOOP_MAPRED_HOME=$HADOOP_HOME注入到 ApplicationMaster 容器的额外环境变量;配合 classpath 使用。
mapreduce.map.env / mapreduce.reduce.env空HADOOP_MAPRED_HOME=$HADOOP_HOME注入到 map / reduce 任务容器的环境变量。
yarn.app.mapreduce.am.command-opts-Xmx1024m--add-opens=… -Xmx1024mAM JVM 启动参数。Java 17 下这里必须加 --add-opens=java.base/java.lang=ALL-UNNAMED 等,否则 AM 加载即抛 InaccessibleObjectException。
mapreduce.map.java.opts-Xmx1024m--add-opens=… -Xmx512mmap 任务容器 JVM 参数。大小要 ≤ map 容器申请内存减去 JVM 堆外开销。
mapreduce.reduce.java.opts-Xmx1024m--add-opens=… -Xmx512mreduce 任务容器 JVM 参数。
mapreduce.jobhistory.address0.0.0.0:10020node1:10020JobHistoryServer 的 RPC 地址(需单独启动 mapred --daemon start historyserver 才有历史)。
mapreduce.jobhistory.webapp.address0.0.0.0:19888node1:19888JobHistory 的 Web UI 端口,浏览已完成作业。

workers 文件详解

node2
node3
  • workers(3.x 之前叫 slaves)每行一个主机名,列出 DataNode 与 NodeManager 所在节点。
  • start-dfs.sh 会据它通过 SSH 逐个启动 DataNode;start-yarn.sh 据此启动各 NodeManager。
  • 不含 localhost/127.0.0.1,否则会在本机重复起一份 daemon。
  • 节点扩容时只需在此追加新主机名(并保证去往新节点 SSH 免密、配置已同步)。

hadoop-env.sh 详解

export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
export HADOOP_HOME=/opt/data/hadoop/hadoop-3.3.6
export HADOOP_LOG_DIR=/opt/data/hadoop/logs
export HDFS_DATANODE_USER=root
export HDFS_NAMENODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root
export HADOOP_OPTS="$HADOOP_OPTS --add-opens=...(见部署篇步骤 2)"
变量作用
JAVA_HOME让所有 hadoop/bin 脚本找到 JDK。不设会报 JAVA_HOME is not set。
HADOOP_HOMEHadoop 安装根目录,供脚本定位 bin/share 等。
HADOOP_LOG_DIR各 daemon 日志集中目录,便于统一采集。
HDFS_DATANODE_USER / HDFS_NAMENODE_USER / HDFS_SECONDARYNAMENODE_USER以 root 启动时必须定义,否则 start-dfs.sh 因安全检查中止。生产建议换成 hadoop 用户。
YARN_RESOURCEMANAGER_USER / YARN_NODEMANAGER_USER同理,YARN 侧的安全检查必需。
HADOOP_OPTS追加到所有 HDFS/YARN daemon JVM 的通用参数,Java 17 模块访问开关在此统一注入。

三节点生产配置模板要点

  • 四个 XML + workers + hadoop-env.sh 三台逐字节一致;分发用:

    cd /opt/data/hadoop/hadoop-3.3.6 && tar -cf - etc/hadoop | ssh node2 "tar -xf - -C /opt/data/hadoop/hadoop-3.3.6"
    
  • dfs.namenode.name.dir 指向 node1 的独立持久盘;dfs.datanode.data.dir 挂多卷提升吞吐。

  • Java 17 生产模板统一在 HADOOP_OPTS、yarn.app.mapreduce.am.command-opts、mapreduce.{map,reduce}.java.opts 四处追加同一组 --add-opens。

  • 副本数、块大小、NM 内存按"节点数×磁盘×可用内存"计算,切忌照抄小集群参数到大型生产。

调优建议汇总

  • 小集群起步:dfs.replication=2、yarn.nodemanager.resource.memory-mb=2048、yarn.scheduler.minimum-allocation-mb=256,让内存池尽量细粒度,能同时跑更多小作业。
  • 吞吐型:dfs.blocksize=268435456(256MB)、io.file.buffer.size=262144,减少 NameNode 元数据量与磁盘寻道。
  • 高频小文件:块大小保持 128MB 即可,更多精力放在 small files 合并(如 SequenceFile)而非调块。
  • 容器环境:务必 yarn.nodemanager.vmem-check-enabled=false,避免 JVM 堆外/直接内存被虚拟内存校验误杀。

JVM 内存调优配置(实测)

本集群为低内存服务器(总内存有限),已对 HDFS 与 YARN 各守护进程的 JVM 堆做了调低并重启验证。

  • 配置文件:/opt/data/hadoop/hadoop-3.3.6/etc/hadoop/hadoop-env.sh、yarn-env.sh
  • 新增/调低:
    • HADOOP_HEAPSIZE=512
    • HADOOP_NAMENODE_OPTS="-Xms256m -Xmx512m"
    • HADOOP_DATANODE_OPTS="-Xmx256m"
  • YARN 侧:YARN_RESOURCEMANAGER_OPTS="-Xms256m -Xmx512m"、YARN_NODEMANAGER_OPTS="-Xmx512m"

调低后 NameNode 进程 RSS≈264 MB、ResourceManager RSS≈372 MB,HDFS 与 YARN 均正常提供服务。

参考链接