Восстановить таблицу 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, и все было в порядке