복붙노트

[HADOOP] hbase는 기존 테이블을 찾을 수 없습니다.

HADOOP

hbase는 기존 테이블을 찾을 수 없습니다.

내가 opbasedb에서 데이터를 저장할 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)
......

hbase 쉘에 입력하여 'tsdb'테이블을 찾으려고 시도했지만 비슷한 메시지가 나타납니다.

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

ERROR: Unknown table tsdb!

그러나이 테이블을 다시 만들려고 할 때, hbase 쉘은 이미 테이블이 존재한다고 말했습니다 ...

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

ERROR: Table already exists: tsdb!

또한 hbase 쉘에 테이블을 나열 할 수 있습니다.

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

불행히도 내 문제를 해결하지 못한다.

누군가 나를 도와 줄 수 있니?

명령:

# 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 

많은 감사!

해결법

  1. ==============================

    1.왜 스캔 할 수 없는지 잘 모르겠습니다. 그러나 테이블을 다시 작성하려면 다음을 시도하십시오.

    왜 스캔 할 수 없는지 잘 모르겠습니다. 그러나 테이블을 다시 작성하려면 다음을 시도하십시오.

    1)이 테이블에 대한 .META 테이블의 모든 항목을 수동으로 삭제하고

    2)이 테이블에 해당하는 디렉토리를 HDFS에서 삭제합니다.

    그 후에 테이블을 다시 만들어보십시오.

  2. ==============================

    2.조금 늦었습니다. 아마도 검색 자에게 도움이 될 것입니다.

    조금 늦었습니다. 아마도 검색 자에게 도움이 될 것입니다.

  3. ==============================

    3.cdh4.3을 사용하고 있다면 사육사의 경로는 / hbase / table94 /

    cdh4.3을 사용하고 있다면 사육사의 경로는 / hbase / table94 /

  4. ==============================

    4.@Devin Bayer의 답변을 확장하려면 다음을 실행하십시오.

    @Devin Bayer의 답변을 확장하려면 다음을 실행하십시오.

    delete /hbase/table/<name_of_zombie_table>
    

    사육사가 관리하는 좀비 테이블을 발견하면 이 문제에 대한 도움이 필요하면 google 'HBase zombie tables'를 참조하십시오.

  5. ==============================

    5.메타를 고치려고

    메타를 고치려고

    후에 다시 시도하십시오.

  6. ==============================

    6.표 삭제에 대한 추가 지침 :

    표 삭제에 대한 추가 지침 :

    ~/hbase-0.94.12/bin/hbase shell
    
    > truncate 'tsdb'
    > truncate 'tsdb-meta'
    > truncate 'tsdb-uid'
    > truncate 'tsdb-tree'
    > exit
    

    또한 tsd 데몬을 다시 시작해야했습니다.

  7. ==============================

    7.HBase 시스템에 액세스 할 수있는 TCP 권한이없는 시스템에서 Java 클라이언트의 HBase 연결을 시도 할 때 유사한 오류 메시지가 나타납니다. 실제로 HBase 시스템 자체에서 hbase 쉘을 사용할 때 표가 실제로 존재합니다.

    HBase 시스템에 액세스 할 수있는 TCP 권한이없는 시스템에서 Java 클라이언트의 HBase 연결을 시도 할 때 유사한 오류 메시지가 나타납니다. 실제로 HBase 시스템 자체에서 hbase 쉘을 사용할 때 표가 실제로 존재합니다.

    opentsdb에 HBase 시스템에 액세스하기위한 모든 권한 / 포트 구성이 있습니까?

  8. ==============================

    8.나는 직장에서 이러한 문제에 직면 해있다. 나는 일반적으로 z 노드를 삭제하고 해당 테이블을 제거하거나 HMbase와 Hregionserver를 모두 다시 시작하여 hbck 상태를 OK로 만듭니다.

    나는 직장에서 이러한 문제에 직면 해있다. 나는 일반적으로 z 노드를 삭제하고 해당 테이블을 제거하거나 HMbase와 Hregionserver를 모두 다시 시작하여 hbck 상태를 OK로 만듭니다.

  9. ==============================

    9.사육사 경로에서 지정된 테이블을 제거하면 충분합니다. 예를 들어 zookeeper.znode.parent가 hbase-site.xml에서 blob로 구성된 경우 zookeeper 서버 쉘에서 zkCli.sh를 시작하고 rmr / blob / table / tsdb 명령으로 해당 디렉토리를 제거해야합니다.

    사육사 경로에서 지정된 테이블을 제거하면 충분합니다. 예를 들어 zookeeper.znode.parent가 hbase-site.xml에서 blob로 구성된 경우 zookeeper 서버 쉘에서 zkCli.sh를 시작하고 rmr / blob / table / tsdb 명령으로 해당 디렉토리를 제거해야합니다.

  10. ==============================

    10.hbase-clean.sh --cleanZk

    hbase-clean.sh --cleanZk

    그것은 잘 작동하고, 충분히 간단합니다.

  11. from https://stackoverflow.com/questions/10586246/hbase-cannot-find-an-existing-table by cc-by-sa and MIT license