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


Использование средства 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, выполните команду catalogjanitor_run в оболочке hbase.

Чтобы запустить 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

Он возвращает PIDs созданных 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 деассоциацию можно использовать даже во время инициализации мастера (если задан флаг -skip). Он обходит сопроцессоры и передает одно или несколько закодированных имен регионов. de00010733901a05f5a2a3a382e27dd4 это пример того, как выглядит имя региона, закодированного в пространстве с переопределением пользователем. Например:

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

Возвращает идентификаторы (PID) созданных 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: ожидает миллисекунда, прежде чем отказаться. По умолчанию=1.
  • -i,--inputFiles: принимает один или несколько входных файлов PID.

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

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. Регионы повторно создаются в состоянии "закрыто" в таблице 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, и папками регионов в конкретной файловой системе. Дополнительные регионы будут удалены из 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 сначала был приведён в порядок, прежде чем выполнять любые другие ремонты. Он исправляет 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: принимает один или несколько входных файлов с названиями и состояниями кодированных регионов.

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

  • ОФФЛАЙН
  • ОТКРЫТИЕ
  • ОТКРЫТО
  • закрытие
  • ЗАКРЫТО
  • РАЗДЕЛЕНИЕ
  • РАСКАЛЫВАТЬ
  • Ошибка открытия
  • НЕУДАЧА_ЗАКРЫТИЯ
  • ОБЪЕДИНЕНИЕ
  • ОБЪЕДИНЕННЫЙ
  • РАЗДЕЛЕНИЕ_НОВЫЙ
  • СЛИЯНИЕ_НОВОЕ
  • АБНОРМАЛЬНО_ЗАКРЫТО

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

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

Примеры сценариев включают снятие назначения или назначения, которые не могут продолжаться, так как регион находится в неустойчивом состоянии. hbase:meta Например, unassigns команда может продолжаться только в том случае, если ей передан регион в одном из следующих состояний: SPLITTING, 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 == ВКЛЮЧЕНО, x08x01 == ВЫКЛЮЧЕНО и т. д. Оно также может выполняться describe <TABLENAME> в командной строке. В этом примере имя таблицы user устанавливается как ENABLED.

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.)

В этом примере используется RegionServera.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

Возвращает PID созданных ServerCrashProcedures или -1, если процедура не создана. (См. основные журналы, чтобы узнать, почему это не работает.) Поддержка команд была добавлена в 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. Регионы всегда должны переходить от ЗАКРЫТО, к ОТКРЫТИЮ, ОТКРЫТО, затем к ЗАКРЫТИЮ и ЗАКРЫТО.

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

Если таблица отключена, вы не можете назначить регион. В журналах Master вы увидите, что отчеты Master были пропущены, так как таблица отключена. Вы можете назначить регион, потому что в настоящее время он находится в состоянии OPENING, а вам нужно, чтобы он находился в состоянии CLOSED, чтобы соответствовать состоянию 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 при помощи 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.

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

Примечание.

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

Если кластер страдает от катастрофической потери 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 assigns. Чтобы назначить, вам потребуется закодированное имя пространства имен. Он отображается в приведенном журнале. В этом случае 725a0fe6c2c869d3d0a9ed82bfa80fa3. Вы должны передать команду -skip, чтобы пропустить проверку Master версии. (Без него вызов 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 конце — PID расписания процедуры назначения. Если возвращен идентификатор PID -1, запуск 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.HMaster: Master has completed initialization 132.515sec
    

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

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

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

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

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

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

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

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

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