web-dev-qa-db-ja.com

使用されたHBASEスペースが急速に上昇し始めました

更新4,215:
hdfsのスペース使用量insideを調べたところ、.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クラスターでは、ディスクスペースがかなり急速に増加し始めました(挿入率が一貫していることがわかりますが)。

enter image description here

増加しているディスクはHDFSストレージディスクです。ディレクトリはほぼ均等なサイズです。

私のセットアップは、hdfsレプリケーションファクターが3の3台のマシンを持つHBASEクラスター(clouderaで作成)です。メインクラスターがレプリケートする単一のマシンを持つ別のクラスターもあります。レプリカは、これと同じ成長の変化を示していません。

enter image description here

マスターでスナップショットを撮っていますが、list_snapshots from hbase Shellは、1日以上戻っていないことを示しているので、それらは本来あるべきように淘汰されていると思います。私の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
7
Kyle Brandt

レプリケーションがうまくいかなかったと思います。 .oldlogsは、 このサファリ記事 に従ってログ先行書き込み(WALS)が行われる場所のようです。それらはクリーンアップする必要がありますが、何らかの理由でクリーンアップされませんでした。

私はそれをきれいにするために以下を使用しました:

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

レプリケーションターゲットとして置換クラスターを構築しているときにこれに気付いたので、今のところレプリケーションを停止しており、ディレクトリが無制限に成長しているようには見えません。これは私が今後監視するものです。特に、これは hbase issue 3489 によるとバグである可能性があるためです。

2
Kyle Brandt

HBaseはクラッシュセーフであり、.logsはクラッシュリカバリに必要なWAL(hlog)の場所です。 regionserversのメモリがhfilesにフラッシュされると、クラッシュリカバリにWALは不要になり、.oldlogsに移動されます。通常、古いログはクラスター間のレプリケーションに使用されます。 .oldlogsには、構成可能な保存期間があります(たとえば、3日)。この場合、何かがレプリケーションを壊した場合、再シードせずにレプリケーションを修正するために3日間の猶予があります。これが11月24日に何が起こって.oldlogsサイズが大きくなったのか、いつ.oldlogs内のhlogが自動的に削除されるのかを調査するのに役立つことを願っています

1