Поделиться через


Использование средства Apache HBase HBCK2

В этой статье показано, как использовать средство HBase HBCK2. HBCK2 — это средство восстановления для кластеров Apache HBase.

Обзор HBCK2

HBCK2 в настоящее время является простым инструментом, который выполняет только одну вещь за раз. В hbase-2.x мастер является окончательным арбитером всех состояний, поэтому общий принцип для большинства команд HBCK2 заключается в том, что он просит мастера сделать все ремонты.

Прежде чем выполнять команды HBCK2, мастер должен быть запущен и запущен. HBCK1 выполнил анализ и сообщил о своем кластере как хороший или плохой, но HBCK2 менее презрительно. В hbase-2.x оператор определяет, что необходимо исправить, а затем использует средства, включая HBCK2, для восстановления.

HBCK2 и HBCK1

HBCK2 является преемником HBCK, средство восстановления, которое поставляется с hbase-1.x (также известное как HBCK1). Вместо HBCK1 можно использовать HBCK2 для восстановления кластеров hbase-2.x. HBCK1 не следует запускать с установкой hbase-2.x, так как это может привести к повреждению. Его средство записи (-fix) было удалено. Он может сообщать о состоянии кластера hbase-2.x, но его оценки являются неточными, так как он не понимает внутренние работы hbase-2.x.

HBCK2 не работает так, как HBCK1 использовался, даже в тех случаях, когда команды похожи на две версии.

Получение HBCK2

Выпуск можно найти в каталоге распространения HBase. Дополнительные сведения см. на странице загрузки HBase.

Главный пользовательский интерфейс: отчет HBCK

Страница отчета HBCK, добавленная в мастер в версии 2.1.6, /hbck.jsp показывает выходные данные двух проверок, выполняемых мастером через интервал. Один из них — это выходные данные CatalogJanitor при каждом запуске. Если перекрытия или отверстия находятся в hbase:metaсписке CatalogJanitor , в которых он найден. Другой фоновый chore процесс сравнивает содержимое и содержимое hbase:meta файловой системы. Если обнаружена аномалия, она заметит в своем разделе отчета HBCK.

Чтобы запустить CatalogJanitorкоманду, выполните команду в оболочке hbase: catalogjanitor_run.

Чтобы запустить hbck choreкоманду, выполните команду в оболочке hbase: hbck_chore_run.

Обе команды не принимают входные данные.

Запуск HBCK2

Чтобы запустить hbck команду, запустите ее с помощью скрипта $HBASE_HOME/bin/hbase . По умолчанию при запуске bin/hbase hbckвыполняется встроенное средство HBCK1. Чтобы запустить HBCK2, необходимо указать на встроенный jar-файл HBCK2, -j используя этот параметр, как в следующем примере:

hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar

Эта команда выводит справку HBCK2 без передачи параметров или аргументов.

Команды HBCK2

Примечание.

Проверьте эти команды в тестовом кластере, чтобы понять функциональные возможности перед их запуском в рабочей среде.

assigns [OPTIONS] <ENCODED_REGIONNAME/INPUTFILES_FOR_REGIONNAMES>... | -i <INPUT_FILE>...

Параметры:

  • -o,--override: переопределяет владение другой процедурой.
  • -i,--inputFiles: принимает одно или несколько закодированных имен регионов.

Это raw назначение можно использовать даже во время инициализации master (если -skip флаг указан). Он обработает сопроцессоры и передает одно или несколько закодированных имен регионов. de00010733901a05f5a2a3a382e27dd4 — это пример того, как выглядит имя региона в кодировке пользователя. Например:

hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar assigns de00010733901a05f5a2a3a382e27dd4

Он возвращает идентификаторы созданных AssignProcedures или -1, если нет. Если -i or --inputFiles задано, он передает одно или несколько входных имен файлов. Каждый файл содержит закодированные имена регионов, по одной строке. Например:

hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar assigns -i fileName1 fileName2

unassigns [OPTIONS] <ENCODED_REGIONNAME>...| -i <INPUT_FILE>...

