0%

HDFS常用配置

HDFS 常用配置详解:哪些参数该调、调到多少、为什么

HDFS 的默认配置能跑,但不一定是最优的。

不同场景对 HDFS 的要求不一样——日志采集要吞吐,核心数据要可靠,小集群和大集群的配置也不一样。盲目照搬默认值,要么资源浪费,要么性能不够。

一、数据可靠性相关配置

1. dfs.replication副本数,决定数据丢不丢

  • 作用:设置 HDFS 数据块的默认副本数,确保数据可靠性;

  • 默认值:3

  • 配置示例

    1
    2
    3
    4
    <property>  
    <name>dfs.replication</name>
    <value>3</value>
    </property>
  • 优化建议

    • 生产环境建议保持 3 副本,确保数据容错性;
    • 冷数据或测试环境可降至 2 副本,节省存储资源;
    • 单节点集群必须设为 1(否则无法写入数据)。

2. dfs.client.block.write.replace-datanode-on-failure.replication

  • 作用:写入数据时,若某个 DataNode 失败,是否继续写入剩余副本;

  • 默认值:0(失败后不继续写入)

  • 配置示例

    1
    2
    3
    4
    <property>  
    <name>dfs.client.block.write.replace-datanode-on-failure.replication</name>
    <value>2</value>
    </property>
  • 适用场景

    • 数据节点数为 3 时,设为 2 可容忍 1 个节点故障,避免写入失败;
    • 高并发写入场景(如 Spark 批量写入)建议启用,提升写入成功率。

性能相关配置

1. dfs.blocksize 块大小,影响元数据压力和任务并行度

  • 作用:设置 HDFS 数据块的大小,影响数据分布和处理效率;

  • 默认值:134217728 字节(128MB)

  • 配置示例

    1
    2
    3
    4
    <property>  
    <name>dfs.blocksize</name>
    <value>268435456</value> <!-- 256MB -->
    </property>
  • 优化建议

    • 大文件场景(如日志、视频):增大块大小(256MB 或 512MB),减少 NameNode 元数据压力;
    • 小文件场景:保持默认 128MB,避免块碎片化;
    • 计算密集型场景:与 MapReduce/Spark 任务处理能力匹配(如每个块对应 1 个 Map 任务)。

NameNode 相关配置

1. dfs.namenode.handler.count NameNode 处理并发请求的线程数

  • 作用:NameNode 处理客户端请求的线程池大小,影响并发处理能力;

  • 默认值:100

  • 配置示例

    1
    2
    3
    4
    <property>  
    <name>dfs.namenode.handler.count</name>
    <value>200</value>
    </property>
  • 优化建议

    • 根据集群规模调整:小集群(<10 节点)保持默认,大集群(>100 节点)可增至 200-400;
    • 高并发场景(如同时 hundreds 客户端):通过压测确定最优值(通常为 100-500)。

2. dfs.namenode.name.dir 元数据存哪,多目录冗余

  • 作用:设置 NameNode 元数据存储目录,支持多目录冗余;

  • 默认值file://${hadoop.tmp.dir}/dfs/name

  • 配置示例

    1
    2
    3
    4
    5
    6
    7
    8
    <property>  
    <name>dfs.namenode.name.dir</name>
    <value>
    file:///hadoop/hdfs/name1,
    file:///hadoop/hdfs/name2,
    file:///disk3/hdfs/name3 <!-- 多磁盘存储 -->
    </value>
    </property>
  • 优势

    • 多目录提升读写性能(并行 I/O);
    • 单磁盘故障不影响 NameNode 可用性。

DataNode 相关配置

1. dfs.datanode.handler.count DataNode 处理数据传输的线程数

  • 作用:DataNode 处理数据传输的线程池大小,影响读写性能;

  • 默认值:30

  • 配置示例

    1
    2
    3
    4
    <property>  
    <name>dfs.datanode.handler.count</name>
    <value>60</value>
    </property>
  • 优化建议

    • 磁盘 I/O 密集型场景:增至 60-100,提升并发传输能力;
    • SSD 存储集群:可进一步提高(如 100-200),充分利用高速磁盘。

