web-dev-qa-db-ja.com

hbaseは既存のテーブルを見つけることができません

Opentsdbからのデータを格納するためにhbaseクラスターをセットアップしました。最近、一部のノードが再起動したため、hbaseはテーブル「tsdb」を失いました。 hbaseのマスターノードページでも引き続き使用できますが、クリックするとtableNotFoundExceptionが発生します

org.Apache.hadoop.hbase.TableNotFoundException: tsdb
    at org.Apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.locateRegionInMeta(HConnectionManager.Java:952)
    at org.Apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.locateRegion(HConnectionManager.Java:818)
    at org.Apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.locateRegion(HConnectionManager.Java:782)
    at org.Apache.hadoop.hbase.client.HTable.finishSetup(HTable.Java:249)
    at org.Apache.hadoop.hbase.client.HTable.<init>(HTable.Java:213)
    at org.Apache.hadoop.hbase.client.HTable.<init>(HTable.Java:171)
......

'tsdb'テーブルを見つけようとしてhbaseShellに入りましたが、同様のメッセージが表示されました

hbase(main):018:0> scan 'tsdb'
ROW                                                          COLUMN+CELL

ERROR: Unknown table tsdb!

しかし、このテーブルを再作成しようとすると、hbaseShellはテーブルがすでに存在することを教えてくれました...

hbase(main):013:0> create 'tsdb', {NAME => 't', VERSIONS => 1, BLOOMFILTER=>'ROW'}

ERROR: Table already exists: tsdb!

また、hbaseShellにテーブルを一覧表示することもできます

hbase(main):001:0> list
TABLE
tsdb
tsdb-uid
2 row(s) in 0.6730 seconds

ログを見てみると、これが私の問題の原因であることがわかりました

2012-05-14 12:06:22,140 WARN org.Apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation: Encountered problems when prefetch META table:
org.Apache.hadoop.hbase.TableNotFoundException: Cannot find row in .META. for table: tsdb, row=tsdb,,99999999999999
    at org.Apache.hadoop.hbase.client.MetaScanner.metaScan(MetaScanner.Java:157)
    at org.Apache.hadoop.hbase.client.MetaScanner.access$000(MetaScanner.Java:52)
    at org.Apache.hadoop.hbase.client.MetaScanner$1.connect(MetaScanner.Java:130)
    at org.Apache.hadoop.hbase.client.MetaScanner$1.connect(MetaScanner.Java:127)

.META。にtsbbの行が見つからないと表示されますが、.METAには確かにtsdbの行があります。

hbase(main):002:0> scan '.META.'
ROW                                                          COLUMN+CELL
 tsdb,\x00\x00\x0FO\xA2\xF1\xD0\x00\x00\x01\x00\x00\x0E\x00\ column=info:regioninfo, timestamp=1336311752799, value={NAME => 'tsdb,\x00\x00\x0FO\xA2\xF1\xD0\x00\x00\x01\x00\x00\x0E\x00\x00\x02\x00\x00\x12\x00\x00\x03\x00\x00\x13\x00\x00\x
 x00\x02\x00\x00\x12\x00\x00\x03\x00\x00\x13\x00\x00\x05\x00 05\x00\x001,1336311752340.7cd0d2205d9ae5fcadf843972ec74ec5.', STARTKEY => '\x00\x00\x0FO\xA2\xF1\xD0\x00\x00\x01\x00\x00\x0E\x00\x00\x02\x00\x00\x12\x00\x00\x03\x00\x00\x13\x00\
 \x001,1336311752340.7cd0d2205d9ae5fcadf843972ec74ec5.       x00\x05\x00\x001', ENDKEY => '\x00\x00\x10O\xA3\x8C\x80\x00\x00\x01\x00\x00\x0B\x00\x00\x02\x00\x00\x19\x00\x00\x03\x00\x00\x1A\x00\x00\x05\x00\x001', ENCODED => 7cd0d2205d9ae5f
                                                             cadf843972ec74ec5,}
 tsdb,\x00\x00\x0FO\xA2\xF1\xD0\x00\x00\x01\x00\x00\x0E\x00\ column=info:server, timestamp=1337011527000, value=brycobapd01.usnycbt.amrs.bankofamerica.com:60020
 x00\x02\x00\x00\x12\x00\x00\x03\x00\x00\x13\x00\x00\x05\x00
 \x001,1336311752340.7cd0d2205d9ae5fcadf843972ec74ec5.
 tsdb,\x00\x00\x0FO\xA2\xF1\xD0\x00\x00\x01\x00\x00\x0E\x00\ column=info:serverstartcode, timestamp=1337011527000, value=1337011518948
......

 tsdb-uid,,1336081042372.a30d8074431c6a31c6a0a30e61fedefa.   column=info:server, timestamp=1337011527458, value=bry200163111d.usnycbt.amrs.bankofamerica.com:60020
 tsdb-uid,,1336081042372.a30d8074431c6a31c6a0a30e61fedefa.   column=info:serverstartcode, timestamp=1337011527458, value=1337011519807
6 row(s) in 0.2950 seconds

これは、クラスターで「hbck」を実行した後の結果です。