Параметры:

  • -o,--override: переопределяет владение другой процедурой.
  • -i,--inputFiles: принимает один или несколько входных файлов закодированных имен.

Этот raw знак отмены можно использовать даже во время инициализации master (если -skip флаг указан). Он обработает сопроцессоры и передает одно или несколько закодированных имен регионов. de00010733901a05f5a2a3a382e27dd4 пример того, как выглядит имя закодированного пространства пользователем. Например:

hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar unassign de00010733901a05f5a2a3a382e27dd4 

Он возвращает идентификаторы созданных UnassignProcedures или -1, если нет. Если -i or --inputFiles задано, он передает одно или несколько входных имен файлов. Каждый файл содержит закодированные имена регионов, по одной строке. Например:

hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar unassigns fileName1 -i fileName2

bypass [OPTIONS] <PID>...

Параметры:

  • -o,--override: переопределяется, если процедура выполняется или зависает.
  • -r,--recursive: проходит родитель и его дочерние элементы. Этот вариант является медленным и дорогим.
  • -w,--lockWait: ожидает миллисекунда, прежде чем отказаться. Default=1.
  • -i,--inputFiles: принимает один или несколько входных файлов ИДЕНТИФИКАТОРов.

Он передает один или несколько идентификаторов процедур, чтобы перейти к завершению процедуры. Родительский элемент обходной процедуры пропускается до конца. Сущности остаются в несогласованном состоянии и требуют ручного восстановления. Для очистки блокировок, которые по-прежнему хранятся, может потребоваться перезапуск master. Обход завершается ошибкой, если процедура содержит дочерние элементы. Добавьте recursive , если у вас есть родительский ИДЕНТИФИКАТОР, чтобы завершить родительский и дочерний. Этот параметр является медленным и опасным, поэтому используйте его выборочно. Это не всегда работает.

hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar bypass <PID>

Если -i or --inputFiles задано, передайте одно или несколько входных имен файлов. Каждый файл содержит идентификаторы идентификаторов( по одной строке). Например:

hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar bypass -i fileName1 fileName2

reportMissingRegionsInMeta <NAMESPACE|NAMESPACE:TABLENAME>... | -i <INPUT_FILE>...

Вариант:

  • i,--inputFiles: принимает один или несколько входных файлов пространства имен или имен таблиц.

Используйте этот параметр, если регионы отсутствуют, hbase:meta но если каталоги по-прежнему присутствуют в HDFS. Эта команда является только методом проверки. Он предназначен для создания отчетов и не выполняет никаких исправлений. Он предоставляет представление о том, какие регионы (если таковые) будут считываться в , сгруппированы hbase:metaпо соответствующей таблице или пространству имен.

Чтобы эффективно считывать регионы в метате, выполните команду addFsRegionsMissingInMeta. Эта команда должна hbase:meta быть подключена к сети. Для каждого пространства имен или таблицы, передаваемого в качестве параметра, он выполняет дифф между регионами, доступными в hbase:meta отношении диров существующих регионов в HDFS. Диры региона без совпадений сгруппированы по имени связанной таблицы. В таблицах без отсутствующих регионов отображается сообщение "отсутствующие регионы". Если пространство имен или таблица не указаны, он проверяет все существующие регионы.

Он принимает сочетание нескольких пространств имен и таблиц. Имена таблиц должны содержать часть пространства имен, даже для таблиц в пространстве имен по умолчанию. В противном случае предполагается значение пространства имен. В этом примере отсутствуют отчеты о регионах для таблиц table_1 и table_2в пространстве имен по умолчанию:

hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar reportMissingRegionsInMeta default:table_1 default:table_2

В этом примере запускается отчет о отсутствующих регионах для таблицы table_1 в пространстве имен по умолчанию и для всех таблиц из пространства ns1имен:

hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar reportMissingRegionsInMeta default:table_1 ns1

Он возвращает список отсутствующих регионов для каждой таблицы, передаваемой в качестве параметра, или для каждой таблицы в пространствах имен, указанных в качестве параметра. Если -i or --inputFiles задано, он передает одно или несколько входных имен файлов. Каждый файл содержит по одной строке <NAMESPACE|NAMESPACE:TABLENAME>. Например:

hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar reportMissingRegionsInMeta -i fileName1 fileName2

addFsRegionsMissingInMeta <NAMESPACE|NAMESPACE:TABLENAME>... | -i <INPUT_FILE>...

Вариант:

  • -i,--inputFiles: принимает один или несколько входных файлов имен имен, которые будут использоваться, когда регионы отсутствуют, hbase:meta но каталоги по-прежнему присутствуют в HDFS. Необходимо hbase:meta быть в сети.

Для каждого имени таблицы, передаваемого в качестве параметра, он выполняет дифф между регионами, доступными в hbase:meta hdFS и регионами. Затем для дирсов без hbase:meta совпадений он считывает regioninfo файл метаданных и повторно создает определенный регион в hbase:meta. Регионы повторно создаются в состоянии CLOSED в hbase:meta таблице, но не в кэше Masters . Они также не назначены. Чтобы получить эти регионы в сети, выполните команду HBCK2 assigns , напечатанную после завершения выполнения этой команды.

Если вы используете выпуски hbase старше 2.3.0, перед выполнением набора выходных assigns данных требуется последовательный перезапуск HMasters. В этом примере добавляются отсутствующие регионы для таблиц tbl_1 в пространстве имен по умолчанию, tbl_2 в пространстве n1имен и для всех таблиц из пространства n2имен:

hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar addFsRegionsMissingInMeta default:tbl_1 n1:tbl_2 n2

Он возвращает HBCK2 и assigns команду со всеми переозданными регионами. Если -i or --inputFiles задано, он передает одно или несколько входных имен файлов. Каждый файл содержит по одной строке <NAMESPACE|NAMESPACE:TABLENAME>. Например:

hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar addFsRegionsMissingInMeta -i fileName1 fileName2

extraRegionsInMeta <NAMESPACE|NAMESPACE:TABLENAME>... | -i <INPUT_FILE>...

Параметры:

  • -f, --fix: исправляет мета путем удаления всех дополнительных регионов, найденных.
  • -i,--inputFiles: принимает один или несколько входных файлов пространства имен или имен таблиц.

Он сообщает о регионах, которые присутствуют hbase:meta , но без связанных каталогов в файловой системе. Необходимо hbase:meta быть в сети. Для каждого имени таблицы, передаваемого в качестве параметра, он выполняет дифф между регионами, доступными в hbase:meta разных регионах в определенной файловой системе. Дополнительные регионы будут удалены из Мета, если он прошел --fix этот параметр.

Примечание.

Прежде чем решить использовать --fix этот параметр, следует проверить, перекрываются ли дополнительные регионы с существующими допустимыми регионами. Если да, то extraRegionsInMeta --fix это оптимальное решение. В assigns противном случае команда является более простым решением. Он повторно создает диры регионов в файловой системе, если они не существуют.

В этом примере активируются дополнительные отчеты регионов для table_1 пространства имен по умолчанию и для всех таблиц из пространства ns1имен:

hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar extraRegionsInMeta default:table_1 ns1

В этом примере отчеты о дополнительных регионах для table_1 пространства имен по умолчанию и для всех таблиц из пространства ns1 имен с параметром исправления:

hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar extraRegionsInMeta -f default:table_1 ns1

Он возвращает список дополнительных регионов для каждой таблицы, передаваемой в качестве параметра, или для каждой таблицы в пространствах имен, указанных в качестве параметра. Если -i or --inputFiles задано, передайте одно или несколько входных имен файлов. Каждый файл содержит по одной строке <NAMESPACE|NAMESPACE:TABLENAME>. Рассмотрим пример.

hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar extraRegionsInMeta -i fileName1 fileName2

fixMeta

Примечание.

Этот параметр не работает хорошо с HBase 2.1.6. Не рекомендуется использовать его в кластере HBase версии 2.1.6.

