Восстановить таблицу 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 пару раз до этого, и это помогло. Но на этот раз ... ,
больше нет.
Хорошо, так что это означает, чтобы сделать ручное вмешательство, чтобы исправить это. Мог бы кто-нибудь
укажи мне дорогу правильное направление, как это сделать? Рецепт, веб-страница, пример,
все, что угодно, поможет.
Спасибо,
Марио
5 ответов:
Марио,
Таким образом, одна из причин, по которой регион застревает в переходе, заключается в том, что, когда он перемещается через regionserver, он не назначается от исходного regionserver, но никогда не назначается другому regionserver. Одно исправление, которое всегда работает для меня, - это принудительное назначение его из оболочки hbase: -
assign regionName
Я пытался сделать силовое присвоение регионов, но у меня это не получилось. Я попробовал следовать, и это сработало:
Шаги:
- отключить таблицу из оболочки hbase
Запустите hbck для устранения проблем, используя следующую команду
sudo -u hbase hbase hbck -repairВключить таблицу из оболочки hbase
Сначала вы должны проверить, есть ли файл для этого конкретного региона в вашем hdfs.
Если есть, вы должны придерживаться только hbck-fixHdfsHoles-fixMeta, пока не будет исправлено. (может потребоваться пара попыток).
Если нет такого файла для области в переходе (он должен быть под /hbase / data///), то HBase считает, что должен быть допустимый HFile для этой области в этом каталоге и не сможет исправить его с помощью обычных команд восстановления.
Вы должны сделать то, что находится в одном из последний ответ здесь и создать правильный HFile в файловую систему HDFS :
Http://comments.gmane.org/gmane.comp.java.hadoop.hbase.user/31308
Если ваша версия HBase достаточно свежая, вы также можете попробовать hbck-repairHoles вместо just-repair. Это сделало трюк для меня на недавней проблеме "исправить дыру".
В моем случае я забыл изменить владельца данных региона, которые были скопированы из другого кластера.
Тогда я пытаюсь сделать
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Так проблема решалась после смены своих и группы как чужих. Теперь вы будете сканировать таблицу успешно.
Comments