web-dev-qa-db-ja.com

HBaseテーブルを修復します(移行中の未割り当て領域)

障害のあるテーブルの修復に少し行き詰まっています(Hbase 0.92.1-cdh4.0.0、Hadoop 2.0.0-cdh4.0.0)

終了しない移行中の領域があります。

Region    State
bf2025f4bc154914b5942af4e72ea063 counter_traces,1329773878.35_766a0b4df75e4381a686fbc07db9e333,1339425291230.bf2025f4bc154914b5942af4e72ea063. state=OFFLINE, ts=Tue Jun 12 11:43:53 CEST 2012 (0s ago), server=null

Sudo -u hbase hbase hbck -repairを実行すると、次のようになります。

Number of empty REGIONINFO_QUALIFIER rows in .META.: 0
ERROR: Region { meta => counter_traces,1329773878.35_766a0b4df75e4381a686fbc07db9e333,1339425291230.bf2025f4bc154914b5942af4e72ea063., hdfs => hdfs://hbase001:8020/hbase/counter_traces/bf2025f4bc154914b5942af4e72ea063, deployed =>  } not deployed on any region server.
Trying to fix unassigned region...
12/06/12 11:44:40 INFO util.HBaseFsckRepair: Region still in transition, waiting for it to become assigned: {NAME => 'counter_traces,1329773878.35_766a0b4df75e4381a686fbc07db9e333,1339425291230.bf2025f4bc154914b5942af4e72ea063.', STARTKEY => '1329773878.35_766a0b4df75e4381a686fbc07db9e333', ENDKEY => '1329793347.58_163865765c0a11e184ab003048f0e77e', ENCODED => bf2025f4bc154914b5942af4e72ea063,}

そしてそれはただループします。

-repairを実行しないと、次のようになります。

Number of empty REGIONINFO_QUALIFIER rows in .META.: 0
ERROR: Region { meta => counter_traces,1329773878.35_766a0b4df75e4381a686fbc07db9e333,1339425291230.bf2025f4bc154914b5942af4e72ea063., hdfs => hdfs://hbase001:8020/hbase/counter_traces/bf2025f4bc154914b5942af4e72ea063, deployed =>  } not deployed on any region server.
ERROR: Region { meta => counter_traces,1329816776.95_95b5561f3c1e496598421359a19ac665,1339425297099.ee1fd808d954c9adc9ed95ec2f29d119., hdfs => hdfs://hbase001:8020/hbase/counter_traces/ee1fd808d954c9adc9ed95ec2f29d119, deployed =>  } not deployed on any region server.
12/06/12 11:45:59 DEBUG util.HBaseFsck: There are 134 region info entries
ERROR: There is a hole in the region chain between 1329773878.35_766a0b4df75e4381a686fbc07db9e333 and 1329793347.58_163865765c0a11e184ab003048f0e77e.  You need to create a new .regioninfo and region dir in hdfs to plug the hole.
ERROR: There is a hole in the region chain between 1329816776.95_95b5561f3c1e496598421359a19ac665 and 1329847231.75_b3c50776778b43e088dd7ed865e11331.  You need to create a new .regioninfo and region dir in hdfs to plug the hole.
ERROR: Found inconsistency in table counter_traces

-repairを数回実行したことがありますが、役に立ちました。しかし、今回はもうありません。

さて、これはこれを修正するために手動介入を行うことを述べています。誰かがこれを行う方法について正しい方向に私を向けることができますか?レシピ、ウェブページ、例、何でも役に立ちます。

ありがとう、マリオ

12
Mario

マリオ、

したがって、リージョンが移行でスタックする理由の1つは、リージョンサーバー間で移動されるときに、ソースリージョンサーバーから割り当てられていないが、別のリージョンサーバーに割り当てられていないためです。私にとって常に機能する修正の1つは、hbaseシェルから強制的に割り当てることです:-

assign regionName
15
sulabhc

地域を強制的に割り当てようとしましたが、うまくいきませんでした。私は以下を試しましたが、うまくいきました:

手順:

  • Hbaseシェルからテーブルを無効にする
  • 次のコマンドを使用してhbckを実行し、問題を修正します

    Sudo -u hbase hbase hbck -repair

  • HbaseShellからテーブルを有効にする

3
hp36

HBaseのバージョンが十分に新しい場合は、-repairだけでなくhbck-repairHolesを試すこともできます。それは最近の「穴を修正する」問題で私のためにトリックをしました。

1
omeyn

私は同じ問題を抱えていました

  • Ambariを介してすべてのサービスを開始している間、HDFSはセーフモードに移行し、長時間戻ってきませんでした。
  • HFDSが長時間セーフモードであったため、他のサービスは開始されませんでした。セーフモードからHDFSを手動で削除し、サービスを開始しようとしました。これにより、hbaseに影響を与えるいくつかのHDFSファイルが破損したようです。
  • 既存のテーブルをスキャンすると、「不明なテーブルエラー」が返されました
  • 新しい名前空間を作成すると、以下のエラーが返されます。

create_namespace'tst1 'エラー:Java.io.IOException:テーブル名前空間マネージャーが完全に初期化されていません。後で再試行してください

「hbasehbck-repair」

「エラー:との間のリージョンチェーンに穴があります。穴を塞ぐには、hdfsに新しい.regioninfoとリージョンディレクトリを作成する必要があります」が返されました。

「hbasehbck-repairHoles」を実行すると、問題が修正されました。以前に保存したデータもスキャンできました。

注:-hbase hbckコマンドはhbaseユーザーから実行する必要があります

1
Vinay MP

まず、hdfsにその特定の領域のファイルがあるかどうかを確認する必要があります。

ある場合は、修正されるまでhbck -fixHdfsHoles-fixMetaのみを使用する必要があります。 (2、3回試す必要があるかもしれません)。

移行中の領域にそのようなファイルがない場合(/ hbase/data ///の下にある必要があります)、HBaseは、そのディレクトリにその領域に有効なHFileがあるはずであると見なし、それを修正することはできません。通常の修復コマンド。

ここで最新の応答の1つにあることを実行し、hdfsで有効なHFileを作成する必要があります。

http://comments.gmane.org/gmane.comp.Java.hadoop.hbase.user/31308

1
user3794759

私の場合、別のクラスターからコピーされたリージョンデータの所有者を変更するのを忘れています。

次に、hbase hbck -repairを実行しようとしましたが、INFO util.HBaseFsckRepair: Region still in transition, waiting for it to become assignedを取得すると、エラーが表示されますUnable to complete check or repair the region, failed to move out of transition within timeout 120000ms

hbase:metaにはすでに地域情報があります。

テーブルをスキャンしているときに、次のようなエラーが発生します

ERROR: No server address listed in hbase:meta for region X

次に、hbase hbck -fixAssignmentsを試しますが、以前と同じように失敗します。

次に、テーブル領域データを確認し、このテーブル自体とグループのみが

drwxr-xr-x   - hdfs  hbase

しかし、他のこのような

drwxr-xr-x - hbase hbase

そのため、自分自身とグループを他の人として変更した後、問題は解決しました。これで、テーブルを正常にスキャンできます。

0
Matiji66

私も同じ問題を抱えていました。 1つのリージョンがRegion still in transition, waiting for it to become assigned:でスタックしました。すべてのオプションですべてのリージョンが割り当てられている必要があるため、-repairオプションはいずれも機能しませんでした。

Hdfsからリージョンを削除する必要がありました。 hdfs$ hdfs dfs -rm -r /hbase/data/default/<table>/<region>

リージョンを削除した後、すべての-repairオプションは機能しましたが、飼育係のキャッシュが原因で、リージョンはまだ移行中であると報告されました。

として FAILED_OPEN状態で打たれたHBASEの領域を取得する方法は? zookeeperから遷移キャッシュを削除し、HBASEマスターを再起動すると、すべて問題ありませんでした。

0
banuj