![HBASE 空间使用量开始快速攀升](https://linux22.com/image/647274/HBASE%20%E7%A9%BA%E9%97%B4%E4%BD%BF%E7%94%A8%E9%87%8F%E5%BC%80%E5%A7%8B%E5%BF%AB%E9%80%9F%E6%94%80%E5%8D%87.png)
更新 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_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
答案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