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