Hadoop的磁盘大小不一导致节点挂掉

当Hadoop DataNode节点的磁盘大小不一致时,可能导致磁盘使用不均,小磁盘空间耗尽,影响集群正常运行。解决方案包括数据清理、压缩或手动移盘。可用空间策略和循环选取策略决定了数据如何落盘。可通过调整Hadoop配置文件,如设置`dfs.datanode.fsdataset.volume.choosing.policy`,来改善磁盘利用率。

问题描述

DataNode挂载的磁盘或者DataNode节点挂载多个磁盘,如果存在一些磁盘大小不一样,数据在落盘时就可能会出现磁盘使用率不均匀的情况,容量较小的盘容易被写满,而容量大的盘还剩很多空间。磁盘写满后,影响Hadoop集群的正常工作。

建好集群后需要将历史记录导入到hbase中,而集群中有三台主机外接了磁盘阵列,主机磁盘阵列大小四十多G,磁盘阵列大概1.6个T。运行将数据写入hbase的程序,第二天发现集群挂掉了两个节点。用df查看各个磁盘使用情况,发现主机系统盘使用率100%!!!外接磁盘阵列使用率才3%。由于主机系统盘几乎没有剩余磁盘空间,导致操作系统也不能正常使用:tab键补全命令不能使用,vim打开文件报错等等。

解决方案

于是先解决燃眉之急,网上提供的解决办法有三种:

  1. 数据清理:此方法属于紧急措施:清理掉hdfs中不用的数据 
  2. 数据压缩:手动压缩部分数据,对于HBase可使用GZ压缩方式,能快速有效的降低磁盘使用率 
  3. 数据移盘:手动进行数据的移动,将部分数据由写满的盘移动到其它盘

我选择了第三种解决办法,主要有三步操作:

  1. 关闭DataNode节点 
  2. 使用mv命令移动数据,要绝对保证移动后的数据相对目录与移动前一致,如移动前usr/local/hadoop/tmp/dfs/data/current/BP-22769690-172.16.0.100-1541402558553/current/finalized/subdir0/subdir0,移动后为home/dfs/data/current/BP-22769690-172.16.0.100-1541402558553/current/finalized/subdir0/subdir0(注意:路径格式应该保持严格一致;而且subdir0目录下一共有32个subdir文件,从subdir0到subdir31,我选择是将其都移出去)
  3. 重启DataNode;sbin/hadoop-daemon.sh start datanode;sbin/yarn-daemon.sh start nodemanager

可以参考 https://wiki.apache.org/hadoop/FAQ#On_an_individual_data_node.2C_how_do_you_balance_the_blocks_on_the_disk.3F 

总结

是什么原因造成了数据落盘时的不均匀情况?本主要文调研了Hadoop的数据两种写入磁盘的策略:循环选取策略和可用空间策略。

循环选取策略

循环选取的策略很简单,循环扫描整个Volumes,如果availableVolumeSize大于blockSize ,即返回该volume。按照循环的策略,数据会均匀的落在不同大小的盘上,大磁盘和小磁盘存储的块是一样的,导致小的磁盘最先被写满。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值