HDFS系列之DataNode磁盘管理解析及实践!

在单一DataNode管理多个磁盘的情况下,执行普通写操作时的每个磁盘用量比较平均。但是,添加或者更换磁盘将会导致DataNode磁盘用量严重不均衡,传统的HDFS均衡器关注点是DataNode之间(inter-)而不是intra-,但是Hadoop 3.0及以上版本中,新的HDFS Intra-DataNode磁盘平衡器可以很好得解决上述问题。

HDFS现在包括(在CDH 5.8.2及更高版本中提供)全面的存储容量管理方法,用于跨节点移动数据。熟悉Hadoop简单配置的同学应该都知道hdfs-site.xml,在HDFS中,DataNode将数据块扩展到本地文件系统目录,可以使用hdfs-site.xml中的dfs.datanode.data.dir指定。在一个典型的安装过程中,每个目录(在HDFS术语中称作卷)位于不同的设备上(例如,在单独的HDD和SSD上)。

当我们将新块写入HDFS时,DataNode使用卷选择策略为块选择磁盘。目前支持两种策略类型:轮询(round-robin)和可用空间(available space)(HDFS-1804)。

简而言之,如上图所示,轮询策略在可用磁盘上均匀分配新块,而可用空间策略优先将数据写入具有最多可用空间(按百分比)的磁盘。

默认情况下,DataNode使用基于轮询的策略来编写新块。但是,在长时间运行的集群中,由于HDFS中的大量文件删除或通过磁盘热交换功能添加新的DataNode磁盘等事件,DataNode仍然可能创建了显著不平衡的卷。即使使用基于可用空间的卷选择策略,卷不平衡现象仍然会导致磁盘I/O效率降低:例如,每个新的写入都转到新添加的空磁盘而其他磁盘空闲,这会给新磁盘造成瓶颈。

Apache Hadoop社区开发了服务器脱机脚本以缓解数据不平衡问题。但是,由于在HDFS代码库之内,这些脚本要求DataNode在磁盘间移动数据前处于脱机状态。因此,HDFS-1312引入了在线磁盘平衡器,旨在根据各种指标重新平衡正在运行的DataNode上的卷。与HDFS Balancer类似,HDFS磁盘平衡器作为DataNode中的线程运行,以跨具有相同存储类型的卷移动块文件。

磁盘平衡器101

让我们使用示例逐步探索该功能。首先,确认所有DataNode上的dfs.disk.balancer.enabled配置都设置为true。从CDH 5.8.2开始,用户可以通过Cloudera Manager中的HDFS安全阀片段指定此配置:

在此示例中,我们将向预加载的HDFS DataNode(/ mnt / disk1)添加新磁盘,并将新磁盘装入/mnt/disk2。在CDH中,每个HDFS数据目录都在一个单独的磁盘上,因此用户可以使用df来显示磁盘使用情况:


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

显然,是时候让磁盘再次平衡!传统的磁盘平衡器任务涉及三个步骤(通过HDFS diskbalancer命令实现):计划,执行和查询。在第一步中,HDFS客户端从NameNode读取有关指定DataNode的必要信息,以生成执行计划:


# 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

从输出中可以看出,HDFS 磁盘平衡器通过数据节点将磁盘使用信息报告给NameNode,并计算指定DataNode上的数据移动步骤。每个步骤都指定要移动数据的源卷和目标卷,以及预期要移动的数据量。

在撰写本文时,HDFS支持的唯一规划器是GreedyPlanner,它不断地将数据从最常用的设备移动到最少使用的设备,直到所有数据均匀分布在所有设备上。用户还可以在plan命令中指定空间利用率的阈值,如果空间利用率的差异低于阈值,则规划人员会认为磁盘是平衡的。(另一个值得注意的选择是通过在规划过程中指定--bandwidth来限制磁盘平衡器任务I / O,以免磁盘平衡器I/O影响前台工作。)

磁盘平衡器执行计划生成为存储在HDFS中的JSON文件。默认情况下,计划文件存储在/system/diskbalancer目录中:


# 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

要在DataNode上执行计划,请运行:


$ 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

此命令用于将JSON计划文件提交给DataNode,后者在BlockMoverthread线程的后台执行。

要检查DataNode上diskbalancer任务的状态,请使用query命令:


# hdfs diskbalancer -query lei-dn-3:20001 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%以下,那就意味着任务完成了。

结论

凭借HDFS-1312中的DataNode内部磁盘平衡器功能,CDH 5.8.2及更高版本中的HDFS提供了一个全面的存储容量管理解决方案,该解决方案能够跨越节点(balancer),存储类型(mover), 在单个DataNode的磁盘(Disk Balancer)移动数据。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/31077337/viewspace-2199954/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/31077337/viewspace-2199954/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值