HBASE 使用空间开始快速攀升

Kyl*_*ndt 7 hdfs hbase opentsdb cloudera

更新 4,215:
查看hdfs内部的空间使用情况后,我发现 .oldlogs 使用了大量空间:

1485820612766  /hbase/.oldlogs
Run Code Online (Sandbox Code Playgroud)

所以新问题:

  • 它是什么?
  • 我该如何清理?
  • 我怎样才能让它不再生长
  • 是什么导致它首先开始增长?
  • .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 
Run Code Online (Sandbox Code Playgroud)

我的旅途:

在我存储 openTSBD 数据的 HBASE 集群上,我的磁盘空间开始相当快地攀升(尽管我可以看出我们的插入率一直是一致的):

在此处输入图片说明

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

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

在此处输入图片说明

我正在主服务器上拍摄快照,但是list_snapshots从 hbase 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
Run Code Online (Sandbox Code Playgroud)

Kyl*_*ndt 2

我认为我的复制失败了。根据这篇 safari 文章,我认为 .oldlogs 是预写日志(WALS)所在的位置。它们应该被清理掉,但由于某种原因没有被清理掉。

我使用以下方法来清理它:

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

由于我在构建替换集群作为复制目标时注意到了这一点,因此我暂时停止了复制,并且该目录似乎不再无限制地增长。这是我未来将监控的事情。特别是因为根据hbase issues 3489这似乎可能是一个错误。