微信号:xqbedu
介绍:最专业的网络虚拟教室,为专家和名师提供课程定制和推广服务,为学员提供平等的学习环境.公司网站www.xqbedu.com
HBASE集群HDFS存储不均衡的解决记录
问题描述:hbase集群,hdfs有5台服务器的存储空间占用很高,如下图
问题解决思路:
1:hbase集群出现hdfs存储不均衡的问题首先要考虑Hbase数据倾斜要看hbase是否倾斜就要看region的分布是否均衡,再看大表数据块是否均衡,检查发现hbase数据很均衡,排除hbase的问题,具体查看如下图:
2:排除hbase数据倾斜问题后,发现存储占用比较高的5台服务器block块巨多,几乎是其它的两倍,那么数据没出现倾斜,为什么block块这么高的?就要考虑这5台服务器上是不是跑着一些MR等任务,因为这些任务在Shuffle等过程会将中间过程的数据存储在本地,所以要找有没有一些跑的任务,经检查也没有任务,如下图:
5台服务器block的分布如下图:
3:排除以上两个问题后,就要检查Ip或者机架的分布了,执行hadoop dfsadmin –printTopology发现13台机器,8台属于一个机架,令5台属于一个机架,正好这一个机架的5台服务器存储很高,那么问题就出来了,根据hdfs的三备份机制,第二份数据是先备份到同一机架的最近的一台服务器,第三份数据要备份在不同机架的任一服务器,也就是那8台服务器要往这5台上面备份,那么这5台的存储必然很高。
如何解决呢:
1:去掉hadoop的机架感知配置,core.xml中net.topology.script.file.name配置去掉,建议apache这样改。
2:把那5台服务器挪到另一机架上面去,这样13台属于同一机架。(采用这种)
然后最后要重启hdfs服务,再对大表数据做major_compact操作,均衡数据。 这里一定是一个表一个表的做,因为很费io和存储。
Hadoop机架感知如下图:
总结:hdfs存储不均衡的问题最终定位到由于服务器属于不同机架,依据hdfs数据块三备份的机制造成的问题。所以在后续再搭建集群时,要注意到机架的分布对集群所造成的影响。