Восстановить таблицу 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
, и это помогло. Но на этот раз больше нет.
Итак, это означает, что нужно выполнить ручное вмешательство, чтобы исправить это. Может ли кто-нибудь указать мне в правильном направлении, как это сделать? Рецепт, веб-страница, например, что-нибудь поможет.
Спасибо, Марио
Ответы
Ответ 1
Марио,
Таким образом, одна из причин, почему регион застревает в процессе перехода, заключается в том, что когда он перемещается по областям, он не назначается из сервера регистров источников, но никогда не привязан к другому серверу регистров. Одно исправление, которое всегда работает для меня, - это принудительное назначение его из оболочки hbase:
assign regionName
Ответ 2
Я пытался сделать сильное назначение регионов, но для меня это не сработало. Я пробовал следовать, и это сработало:
шаги:
- Отключить таблицу из оболочки hbase
-
Запустите hbck, чтобы исправить проблемы с помощью следующей команды
sudo -u hbase hbase hbck -repair
-
Включить таблицу из оболочки hbase
Ответ 3
Если ваша версия HBase достаточно современна, вы можете также попробовать hbck -repairHoles вместо -repair. Это помогло мне в недавней проблеме "исправить дыру".
Ответ 4
Сначала вы должны проверить, есть ли файл для данного региона в ваших hdf.
Если есть, вы должны придерживаться только hbck -fixHdfsHoles -fixMeta, пока не будет исправлено. (может потребоваться несколько попыток).
Если такой файл для региона с переходной ситуацией отсутствует (он должен находиться под /hbase/data///), то HBase считает, что для этого региона в этом каталоге должен быть допустимый HFile, и он не сможет его исправить нормальные команды восстановления.
Вы должны сделать то, что находится в одном из последних ответов здесь, и создать допустимый HFile для ваших hdf:
http://comments.gmane.org/gmane.comp.java.hadoop.hbase.user/31308
Ответ 5
У меня была такая же проблема
- Запуская все сервисы через Ambari, HDFS перешла в безопасный режим и больше не возвращалась.
- Другие службы не запускались, так как HFDS долгое время находился в безопасном режиме. Я удалил HDFS из безопасного режима вручную и попытался запустить службы, похоже, это повредило некоторые файлы HDFS, которые повлияли на hbase.
- Сканирование существующей таблицы вернуло "Неизвестная ошибка таблицы"
- При создании нового пространства имен возвращается ошибка ниже:
create_namespace 'tst1' ОШИБКА: java.io.IOException: Диспетчер пространства имен таблицы не полностью инициализирован, повторите попытку позже
"hbase hbck -repair"
возвращено "ОШИБКА: в цепочке региона есть дыра между и. Вам нужно создать новый каталог .regioninfo и region в каталоге hdf, чтобы закрыть дыру".
Запуск "hbase hbck -repair Holes" исправил проблему.
Я также мог сканировать ранее сохраненные данные.
Примечание: - команда hbase hbck должна запускаться от пользователя hbase
Ответ 6
В моем случае я забыл изменить владельца данных региона, который был скопирован из другого кластера.
Затем я пытаюсь выполнить 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
Поэтому проблема была решена после изменения собственной и группы, как и другие. Теперь вы будете сканировать таблицу успешно.
Ответ 7
У меня такая же проблема. Один регион застрял в Region still in transition, waiting for it to become assigned:
. Ни одна из опций -repair
не работала, потому что все опции требуют, чтобы все регионы были назначены.
Мне пришлось удалить регион из hdfs.
hdfs$ hdfs dfs -rm -r /hbase/data/default/<table>/<region>
После удаления региона все опции -repair
сработали, но было сообщено, что регион все еще находится в переходном состоянии из-за кэша zookeeper.
Как Как получить регион в HBASE, который находится в состоянии FAILED_OPEN? Я удалил кеш перехода из zookeeper, перезапустил мастер HBASE, и все было в порядке