CDH使用Disk Balancer平衡磁盘HDFS数据

本文介绍了如何在Hadoop集群中启用和使用磁盘平衡器,以解决磁盘空间不平衡的问题。通过配置HDFS参数,生成并执行磁盘平衡任务,然后查询任务状态,确保数据在集群内的磁盘间达到平衡。该过程涉及到HDFS的高级配置、磁盘平衡计划的生成和执行,以及任务完成后的验证步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

当集群磁盘空间不足时,需要增加新硬盘到机器,此时新加入的磁盘空间基本为空,而旧磁盘则已占用很多。网上则是通过增减副本的方式达到磁盘平衡方式,但如果磁盘空间大小本身不一致,通过该方法平衡后,磁盘空间不平衡情况依然存在。从 CDH 5.8.2 开始,Cloudera Manager提供了一个全面的存储容量管理解决方案,可以跨节点 (Balancer)、存储类型(Mover)和单个DataNode中的磁盘(磁盘平衡器)。

启用磁盘平衡器

在HDFS配置中搜索safety valve,在HDFS服务高级配置代码段(安全阀)创建名称为dfs.disk.balancer.enabled,值为true的键值对。
启用磁盘级数据平衡

生成磁盘平衡器任务

假设目前有disk1和disk2两个磁盘,其占用率分别为:

# df -h
….
/var/disk1      5.8G  3.6G  1.9G  66% /mnt/disk1
/var/disk2      5.8G   13M  5.5G   1% /mnt/disk2

显然上述两个磁盘需要进行磁盘平衡,假设要平衡的主机名称为lei-dn-3.example.org,通过如下命令可以生成磁盘平衡任务:

# hdfs diskbalancer -plan lei-dn-3.example.org
16/08/19 18:04:01 INFO planner.GreedyPlanner: Starting plan for Node : lei-dn-3.example.org:20001
16/08/19 18:04:01 INFO planner.GreedyPlanner: Disk Volume set 03922eb1-63af-4a16-bafe-fde772aee2fa Type : DISK plan completed.Th
16/08/19 18:04:01 INFO planner.GreedyPlanner: Compute Plan for Node : lei-dn-3.example.org:20001 took 5 ms
16/08/19 18:04:01 INFO command.Command: Writing plan to : /system/diskbalancer/2016-Aug-19-18-04-01

默认生成任务的目录为/system/diskbalancer/{时间}/{机器名}.plan.json

注意:任务生成的目录是在HDFS的文件系统内,而不是本机目录。

通过如下命令可以查询生成的JSON文件:

# hdfs dfs -ls /system/diskbalancer/2016-Aug-19-18-04-01
Found 2 items
-rw-r--r--   3 hdfs supergroup       1955 2016-08-19 18:04 /system/diskbalancer/2016-Aug-19-18-04-01/lei-dn-3.example.org.before.json
-rw-r--r--   3 hdfs supergroup        908 2016-08-19 18:04 /system/diskbalancer/2016-Aug-19-18-04-01/lei-dn-3.example.org.plan.json

-ls后面跟着的是上一步生成计划的时间,可以看到有格式如{机器名}.plan.json文件夹(不是一个文件)。

执行磁盘平衡任务

$ hdfs diskbalancer -execute /system/diskbalancer/2016-Aug-17-17-03-56/172.26.10.16.plan.json
16/08/17 17:22:08 INFO command.Command: Executing "execute plan" command

此命令将磁盘平衡任务提交给 DataNode,后者会在后台 BlockMover 线程中执行。

查询磁盘平衡任务是否完成

# hdfs diskbalancer -query lei-dn-3.example.org
16/08/19 21:08:04 INFO command.Command: Executing "query plan" command.
Plan File: /system/diskbalancer/2016-Aug-19-18-04-01/lei-dn-3.example.org.plan.json
Plan ID: ff735b410579b2bbe15352a14bf001396f22344f7ed5fe24481ac133ce6de65fe5d721e223b08a861245be033a82469d2ce943aac84d9a111b542e6c63b40e75
Result: PLAN_DONE