Выполните исправление на стороне сервера плохого или несогласованного состояния в hbase:meta. Главный пользовательский интерфейс имеет соответствующую новую HBCK Report вкладку, которая дампа отчетов, созданных последним запуском catalogjanitor и новым hbck chore.

Это важно, чтобы hbase:meta сначала быть здоровым, прежде чем делать любые другие ремонты. Он исправляет и overlapsсоздает (пустые) каталоги holes регионов в HDFS для сопоставления регионов, добавленных hbase:metaв .

Эта команда не совпадает со старой командой hbck1 , которая называется аналогично. Он работает с отчетами, созданными последним catalog_janitor и hbck chore запущенным. Если ничего не нужно исправить, выполнение является циклом. В противном случае, если HBCK Report пользовательский интерфейс сообщает о проблемах, выполняется очистка fixMeta hbase:meta проблем.

hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar fixMeta

generateMissingTableDescriptorFile <NAMESPACE:TABLENAME>

Эта команда пытается исправить потерянную таблицу, создав отсутствующий файл дескриптора таблицы. Эта команда не влияет, если папка таблицы отсутствует или .tableinfo присутствует. (Мы не переопределим существующие дескрипторы таблиц.) Эта команда сначала проверяет, кэшируется ли TableDescriptor он в главном экземпляре HBase, в этом случае он восстанавливается .tableinfo соответствующим образом. Если TableDescriptor он не кэширован в Master, он создает файл по умолчанию .tableinfo со следующими элементами:

  • Имя таблицы.
  • Список семейств столбцов, определенный на основе файловой системы.
  • Свойства по умолчанию для обоих TableDescriptor и ColumnFamilyDescriptors. .tableinfo Если файл был создан с помощью параметров по умолчанию, проверьте свойства семейства таблиц или столбцов позже. (При необходимости измените их.) Этот метод не изменяет ничего в HBase. Он записывает только новый .tableinfo файл в файловую систему. Например, ServerCrashProcedures для потерянных таблиц может потребоваться исправить ошибку после создания отсутствующих файлов сведений о таблице.
hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar generateMissingTableDescriptorFile namespace:table_name

replication [OPTIONS] [<NAMESPACE:TABLENAME>... | -i <INPUT_FILE>...]

Параметры:

  • -f, --fix: устраняет обнаруженные проблемы репликации.
  • -i,--inputFiles: принимает один или несколько входных файлов имен таблиц.

Он ищет незавершенные очереди репликации и удаляет их, если он прошел --fix этот параметр. Он передает имя таблицы для проверки барьера репликации и очистки, если --fix.

hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar replication namespace:table_name

Если -i or --inputFiles задано, он передает одно или несколько входных имен файлов. Каждый файл содержит по одной строке <TABLENAME>. Например:

hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar replication -i fileName1 fileName2

setRegionState [<ENCODED_REGIONNAME> <STATE> | -i <INPUT_FILE>...]

Вариант:

  • -i,--inputFiles: принимает один или несколько входных файлов имен и состояний закодированных регионов.

Возможные состояния региона:

  • OFFLINE
  • ОТКРЫТИЕ
  • ОТКРЫТО
  • CLOSIN
  • ЗАКРЫТО
  • РАСЩЕПЛЕНИЕ
  • РАСКАЛЫВАТЬ
  • FAILED_OPEN
  • FAILED_CLOSE
  • ОБЪЕДИНЕНИЕ
  • СЛИВШИЙСЯ
  • SPLITTING_NEW
  • MERGING_NEW
  • ABNORMALLY_CLOSED

Предупреждение

Этот рискованные варианты предназначены только для использования в качестве последнего способа.

Примеры сценариев включают отмену знака или назначение, которое не может двигаться вперед, так как регион находится в несогласованном состоянии.hbase:meta Например, команда может продолжаться только в том случае, unassigns если она передает регион в одном из следующих состояний: SPLITTING, SPLIT, SPLIT, MERGING, OPEN или CLOSING.

Прежде чем вручную задать состояние региона с помощью этой команды, убедитесь, что этот регион не обрабатывается выполняющейся процедурой, например assign или split. Представление выполняемых процедур в оболочке hbase можно получить с помощью list_procedures команды. В этом примере для региона de00010733901a05f5a2a3a382e27dd4 задано значение CLOSING:

hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar setRegionState de00010733901a05f5a2a3a382e27dd4 CLOSING

Возвращается 0 , если состояние региона изменилось и 1 в противном случае. Если -i or --inputFiles задано, передайте одно или несколько входных имен файлов. Каждый файл содержит <ENCODED_REGIONNAME> <STATE>одну пару на строку. Например:

hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar setRegionState -i fileName1 fileName2

setTableState [<TABLENAME> <STATE> | -i <INPUT_FILE>...]

Вариант:

  • -i,--inputFiles: принимает один или несколько входных файлов имен таблиц и состояний.

Возможные состояния таблицы: ENABLED, DISABLED, DISABLING и ENABLED.

Чтобы считывать текущее состояние таблицы, выполните команду в оболочке hbase:

hbase> get 'hbase:meta', '<TABLENAME>', 'table:state'

Значение x08x00 == ENABLED, x08x01 == DISABLED и т. д. Он также может выполняться describe <TABLENAME> в командной строке оболочки. В этом примере имя таблицы включено:

hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar setTableState users ENABLED

Он возвращает любое предыдущее состояние таблицы. Если -i or --inputFiles задано, он передает одно или несколько входных имен файлов. Каждый файл содержит <TABLENAME> <STATE>одну пару на строку. Например:

hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar setTableState -i fileName1 fileName2

scheduleRecoveries <SERVERNAME>... | -i <INPUT_FILE>...

Вариант:

  • -i,--inputFiles: принимает один или несколько входных файлов имен серверов.

Расписание ServerCrashProcedure(SCP) для списка RegionServers. Форматируйте имя сервера как <HOSTNAME>,<PORT>,<STARTCODE>. (См. пользовательский интерфейс и журналы HBase.)

В этом примере используется RegionServer a.example.org, 29100,1540348649479:

hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar scheduleRecoveries a.example.org,29100,1540348649479

Он возвращает идентификаторы созданных или -1, если процедура не создана ServerCrashProcedures . (См. основные журналы, чтобы узнать, почему это не так.) Поддержка команд добавляется в HBase версии 2.0.3, 2.1.2, 2.2.0 или более поздней версии. Если -i or --inputFiles задано, он передает одно или несколько входных имен файлов. Каждый файл содержит по одной строке <SERVERNAME>. Например:

hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar scheduleRecoveries -i fileName1 fileName2 

Устранение проблем

В этом разделе описано устранение распространенных проблем.

Общие принципы

При выполнении исправления убедитесь, что hbase:meta сначала согласованы перед устранением других типов проблем, таких как отклонение файловой системы. Отклонения в файловой системе или проблемы с назначением должны быть устранены после того, как hbase:meta он будет помещен в порядок. Если hbase:meta возникли проблемы, мастер не может сделать правильное размещение при принятии данных файловой системы или назначений регионов.

Регион не может быть назначен, если он находится в состоянии CLOSING (или обратном, без знака, если в состоянии OPENING) без первого перехода через CLOSED. Регионы всегда должны переходить от CLOSED, к OPEN, а затем к ЗАКРЫТИю и ЗАКРЫТию.

При восстановлении исправьте таблицы по одному за раз.

Если таблица отключена, вы не можете назначить регион. В журналах master вы увидите, что отчеты Master пропущены, так как таблица отключена. Вы можете назначить регион, так как в настоящее время он находится в состоянии OPENING, и вы хотите, чтобы оно соответствовало состоянию DISABLED таблицы. В этой ситуации может потребоваться временно задать состояние таблицы ВКЛЮЧЕНО, чтобы можно было назначить эту таблицу. Затем снова установите его после инструкции unassign. HBCK2 имеет возможность сделать это изменение. См. выходные данные об использовании HBCK2.

Назначение и отмена назначения

Как правило, при назначении главный элемент сохраняется до тех пор, пока он не будет успешным. Назначение принимает монопольную блокировку в регионе. Блокировка не позволяет одновременно назначать или отменять назначение. Назначение для заблокированного региона ожидает, пока блокировка не будет освобождена, прежде чем выполнять ход выполнения.

