Hbase не может найти существующую таблицу
Я установил кластер hbase для хранения данных из opentsdb. Недавно из-за перезагрузки некоторых узлов hbase потеряла таблицу "tsdb". Я все еще могу на странице hbase master node, но когда я нажимаю на нее, она дает мне 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)
Он говорит, что не может найти строку tsbb в .META., но в .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
который, к сожалению, не решает мою проблему
Может кто-то помочь мне в этом, что
- Можно ли восстановить эту таблицу "tsdb"?
- Если 1 не может быть сделано, это предложенный способ изящно удалить 'tsdb' и создать новый?
- Я был бы признателен, если кто-нибудь может сообщить мне, что является наиболее рекомендуемым способом перезагрузки node? В настоящее время я всегда оставляю своего мастера node. Для других узлов я запускаю эту команду сразу после ее перезагрузки.
Команда:
# 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) Удалите все записи в таблице .META для этой таблицы вручную и
2) Удалите каталог, соответствующий этой таблице, из HDFS
Попробуйте создать таблицу после этого.
Ответ 2
hbase zk_cli
-ls /hbase/tables
Таблица оставалась на Zookeeper.
Удалена таблица из zookeeper (rmr).
Ответ 3
Немного поздно, может быть, это полезно для поисковика.
- Запустите оболочку ZooKeeper
hbase zkcli
- В командной строке
ls /hbase/table
- Запустить
rmr /hbase/table/TABLE_NAME
- Перезапустить Hbase
Ответ 4
Если вы используете cdh4.3, тогда путь в zookeeper должен быть/hbase/table94/
Ответ 5
Чтобы расширить ответ на @Devin Bayer, запустите:
delete /hbase/table/<name_of_zombie_table>
если вы найдете таблицы зомби, которые поддерживаются zookeeper. Для получения дополнительной справки по этой проблеме вам необходимо указать "Таблицы зомби HBase".
Ответ 6
попытайтесь исправить мета
- hbase hbck
- hbase hbck -fixMetali >
- hbase hbck -fixAssignments
- hbase hbck -fixReferenceFiles
после и повторите попытку
Ответ 7
Дополнительные инструкции по удалению таблиц:
~/hbase-0.94.12/bin/hbase shell
> truncate 'tsdb'
> truncate 'tsdb-meta'
> truncate 'tsdb-uid'
> truncate 'tsdb-tree'
> exit
Мне также пришлось перезапустить демон tsd.
Ответ 8
Я получаю подобное сообщение об ошибке при попытке подключения HBase с Java-клиента на машине, у которой нет привилегий TCP для доступа к машинам HBase.
Таблица действительно существует, когда я делаю hbase shell на самой машине HBase.
Имеет ли opentsdb все привилегии/конфигурацию порта для доступа к машине HBase?
Ответ 9
Я сталкиваюсь с этими проблемами на своем рабочем месте. Обычно я либо удаляю znodes, и они удаляют соответствующую таблицу или перезапускают hbase и HMaster и Hregionserver, чтобы получить статус hbck.
Ответ 10
Достаточно удалить указанную таблицу из вашего пути zookeeper.
Например, если zookeeper.znode.parent настроен на blob в hbase-site.xml, вы должны запустить zkCli.sh
в своей оболочке сервера zookeeper и удалите этот каталог командой rmr /blob/table/tsdb
.
Ответ 11
hbase-clean.sh --cleanZk
Это работает хорошо, достаточно просто.