输出 (PLAN_DONE) 表示磁盘平衡任务已完成。为验证磁盘平衡器的有效性,可再次使用df -h命令查看两个本地磁盘之间的数据分布情况。

# df -h
Filesystem      Size  Used Avail Use% Mounted on
….
/var/disk1      5.8G  2.1G  3.5G  37% /mnt/disk1
/var/disk2      5.8G  1.6G  4.0G  29% /mnt/disk2

默认磁盘平衡器达到配置文件中的重新平衡阈值,则视为数据已平衡完毕。默认阈值为10.0,即磁盘空间占用偏差在10%以内,则认为磁盘平衡任务已完成。

参考来源

How-to: Use the New HDFS Intra-DataNode Disk Balancer in Apache Hadoop

CDHCloudera Distribution for Hadoop)环境中,重新平衡HDFS数据分布是一个常见的运维任务,尤其是在集群扩容或节点故障恢复后。以下是一些关键步骤和注意事项: ### 1. **检查当前的数据分布** 在进行重新平衡之前,首先需要了解当前HDFS数据分布情况。可以通过以下命令查看各DataNode上的存储使用情况: ```bash hdfs dfsadmin -report ``` 这条命令会显示每个DataNode的容量、已用空间、剩余空间等信息。 ### 2. **启用HDFS平衡器** HDFS内置了一个再平衡工具,可以自动将数据块从负载较高的节点迁移到负载较低的节点。要启动再平衡过程,可以使用以下命令: ```bash hdfs balancer ``` 默认情况下,再平衡器会尝试将每个DataNode的使用率控制在平均值的10%以内。如果需要调整这个阈值,可以使用`-threshold`参数: ```bash hdfs balancer -threshold 5 ``` 这里的`5`表示允许的最大偏差为5%[^2]。 ### 3. **配置再平衡器的带宽限制** 再平衡过程中可能会占用大量的网络带宽,影响其他服务的性能。为了控制再平衡的速度,可以在`hdfs-site.xml`中设置`dfs.datanode.balance.bandwidthPerSec`参数,指定每个DataNode用于再平衡的最大带宽(单位为字节/秒)。例如: ```xml <property> <name>dfs.datanode.balance.bandwidthPerSec</name> <value>10485760</value> <!-- 10 MB/s --> </property> ``` ### 4. **监控再平衡进度** 再平衡过程可能需要较长时间,具体取决于集群的规模和数据量。可以通过以下命令查看再平衡的进度: ```bash hdfs balancer -status ``` 这条命令会显示当前的再平衡状态,包括已经迁移的数据量、预计剩余时间等信息。 ### 5. **处理特殊场景** 如果某些节点由于硬件故障或其他原因导致数据丢失,可能需要手动干预来恢复数据副本。可以通过以下命令检查文件系统的健康状况: ```bash hdfs fsck / -files -blocks ``` 对于缺失副本的文件,可以使用`hdfs fsck`命令修复: ```bash hdfs fsck /path/to/file -repair ``` ### 6. **优化再平衡策略** 在某些情况下,可能需要根据业务需求调整再平衡的策略。例如,避免在高峰时段运行再平衡,或者优先保证某些关键任务的数据分布均衡。可以通过编写自定义脚本或使用调度工具(如Cron)来控制再平衡的时间和频率。 ### 7. **使用Ambari进行管理** 如果你正在使用Ambari作为集群管理工具,可以通过其图形界面更方便地监控和管理HDFS平衡。Ambari提供了直观的仪表盘,能够实时展示集群的状态,并支持一键启动再平衡操作[^3]。 通过以上步骤,可以在CDH环境下有效地重新平衡HDFS数据分布,确保集群的高效运行和资源利用率。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值