ERROR: Region hdfs://slave-node-1:9000/hbase/tsdb/249438af5657bf1881a837c23997747e on HDFS, but not listed in META or deployed on any region server
ERROR: Region hdfs://slave-node-1:9000/hbase/tsdb/4f8c65fb72910870690b94848879db1c on HDFS, but not listed in META or deployed on any region server
ERROR: Region hdfs://slave-node-1:9000/hbase/tsdb/63276708b4ac9f11e241aca8b56e9def on HDFS, but not listed in META or deployed on any region server
ERROR: Region hdfs://slave-node-1:9000/hbase/tsdb/e54ee4def67d7f3b6dba75a3430e0544 on HDFS, but not listed in META or deployed on any region server
ERROR: (region tsdb,\x00\x00\x0FO\xA2\xF1\xD0\x00\x00\x01\x00\x00\x0E\x00\x00\x02\x00\x00\x12\x00\x00\x03\x00\x00\x13\x00\x00\x05\x00\x001,1336311752340.7cd0d2205d9ae5fcadf843972ec74ec5.) First region should start with an empty key.  You need to  create a new region and regioninfo in HDFS to plug the hole.
ERROR: Found inconsistency in table tsdb
Summary:
  -ROOT- is okay.
    Number of regions: 1
    Deployed on:  master-node,60020,1337011518948
  .META. is okay.
    Number of regions: 1
    Deployed on:  slave-node-2,60020,1337011519845
Table tsdb is inconsistent.
    Number of regions: 5
    Deployed on:  slave-node-2,60020,1337011519845 slave-node-1,60020,1337011519807 master-node,60020,1337011518948
  tsdb-uid is okay.
    Number of regions: 1
    Deployed on:  slave-node-1,60020,1337011519807
5 inconsistencies detected.
Status: INCONSISTENT

私は走った

bin/hbase hbck -fix

残念ながら私の問題は解決しません

誰かがこれについて私を助けてくれますか

  1. このテーブル「tsdb」を回復することは可能ですか?
  2. 1を実行できない場合、「tsdb」を適切に削除して新しいものを作成するための推奨される方法ですか?
  3. 誰かがノードを再起動するための最も提案された方法を教えてくれれば幸いです。現在、マスターノードは常に稼働しています。他のノードの場合、再起動直後にこのコマンドを実行します。

コマンド:

# start data node
bin/hadoop-daemon.sh start datanode
bin/hadoop-daemon.sh start jobtracker    
# start hbase
bin/hbase-daemon.sh start zookeeper
bin/hbase-daemon.sh start regionserver 

どうもありがとう!

18
Sheng

なぜスキャンできないのかよくわかりません。ただし、テーブルを再作成するには、次のことを試してください。

1)このテーブルの.METAテーブルのすべてのエントリを手動で削除し、

2)このテーブルに対応するディレクトリをHDFSから削除します

その後、もう一度テーブルを作成してみてください。

2
Hari Menon

少し遅れて、多分それは検索者に役立つでしょう。

  1. ZooKeeperシェルを実行しますhbase zkcli
  2. シェルでls /hbase/tableを実行します
  3. rmr /hbase/table/TABLE_NAMEを実行します
  4. Hbaseを再起動します
9
feng ce

Cdh4.3を使用している場合、zookeeperのパスは/ hbase/table94 /である必要があります

2
bubby

メタを修正してみてください

  1. hbase hbck
  2. hbase hbck -fixMeta
  3. hbase hbck -fixAssignments
  4. hbase hbck -fixReferenceFiles

後でもう一度やり直してください

1
CoolcoolT

@Devin Bayerの回答を拡張するには、次のコマンドを実行します。

delete /hbase/table/<name_of_zombie_table>

動物園の飼育係によって維持されているゾンビテーブルを見つけた場合。この問題の詳細については、「HBaseゾンビテーブル」をグーグルで検索する必要があります。

1

テーブルを削除するための詳細な手順:

~/hbase-0.94.12/bin/hbase Shell

> truncate 'tsdb'
> truncate 'tsdb-meta'
> truncate 'tsdb-uid'
> truncate 'tsdb-tree'
> exit

また、tsdデーモンを再起動する必要がありました。

私は職場でこれらの問題に直面しています。私は通常、znodeを削除して対応するテーブルを削除するか、HMasterとHregionserverの両方でhbaseを再起動して、hbckステータスをOKにします。

0
rakeeee

HBaseマシンにアクセスするためのJava特権を持たないマシンで、TCPクライアントからHBase接続を試行すると、同様のエラーメッセージが表示されます。 。HBaseマシン自体でhbaseShellを実行すると、テーブルが実際に存在します。

Opentsdbには、HBaseマシンにアクセスするためのすべての特権/ポート構成がありますか?

0
Bob Yoplait

指定したテーブルをZookeeperパスから削除するだけで十分です。たとえば、hbase-site.xmlでzookeeper.znode.parentblobに構成されている場合は、zkCli.sh zookeeperサーバーシェルで、そのディレクトリをrmr /blob/table/tsdbコマンド。

0
Malemi

hbase-clean.sh --cleanZk

それはうまく機能し、十分に単純です。

0
user4869334