HDFS中DataNode磁盘如何管理

这篇文章将为大家详细讲解有关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)。

HDFS中DataNode磁盘如何管理

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

默认情况下,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磁盘如何管理

在此示例中,我们将向预加载的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中DataNode磁盘如何管理”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。


当前题目:HDFS中DataNode磁盘如何管理
浏览路径:http://ybzwz.com/article/geiocc.html