01.hadoop的节点增加磁盘导致数据分布不均处理方式

captains 2025-09-02 PM 682℃ 0条

1、概要

  • 因业务数据量的增长,hadoop的datanode节点空间不足。
  • 扩容方案2种:

    • 1、节点的服务器增加磁盘;
    • 2、增加datanode数据节点服务器;
  • 最终选择方案一,服务器增加磁盘,hadoop的hdfs支持多个路径的数据写入;
  • 产生问题:

    • 因服务器增加了磁盘,原旧数据目录的空间已使用90%,新磁盘空间使用率10%,导致该节点上多个数据目录,数据分布不均;
    • 新加磁盘只会承载后续写入的数据

      • HDFS 默认不会自动把老磁盘里的数据迁移到新磁盘。已有数据仍然堆在第一个磁盘里,新磁盘只是接收新增的数据,所以使用率不均衡。
    • HDFS 数据块调度机制

      • DataNode 内部是“多存储目录”的模式,NameNode 在分配 block 时会根据磁盘使用比例选择目录。但只有在新写入数据时才会均衡,不会自动迁移旧数据。

2、服务器磁盘信息

[hadoop@datanode-ser ~]$ df -h
Filesystem             Size  Used Avail Use% Mounted on
devtmpfs               3.8G     0  3.8G   0% /dev
tmpfs                  3.9G     0  3.9G   0% /dev/shm
tmpfs                  3.9G   12M  3.8G   1% /run
tmpfs                  3.9G     0  3.9G   0% /sys/fs/cgroup
/dev/mapper/rhel-root   44G   28G   17G  64% /
/dev/sda1             1014M  150M  864M  15% /boot
tmpfs                  781M     0  781M   0% /run/user/0
tmpfs                  781M     0  781M   0% /run/user/997
/dev/sdb1               99G  835M   93G   1% /hadoop2

3、处理方式

3.1 查询datanode节点信息及健康情况

[hadoop@datanode-ser ~]$ hdfs dfsadmin -report
Configured Capacity: 152771162112 (142.28 GB)
Present Capacity: 133037969408 (123.90 GB)
DFS Remaining: 116573769728 (108.57 GB)
DFS Used: 16464199680 (15.33 GB)
DFS Used%: 12.38%
Replicated Blocks:
    Under replicated blocks: 128
    Blocks with corrupt replicas: 0
    Missing blocks: 0
    Missing blocks (with replication factor 1): 0
    Low redundancy blocks with highest priority to recover: 128
    Pending deletion blocks: 0
Erasure Coded Block Groups: 
    Low redundancy block groups: 0
    Block groups with corrupt internal blocks: 0
    Missing block groups: 0
    Low redundancy blocks with highest priority to recover: 0
    Pending deletion blocks: 0

-------------------------------------------------
Live datanodes (1):

Name: 192.168.8.69:9866 (datanode-ser)
Hostname: datanode-ser
Decommission Status : Normal
Configured Capacity: 152771162112 (142.28 GB)
DFS Used: 16464199680 (15.33 GB)
Non DFS Used: 14347759616 (13.36 GB)
DFS Remaining: 116573769728 (108.57 GB)
DFS Used%: 10.78%
DFS Remaining%: 76.31%
Configured Cache Capacity: 0 (0 B)
Cache Used: 0 (0 B)
Cache Remaining: 0 (0 B)
Cache Used%: 100.00%
Cache Remaining%: 0.00%
Xceivers: 0
Last contact: Tue Sep 02 21:48:26 CST 2025
Last Block Report: Tue Sep 02 15:57:55 CST 2025
Num of Blocks: 128

3.2 生成迁移计划

# 创建迁移计划
[hadoop@datanode-ser ~]$ hdfs diskbalancer -plan datanode-ser

# 生成的目录位置如下
[hadoop@datanode-ser ~]$ hdfs dfs -ls /system/diskbalancer/2025-Sep-02-15-52-14/
WARNING: HADOOP_PREFIX has been replaced by HADOOP_HOME. Using value of HADOOP_PREFIX.
Found 2 items
-rw-r--r--   2 hadoop supergroup        841 2025-09-02 15:52 /system/diskbalancer/2025-Sep-02-15-52-14/datanode-ser.before.json
-rw-r--r--   2 hadoop supergroup        885 2025-09-02 15:52 /system/diskbalancer/2025-Sep-02-15-52-14/datanode-ser.plan.json

3.3 执行迁移

[hadoop@datanode-ser ~]$ hdfs diskbalancer -execute /system/diskbalancer/2025-Sep-02-15-52-14/datanode-ser.plan.json

3.4 检查执行进度

[hadoop@datanode-ser ~]$ hdfs diskbalancer -query datanode-ser

3.5 停止迁移(可选)

# 如果发现磁盘或网络压力过大,可以随时停止:
[hadoop@datanode-ser ~]$ hdfs diskbalancer -cancel datanode-ser

3.6 限制迁移速率(推荐)

# 在业务低峰期执行,避免 I/O 瓶颈。
# 设置合适的带宽限制,避免占满磁盘 I/O:如10MB/s
<property>
  <name>dfs.disk.balancer.max.disk.throughputInMBperSec</name>
  <value>10</value>
</property>

4、至此迁移完成

标签: none

非特殊说明,本博所有文章均为博主原创。

上一篇 集群外部服务通过k8s代理出来
下一篇 没有了

评论已关闭