HBASE 空间使用量开始快速攀升

HBASE 空间使用量开始快速攀升

更新 4215:
查看空间使用情况后里面在 hdfs 中,我发现 .oldlogs 占用了大量空间:

1485820612766  /hbase/.oldlogs

新问题:

  • 它是什么?
  • 我该如何清理它?
  • 我该如何防止它再次生长
  • 是什么促使它开始生长?
  • 此外 .archive 也很大,那是什么,我的快照?

另外,作为家庭作业,scollector 将不会监控各种 hdfs 目录的磁盘空间使用情况....

另外,看起来以下错误在那个时候开始反复填充日志,不确定它们到底意味着什么:

2014-11-25 01:44:47,673 FATAL org.apache.hadoop.hbase.regionserver.wal.HLog: Could not sync. Requesting close of hlog
java.io.IOException: Reflection
    at org.apache.hadoop.hbase.regionserver.wal.SequenceFileLogWriter.sync(SequenceFileLogWriter.java:310)
    at org.apache.hadoop.hbase.regionserver.wal.HLog.syncer(HLog.java:1405)
    at org.apache.hadoop.hbase.regionserver.wal.HLog.syncer(HLog.java:1349)
    at org.apache.hadoop.hbase.regionserver.wal.HLog.sync(HLog.java:1511)
    at org.apache.hadoop.hbase.regionserver.wal.HLog$LogSyncer.run(HLog.java:1301)
    at java.lang.Thread.run(Thread.java:744)
Caused by: java.lang.reflect.InvocationTargetException
    at sun.reflect.GeneratedMethodAccessor30.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.apache.hadoop.hbase.regionserver.wal.SequenceFileLogWriter.sync(SequenceFileLogWriter.java:308)
    ... 5 more
Caused by: java.io.IOException: Failed to add a datanode.  User may turn off this feature by setting dfs.client.block.write.replace-datanode-on-failure.policy in configuration, where the current policy is DEFAULT.  (Nodes: current=[10.7.0.231:50010, 10.7.0.233:50010], original=[10.7.0.231:50010, 10.7.0.233:50010])
    at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.findNewDatanode(DFSOutputStream.java:857)
    at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.addDatanode2ExistingPipeline(DFSOutputStream.java:917)
    at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.setupPipelineForAppendOrRecovery(DFSOutputStream.java:1023)
    at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.processDatanodeError(DFSOutputStream.java:821)
    at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.run(DFSOutputStream.java:463)
2014-11-25 01:44:47,673 ERROR org.apache.hadoop.hbase.regionserver.wal.HLog: Error while syncing, requesting close of hlog 

我的旅程:

在存储 openTSBD 数据的 HBASE 集群上,我的磁盘空间开始相当快速地增加(尽管据我所知我们的插入率一直很稳定):

在此处输入图片描述

正在增加的磁盘是 HDFS 存储磁盘。目录的大小大致均匀。

我的设置是一个 HBASE 集群(由 cloudera 制作),它有 3 台机器,hdfs 复制因子为 3。还有另一个集群,其中有一台机器,主集群复制到该集群。副本没有显示相同的增长变化:

在此处输入图片描述

我正在对主服务器进行快照,但从list_snapshotshbase shell 中看不到任何超过一天的快照,所以我认为这些快照被剔除了,这是理所当然的。我的 hbase 体验不是很好,还有什么建议可以查看吗?

取得进展...

[root@ny-tsdb01 ~]# hadoop fs -dus /hbase/*
dus: DEPRECATED: Please use 'du -s' instead.
3308  /hbase/-ROOT-
377401  /hbase/.META.
220097161480  /hbase/.archive
0  /hbase/.corrupt
1537972074  /hbase/.logs
1485820612766  /hbase/.oldlogs
8948367  /hbase/.snapshot
0  /hbase/.tmp
38  /hbase/hbase.id
3  /hbase/hbase.version
192819186494  /hbase/tsdb
905  /hbase/tsdb-meta
899  /hbase/tsdb-tree
1218051  /hbase/tsdb-uid

答案1

我认为我的复制出了问题。根据以下信息,我似乎认为 .oldlogs 是预写日志 (WALS) 存放的地方:这篇关于 Safari 的文章。应该清理掉但是由于某些原因并没有清理。

我使用下面的方法来清理它:

HADOOP_USER_NAME=hdfs hadoop fs -rm -skipTrash /hbase/.oldlogs/*

自从我在构建替代集群作为复制目标时注意到这一点后,我暂时停止了复制,而且目录似乎不再无限增长。这是我今后将密切关注的事情。特别是因为根据hbase 问题 3489

答案2

HBase 是崩溃安全的,.logs 是崩溃恢复所需的 WAL(hlogs)的位置。一旦区域服务器的内存被刷新到 hfiles,崩溃恢复就不再需要 WALs,它们将被移动到 .oldlogs。旧日志通常用于集群到集群的复制。.oldlogs 有一个可配置的保留期,例如 3 天。在这种情况下,如果复制出现问题,那么您有 3 天的时间来修复复制,而无需重新播种。希望这有助于调查 11 月 24 日发生的事情,导致 .oldlogs 大小增长,以及何时会自动删除 .oldlogs 中的 hlogs

相关内容