Master startup cannot progress, in holding-pattern until region online:

2018-10-01 22:07:42,792 WARN org.apache.hadoop.hbase.master.HMaster: hbase:meta,1.1588230740 isn't online; state={1588230740 state=CLOSING, ts=1538456302300, server=ve1017.example.org,22101,1538449648131}; ServerCrashProcedures=true. Master startup cannot progress, in holding-pattern until region online.

Мастер не может продолжить запуск, так как не существует процедуры назначения hbase:meta (или hbase:namespace). Чтобы внедрить его, используйте средство HBCK2:

hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar assigns -skip 1588230740

В этом примере 1588230740 — это закодированное имя hbase:meta региона. -skip Передайте параметр, чтобы остановить проверку версий HBCK2 на удаленном главном сервере. Если удаленный мастер не установлен, проверка версии запрашивает Master is initializing response или PleaseHoldException удаляет попытку назначения. Команда -skip избегает проверки версии и приземляет запланированное назначение.

То же самое может произойти с системной таблицей hbase:namespace . Найдите закодированное имя hbase:namespace региона и выполните аналогичные действия с тем, что мы сделали.hbase:meta В этом последнем случае мастер фактически выводит полезное сообщение, которое выглядит следующим образом:

2019-07-09 22:08:38,966 WARN  [master/localhost:16000:becomeActiveMaster] master.HMaster: hbase:namespace,,1562733904278.9559cf72b8e81e1291c626a8e781a6ae. isn't online; state={9559cf72b8e81e1291c626a8e781a6ae state=CLOSED, ts=1562735318897, server=null}; ServerCrashProcedures=true. Master startup cannot progress, in holding-pattern until region onlined.

Чтобы запланировать назначение таблицы hbase:namespace , указанной в предыдущей строке журнала:

hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar -skip assigns 9559cf72b8e81e1291c626a8e781a6ae

Передайте закодированное имя для региона пространства имен. (Закодированное имя отличается на развертывание.)

Отсутствующие регионы в hbase:meta region/table restore/rebuild

Некоторые необычные случаи были удалены из hbase:meta таблицы. Тридж по этим случаям показал, что они были оператором, вызванным. Пользователи запустили устаревшее средство HBCK1 OfflineMetaRepair в кластере HBCK2. OfflineMetaRepair — это известный инструмент для устранения hbase:meta проблем, связанных с таблицами, в версиях HBase 1.x. Исходная версия несовместима с HBase 2.x или более поздними версиями, и она подверглась некоторым корректировкам. В чрезвычайных ситуациях она теперь может быть запущена через HBCK2.

В большинстве случаев регионы в конечном итоге отсутствуют hbase:meta случайным образом, но hbase все еще может быть операционным. В таких ситуациях проблему можно решить с помощью команды Master online с помощью addFsRegionsMissingInMeta команды в HBCK2. Эта команда менее нарушена для hbase, чем полная hbase:meta перестроение, которая рассматривается позже. Его можно использовать даже для восстановления области таблицы пространства имен.

Дополнительные регионы в hbase:meta region/table restore/rebuild

Также могут возникнуть ситуации, когда области таблиц были удалены в файловой системе, но по-прежнему имеют связанные записи в hbase:meta таблице. Этот сценарий может произойти из-за проблем с разделением, ошибками ручной операции (например, удалением или перемещением региона вручную) или даже проблемами потери метаданных данных, такими как HBASE-21843.

Такие проблемы можно устранить с помощью команды Master online с помощью extraRegionsInMeta --fix команды в HBCK2. Эта команда менее нарушена для hbase, чем полная hbase:meta перестроение, которая рассматривается позже. Это также полезно, если это происходит в версиях, которые не поддерживают fixMeta параметр HBCK2 (любые версии до 2.0.6, 2.1.6, 2.2.1, 2.3.0 или 3.0.0).

Рецепт перестроения в Интернете hbase:meta

