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