2. dfs.datanode.data.dir 数据块存哪,多磁盘分散存储

  • 作用:设置 DataNode 数据块存储目录,支持多磁盘扩展;

  • 默认值file://${hadoop.tmp.dir}/dfs/data

  • 配置示例

    1
    2
    3
    4
    5
    6
    7
    8
    <property>  
    <name>dfs.datanode.data.dir</name>
    <value>
    file:///disk1/hdfs/data,
    file:///disk2/hdfs/data,
    file:///disk3/hdfs/data <!-- 挂载多个物理磁盘 -->
    </value>
    </property>
  • 优化建议

    • 每个目录挂载独立物理磁盘,避免 I/O 竞争;
    • SSD 与 HDD 混合部署时,热点数据存 SSD,冷数据存 HDD。

回收站配置

1. fs.trash.interval 文件在回收站保留多久

  • 作用:设置 HDFS 回收站中文件的保留时间(分钟),防止误删除;

  • 默认值:0(禁用回收站)

  • 配置示例

    1
    2
    3
    4
    <property>  
    <name>fs.trash.interval</name>
    <value>1440</value> <!-- 24小时 -->
    </property>
  • 最佳实践

    • 生产环境建议设置为 1440(24 小时),重要数据可延长至 4320(3 天);
    • 通过 hdfs dfs -expunge 手动清理回收站。

2. fs.trash.checkpoint.interval

  • 作用:设置回收站扫描周期(分钟),控制何时创建回收站检查点;

  • 默认值:0(与 fs.trash.interval 相同)

  • 配置示例

    1
    2
    3
    4
    <property>  
    <name>fs.trash.checkpoint.interval</name>
    <value>60</value> <!-- 每小时扫描一次 -->
    </property>
  • 注意事项

    • 需小于或等于 fs.trash.interval,否则无效;
    • 频繁扫描会增加 NameNode 负担,建议根据集群规模调整。

其他配置

1. dfs.namenode.datanode.registration.ip-hostname-check

  • 作用:控制 DataNode 注册时是否验证主机名与 IP 的映射关系;

  • 默认值true

  • 配置示例

    1
    2
    3
    4
    <property>  
    <name>dfs.namenode.datanode.registration.ip-hostname-check</name>
    <value>false</value>
    </property>
  • 适用场景

    • 集群主机名与 IP 未配置 DNS 映射时,需设为 false,否则 DataNode 无法注册;
    • 生产环境建议保持 true,确保通信安全。

调参后的验证

1. 配置文件位置

HDFS 核心配置文件位于 $HADOOP_HOME/etc/hadoop 目录下:

  • core-site.xml:通用 Hadoop 配置(如文件系统 URI);
  • hdfs-site.xml:HDFS 专属配置(如副本数、块大小);
  • workers:DataNode 节点列表(每行一个主机名)。

2. 验证配置生效

1
2
3
4
5
6
7
8
9
# 查看当前生效的配置(NameNode 配置)  
hdfs getconf -confKey dfs.replication

# 查看所有配置
hdfs getconf -confKey "*"

# 重启 HDFS 使配置生效 (改 hdfs-site.xml 后必须重启)
stop-dfs.sh
start-dfs.sh

3. 压测验证效果

使用 hdfs dfsioe 工具测试 HDFS 读写性能:

1
2
3
4
5
6
7
8
# 写入测试(生成 10 个 1GB 文件)  
hdfs dfsio -write -nrFiles 10 -fileSize 1GB

# 读取测试
hdfs dfsio -read -nrFiles 10 -fileSize 1GB

# 清理测试文件
hdfs dfsio -clean

欢迎关注我的其它发布渠道