Если hbase:meta коррупция не слишком важна, hbase по-прежнему может перевести его в интернет. Даже если регион пространства имен является одним из отсутствующих регионов, можно сканировать hbase:meta в течение периода инициализации, где главный ожидает назначения пространства имен. Чтобы проверить эту ситуацию, hbase:meta можно выполнить команду сканирования. Если время ожидания не истекает или не отображает никаких ошибок, hbase:meta оно находится в сети:

echo "scan 'hbase:meta', {COLUMN=>'info:regioninfo'}" | hbase shell

HBCK2 addFsRegionsMissingInMeta можно использовать, если сообщение не отображает никаких ошибок. Он считывает сведения о метаданных региона, доступные в каталогах регионов FS для повторного создания регионов в hbase:meta. Так как он может работать с hbase частично операционным, он пытается отключить онлайн-таблицы, затронутые сообщаемой проблемой, и она будет считывать регионы в hbase:meta. Он может проверять наличие определенных таблиц или пространств имен или всех таблиц из всех пространств имен. В этом примере показано добавление отсутствующих областей для таблиц tbl_1 в пространстве имен по умолчанию, tbl_2 в пространстве n1имен и для всех таблиц из пространства n2имен:

hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar addFsRegionsMissingInMeta default:tbl_1 n1:tbl_2 n2

Так как он работает независимо от master, после успешного завершения более подробные действия требуются для назначения прочитанных регионов. Эти сообщения перечислены следующим образом:

  • addFsRegionsMissingInMeta выводит команду с всеми регионами, которые были прочитаны. Эта команда должна выполняться позже, поэтому скопируйте и сохраните ее для удобства.
  • Для версий HBase до версии 2.3.0 addFsRegionsMissingInMeta после успешного завершения и сохранения выходных данных перезапустите все запущенные мастера HBase.

После перезапуска master и hbase:meta уже подключенного к сети (проверьте, доступен ли веб-интерфейс), выполните команду присваивается из addFsRegionsMissingInMeta выходных данных, сохраненных ранее.

Примечание.

Если регион пространства имен является одним из отсутствующих регионов, необходимо добавить --skip флаг в начале возвращаемой команды.

Если кластер страдает от катастрофической потери hbase:meta таблицы, то грубое перестроение возможно с помощью следующего рецепта. В структуре мы остановим кластер. Запустите средство HBCK2 OfflineMetaRepair, которое считывает каталоги и метаданные, удаленные в файловую систему, и делает лучшие усилия по восстановлению жизнеспособной hbase:met таблицы. Перезапустите кластер. Внедрение назначения для подключения таблицы пространства имен системы к сети. Наконец, переназначьте нужные таблицы пространства пользователей. (Перестроение hbase:meta создает таблицу со всеми таблицами в автономном режиме и без назначенных регионов.)

Подробный рецепт перестроения

Примечание.

