Hadoop的磁盘写入策略引发的问题

本文探讨了Hadoop集群中,DataNode磁盘使用不均匀的问题,尤其是2T磁盘先被写满而4T磁盘利用率低的现象。分析了Hadoop的循环选取和可用空间两种写入策略的源码,指出hdfs3.0的diskbalancer虽能均衡数据,但因版本问题无法采用。解决方案包括数据清理、压缩和移盘。总结了问题原因,加强了对Hadoop磁盘监控和异常处理的理解。
摘要由CSDN通过智能技术生成

DataNode挂载的磁盘或者DataNode节点挂载多个磁盘,如果存在一些磁盘大小不一样,数据在落盘时就可能会出现磁盘使用率不均匀的情况,容量较小的盘容易被写满,而容量大的盘还剩很多空间。磁盘写满后,影响Hadoop集群的正常工作。国庆第一天,线上集群就报出了JournalNode挂掉的异常情况,经查是由于2T的磁盘被写满,JournalNode无法再写入数据。当时采取了临时的措施,删掉HBase和Hive中不用,占大量空间的表。磁盘使用率下降一部分后,重新启动JournalNode。

集群中每个DataNode都挂载了两个硬盘,分别为2T和4T的,2T基本都被写满,而4T的才50%多。是什么造成了这种数据落盘时的不均匀情况?本主要文调研了Hadoop的数据两种写入磁盘的策略,并分析了两种策略的主要源码实现,最后总结解决此次异常的经验。

两种写入策略

循环选取

循环选取策略是在hfds1.0中实现的,hdfs2.x默认沿用hfds1.x的方式
hdfs2.0默认沿用hfds1.0的方式,按照循环的策略,数据会均匀的落在不同大小的盘上,大磁盘和小磁盘存储的块是一样的,导致小的磁盘最先被写满。

可用空间策略

hdfs2.0也提供了另一种策略,将数据优先写入具有最大可用空间。通过一个概率计算出选择写入的磁盘,磁盘剩余空间大的将会获得更大的写入概率,这样磁盘的使用率就会相对均匀。

两种方案的对比图如下,图来源于链接,能够很清楚的看出两种策略的不同。
这里写图片描述
hdfs3.0提供了一个在线磁盘均衡器diskbalancer ,能在不停机的情况下,对数据进行均衡操作。但是hadoop3.0仍是一个测试版本,因此不可能进行升级。

源码分析

循环选取策略

循环选取的策略很简单,循环扫描整个Volumes,如果availableVolumeSize大于blockSize ,即返回该volume。为了保证每次选择的起点都不是从头开始,导致数据写满一个盘后再写另一个盘,使用了一个curVolumes定位器来防止这个问题。

int curVolume = cur
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值