Используйте этот параметр только в качестве последнего средства. Это не рекомендуемый вариант.

  • Остановите кластер.

  • Выполните команду перестроения hbase:meta из HBCK2. Эта команда перемещается в сторону исходного hbase:meta и помещает в место только что перестроенный. В этом примере показано, как запустить средство. Он добавляет -details флаг, чтобы инструмент дамп сведений о регионах, найденных в HDFS:

    hbase --config /etc/hbase/conf -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar org.apache.hbase.hbck1.OfflineMetaRepair -details
    
  • Запустите кластер. Она не будет полностью запущена. Это зависло, так как таблица пространства имен не подключена к сети, и в хранилище процедур для этого непредвиденных обстоятельств не назначена процедура. В главном журнале HBase отображается это состояние. В этом примере показано, что он регистрирует:

    2019-07-10 18:30:51,090 WARN  [master/localhost:16000:becomeActiveMaster] master.HMaster: hbase:namespace,,1562808216225.725a0fe6c2c869d3d0a9ed82bfa80fa3. isn't online; state={725a0fe6c2c869d3d0a9ed82bfa80fa3 state=CLOSED, ts=1562808619952, server=null}; ServerCrashProcedures=false. Master startup can't progress, in holding-pattern until region onlined.
    

    Чтобы назначить область таблицы пространства имен, нельзя использовать оболочку. Если вы используете оболочку, она завершается ошибкой PleaseHoldException , так как мастер еще не работает. (Ожидается, что таблица пространства имен будет подключена, прежде чем она объявляет себя "вверх". Необходимо использовать команду HBCK2. Чтобы назначить, вам потребуется закодированное имя пространства имен. Он отображается в кавычках журнала. 725a0fe6c2c869d3d0a9ed82bfa80fa3 Вот в этом случае. Чтобы пропустить проверку основной -skip версии, необходимо передать команду. (Без него вызов HBCK2 вызывает PleaseHoldException , потому что мастер еще не до конца.) В этом примере добавляется назначение таблицы пространства имен:

    hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar -skip assigns 725a0fe6c2c869d3d0a9ed82bfa80fa3
    

    Если вызов возвращается с Connection refused, является ли мастер вверх? Мастер завершает работу через некоторое время, если он не может инициализировать себя. Перезапустите кластер или главный сервер и повторно запустите команду назначения.

  • При успешном выполнении назначения вы увидите, что он выдает примерно то, что похоже на следующий пример. В 48 конце — идентификатор идентификатора расписания назначения процедур. Если возвращен -1идентификатор piD, запуск Master не прошел достаточно, поэтому повторите попытку. Или неправильное имя закодированного региона, поэтому проверьте эту проблему.

    hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar -skip assigns 725a0fe6c2c869d3d0a9ed82bfa80fa3
    
    18:40:43.817 [main] WARN  org.apache.hadoop.util.NativeCodeLoader - Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
    18:40:44.315 [main] INFO  org.apache.hbase.HBCK2 - hbck sufpport check skipped
    [48]
    
  • Проверьте главные журналы. Мастер должен был прийти. Вы видите успешное завершение PID=48. Найдите строку, похожую на этот пример, чтобы проверить успешный запуск master:

    master.HMaster: Master has completed initialization 132.515sec
    

    Может потребоваться некоторое время.

    Перестроение hbase:meta добавляет пользовательские таблицы в состояние DISABLED и регионы в режиме CLOSED. Повторное создание таблиц с помощью оболочки для возврата всех регионов таблиц в режим "в сети". Сделайте это одновременно или просмотрите команду "Включить все".*", чтобы включить все таблицы одновременно.

    Мета перестроения отсутствует в изменениях и может потребоваться последующее восстановление и очистка с помощью объекта, описанного ранее в этой статье.

Удалены ссылочные файлы, отсутствующие файлы hbase.version и поврежденные файлы

HBCK2 может проверить наличие висячих ссылок и поврежденных файлов. Вы можете попросить его поставить в сторону плохие файлы, которые могут потребоваться для перебора горбов, где регионы не будут работать в Интернете или сбои чтения. См. команду файловой системы в описании HBCK2. Передайте одну или несколько имен таблиц (или используйте none для проверки всех таблиц). Сообщается о плохих файлах. --fix Передайте параметр, чтобы сделать ремонт.

Перезапуск процедуры

В качестве последнего способа, если мастер обезумевает и все попытки восстановления только вывернут неуправляемые блокировки или процедуры, которые не могут закончиться, или если набор MasterProcWALs растет без границ, можно очистить главное состояние очистки. Переместите каталог под установкой /hbase/MasterProcWALs/ HBase и перезапустите главный процесс. Он возвращается в виде табличного формата без памяти.

Если во время стирание всех регионов было счастливо назначено или в автономном режиме, на главном перезапуске мастер должен забрать и продолжить, как будто ничего не произошло. Но если в то время существовали регионы, оператор должен вмешаться, чтобы привлечь невыполненные назначения или отменить назначение в точку терминала.

hbase:meta info:state Прочитайте столбцы, как описано, чтобы определить, что необходимо назначить или отменить назначение. После удаления всей истории путем перемещения в сторону MasterProcWALsни одна из сущностей не должна быть заблокирована, поэтому вы можете массово назначить или отменить назначение.