Share via


Uso de la herramienta HBCK2 de Apache HBase

En este artículo se muestra cómo usar la herramienta HBase HBCK2. HBCK2 es la herramienta de reparación para clústeres Apache HBase.

Información general sobre HBCK2

Actualmente, HBCK2 es una herramienta sencilla que solo hace una cosa a la vez. En hbase-2.x, el Maestro es el árbitro final de todo el estado, por lo que un principio general para la mayoría de los comandos de HBCK2 es que pide al Maestro que haga todas las reparaciones.

Un Maestro debe estar en funcionamiento para poder ejecutar comandos HBCK2. HBCK1 realizó un análisis y notificó que el clúster es bueno o incorrecto, pero HBCK2 es menos presumptuoso. En hbase-2.x, el operador determina lo que hay que arreglar y luego usa herramientas, entre ellas HBCK2, para hacer las reparaciones.

HBCK2 vs HBCK1

HBCK2 es el sucesor de HBCK, la herramienta de reparación que se incluía con hbase-1.x (también conocida como HBCK1). Puede usar HBCK2 en lugar de HBCK1 para hacer reparaciones contra clústeres hbase-2.x. HBCK1 no debería ejecutarse contra una instalación hbase-2.x porque podría causar daños. Su facilidad de escritura (-fix) se eliminó. Puede informar sobre el estado de un clúster hbase-2.x, pero sus evaluaciones son inexactas porque no entiende el funcionamiento interno de un hbase-2.x.

HBCK2 no funciona como solía hacerlo HBCK1, incluso en los casos en los que los comandos tienen nombres similares en las dos versiones.

Obtain HBCK2

Puede encontrar la versión en el directorio de distribución de HBase. Para más información, consulte la página de descargas HBase.

Interfaz de usuario maestra: el informe HBCK

Una página de Informe HBCK agregada al Maestro en 2.1.6 en /hbck.jsp muestra la salida de dos inspecciones ejecutadas por el Maestro en un intervalo. Una es la salida de CatalogJanitor cada vez que se ejecuta. Si se encuentran superposiciones o agujeros en hbase:meta, la CatalogJanitor enumera lo que encontró. Otro proceso chore en segundo plano compara el hbase:meta y el contenido del sistema de archivos. Si se encuentra una anomalía, hace una nota en su sección Informe HBCK.

Para ejecutar el CatalogJanitor, ejecute el comando en el shell hbase: catalogjanitor_run.

Para ejecutar el hbck chore, ejecute el comando en el shell hbase: hbck_chore_run.

Ambos comandos no toman ninguna entrada.

Run HBCK2

Puede ejecutar el comando hbck a través del script $HBASE_HOME/bin/hbase. De manera predeterminada, cuando ejecuta bin/hbase hbck, se ejecuta la herramienta incorporada HBCK1. Para ejecutar HBCK2, necesita apuntar a un jar HBCK2 creado con la opción -j, como en este ejemplo:

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

Este comando imprime la ayuda de HBCK2, sin pasar opciones o argumentos.

Comandos HBCK2

Nota

Pruebe estos comandos en un clúster de prueba para comprender la funcionalidad antes de ejecutarlos en un entorno de producción.

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

Opciones:

  • -o,--override: invalida la propiedad de otro procedimiento.
  • -i,--inputFiles: toma uno o varios nombres de región codificados.

Esta asignación raw puede usarse incluso durante la inicialización del Maestro (si se especifica la bandera -skip). Se salta los coprocesadores y pasa uno o más nombres de región codificados. de00010733901a05f5a2a3a382e27dd4 es un ejemplo de lo que es un nombre de región codificado en espacio de usuario. Por ejemplo:

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

Devuelve los PID de los AssignProcedures creados o -1 si no hay ninguno. Si se especifica -i or --inputFiles, pasa uno o más nombres de archivos de entrada. Cada archivo contiene nombres de región codificados, uno por línea. Por ejemplo:

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

Opciones:

  • -o,--override: invalida la propiedad de otro procedimiento.
  • -i,--inputFiles: toma uno o varios archivos de entrada de nombres codificados.

Esta desasignación raw puede usarse incluso durante la inicialización del Maestro (si se especifica la bandera -skip). Se salta los coprocesadores y pasa uno o más nombres de región codificados. de00010733901a05f5a2a3a382e27dd4 es un ejemplo de cómo se ve un nombre de región codificado en el espacio de anulación del usuario. Por ejemplo:

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

Devuelve los PID de los UnassignProcedures creados o -1 si no hay ninguno. Si se especifica -i or --inputFiles, pasa uno o más nombres de archivos de entrada. Cada archivo contiene nombres de región codificados, uno por línea. Por ejemplo:

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

Opciones:

  • -o,--override: invalida si el procedimiento está en ejecución o atascado.
  • -r,--recursive: pasa por alto el primario y el secundario. Esta opción es lenta y costosa.
  • -w,--lockWait: espera milisegundos antes de abandonar. Default=1.
  • -i,--inputFiles: toma uno o varios archivos de entrada de PID.

Pasa uno o más PID de procedimientos para saltar al final del procedimiento. El elemento primario del procedimiento omitido se omite hasta el final. Las entidades quedan en un estado inconsistente y requieren reparación manual. Puede necesitar un reinicio Maestro para borrar los bloqueos que aún se mantienen. Si el procedimiento tiene secundarios, el bypass da error. Agregue recursive si todo lo que tiene es un PID primario para finalizar los elementos primarios y secundarios. Esta opción es lenta y peligrosa, así que úsela selectivamente. No siempre funciona.

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

Si -i or --inputFiles se especifica, pase uno o varios nombres de archivo de entrada. Cada archivo contiene PID, uno por línea. Por ejemplo:

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

Opción:

  • i,--inputFiles: toma uno o varios archivos de entrada de nombres de espacio de nombres o nombres de tabla.

Use esta opción cuando falten regiones en hbase:meta pero los directorios sigan presentes en HDFS. Este comando es solo un método de comprobación. Está diseñado con fines informativos y no realiza ninguna corrección. Proporciona una vista de qué regiones (si las hay) se leerán en hbase:meta, agrupadas por tabla o espacio de nombres respectivo.

Para leer regiones en meta, ejecute addFsRegionsMissingInMeta. Este comando debe hbase:meta estar en línea. Para cada espacio de nombres/tabla pasada como parámetro, realiza una diferencia entre las regiones disponibles en hbase:meta y los directorios de regiones existentes en HDFS. Los directorios de región sin coincidencias se imprimen en su nombre de tabla relacionado. Las tablas sin regiones que faltan muestran un mensaje "No faltan regiones". Si no se especifica ningún espacio de nombres o tabla, comprueba todas las regiones existentes.

Acepta una combinación de múltiples espacios de nombres y tablas. Los nombres de tabla deben incluir la parte del espacio de nombres, incluso para tablas en el espacio de nombres predeterminado. De lo contrario, asume un valor de espacio de nombres. Este ejemplo desencadena informes de regiones faltantes para las tablas table_1 y table_2, en un espacio de nombres predeterminado:

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

Este ejemplo desencadena un informe de regiones que faltan para la tabla table_1 en un espacio de nombres predeterminado, y para todas las tablas del espacio de nombres 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

Devuelve una lista de regiones que faltan para cada tabla pasada como parámetro, o para cada tabla en espacios de nombres especificados como parámetro. Si se especifica -i or --inputFiles, pasa uno o más nombres de archivos de entrada. Cada archivo contiene <NAMESPACE|NAMESPACE:TABLENAME>, uno por línea. Por ejemplo:

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

Opción:

  • -i,--inputFiles: toma uno o más archivos de entrada de nombres de tablas de espacios de nombres que se usarán cuando falten regiones de hbase:meta pero los directorios sigan presentes en HDFS. Debe hbase:meta estar en línea.

Para cada nombre de tabla pasado como parámetro, realiza una diferencia entre las regiones disponibles en hbase:meta y los directorios de regiones en HDFS. Entonces, para los directorios que no coincidan con hbase:meta, lee el archivo de metadatos regioninfo y recrea una región específica en hbase:meta. Las regiones se vuelven a crear en estado CERRADO en la tabla hbase:meta, pero no en la caché Masters. Tampoco se asignan. Para poner en línea estas regiones, ejecute el comando HBCK2 assigns impreso cuando termine la ejecución de este comando.

Si usa versiones de hbase anteriores a la 2.3.0, es necesario reiniciar HMasters antes de ejecutar el conjunto de salida assigns. Este ejemplo agrega regiones faltantes para las tablas tbl_1 en el espacio de nombres predeterminado, tbl_2 en el espacio de nombres n1, y para todas las tablas del espacio de nombres 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

Devuelve HBCK2 y un comando assigns con todas las regiones reinsertadas. Si se especifica -i or --inputFiles, pasa uno o más nombres de archivos de entrada. Cada archivo contiene <NAMESPACE|NAMESPACE:TABLENAME>, uno por línea. Por ejemplo:

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

Opciones:

  • -f, --fix: corrige meta mediante la eliminación de todas las regiones extra encontradas.
  • -i,--inputFiles: toma uno o varios archivos de entrada de nombres de espacio de nombres o nombres de tabla.

Informa de las regiones presentes en hbase:meta pero sin directorios relacionados en el sistema de archivos. hbase:meta debe estar en línea. Para cada nombre de tabla que se pasa como parámetro, realiza una diferencia entre las regiones disponibles en hbase:meta y los directorios de región en el sistema de archivos específico. Las regiones adicionales se eliminarán de Meta si se pasa la opción --fix.

Nota

Antes de decidir usar la opción --fix, vale la pena comprobar si las regiones extra reportadas se superponen con regiones válidas existentes. Si es así, entonces extraRegionsInMeta --fix es la solución óptima. En caso contrario, el comando assigns es la solución más sencilla. Vuelve a crear los directorios de las regiones en el sistema de archivos, si no existen.

Este ejemplo genera informes de regiones adicionales para table_1 bajo el espacio de nombres predeterminado, y para todas las tablas del espacio de nombres 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

Este ejemplo lanza informes de regiones extra para table_1 bajo el espacio de nombres predeterminado, y para todas las tablas del espacio de nombres ns1 con la opción fix:

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

Devuelve una lista de regiones extra para cada tabla pasada como parámetro, o para cada tabla en espacios de nombres especificados como parámetro. Si -i or --inputFiles se especifica, pase uno o varios nombres de archivo de entrada. Cada archivo contiene <NAMESPACE|NAMESPACE:TABLENAME>, uno por línea. Por ejemplo:

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

Nota

Esta opción no funciona bien con HBase 2.1.6. No se recomienda su uso en un clúster HBase 2.1.6.

Realice una corrección del lado servidor de un estado incorrecto o incoherente en hbase:meta. La interfaz de usuario principal tiene una nueva pestaña HBCK Report que vuelca los informes generados por la ejecución más reciente de catalogjanitor y una nueva hbck chore.

Es fundamental que hbase:meta primero se ponga en buen estado antes de hacer cualquier otra reparación. Soluciona holes y overlaps, y crea directorios de regiones (vacíos) en HDFS para que coincidan con las regiones agregadas a hbase:meta.

Este comando no es el mismo que el antiguo comando hbck1 de nombre similar. Funciona con los informes generados por las últimas ejecuciones catalog_janitor y hbck chore. Si no hay nada que arreglar, la ejecución es un bucle. De lo contrario, si el HBCK Report informa de problemas, una ejecución de fixMeta soluciona los problemas de 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>

Este comando intenta arreglar una tabla huérfana mediante la generación de un archivo descriptor de tabla faltante. Este comando no tiene efecto si falta la carpeta de la tabla o si .tableinfo está presente. (Este comando comprueba primero si TableDescriptor está almacenado en caché en HBase Master, en cuyo caso recupera .tableinfo en consecuencia. Si TableDescriptor no se almacena en caché en Maestro, crea un archivo .tableinfo predeterminado con los siguientes elementos:

  • El nombre de la tabla.
  • la lista de familias de columnas determinada en función del sistema de archivos.
  • Propiedades predeterminadas para TableDescriptor y ColumnFamilyDescriptors. Si el archivo .tableinfo se generó mediante parámetros predeterminados, asegúrese de comprobar posteriormente las propiedades de la tabla o de la familia de columnas. (Cámbielas si es necesario.) Este método no cambia nada en HBase. Solo escribe el nuevo archivo .tableinfo en el sistema de archivos. Para las tablas huérfanas, por ejemplo, ServerCrashProcedures para pegar, puede que tenga que corregir el error después de generar los archivos de información de la tabla que faltan.
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>...]

Opciones:

  • -f, --fix: corrige cualquier problema de replicación encontrado.
  • -i,--inputFiles: toma uno o más archivos de entrada de nombres de tablas.

Busca colas de replicación no eliminadas y las elimina si se pasa la opción --fix. Pasa un nombre de tabla para comprobar la barrera de replicación y purgar si --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

Si se especifica -i or --inputFiles, pasa uno o más nombres de archivos de entrada. Cada archivo contiene <TABLENAME>, uno por línea. Por ejemplo:

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

Opción:

  • -i,--inputFiles: toma uno o más archivos de entrada de nombres de regiones y estados codificados.

Posibles estados de región:

  • OFFLINE
  • OPENING
  • OPEN
  • CLOSIN
  • CLOSED
  • SPLITTING
  • SPLIT
  • FAILED_OPEN
  • FAILED_CLOSE
  • MERGING
  • MERGED
  • SPLITTING_NEW
  • MERGING_NEW
  • ABNORMALLY_CLOSED

Advertencia

Esta opción de riesgo está pensada para usarse solo como último recurso.

Ejemplos de escenarios incluyen desasignaciones o asignaciones que no pueden avanzar porque la región se encuentra en un estado inconsistente en hbase:meta. Por ejemplo, el comando unassigns solo puede proceder si se pasa por una región en uno de los siguientes estados: DIVISIÓN, SEPARACIÓN, FUSIÓN, ABIERTO o CIERRE.

Antes de establecer manualmente el estado de una región con este comando, asegúrese de que esta región no es administrada por un procedimiento en ejecución, como assign o split. Puede obtener una vista de los procedimientos en ejecución en el shell hbase mediante el comando list_procedures. En este ejemplo se establece la región de00010733901a05f5a2a3a382e27dd4 como CERRADA:

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

Devuelve 0 si el estado de la región cambió y 1 si no. Si -i or --inputFiles se especifica, pase uno o varios nombres de archivo de entrada. Cada archivo contiene <ENCODED_REGIONNAME> <STATE>, uno por línea. Por ejemplo:

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

Opción:

  • -i,--inputFiles: toma uno o más archivos de entrada de nombres de tablas y estados.

Los posibles estados de las tablas son HABILITADO, DESHABILITADO, DESHABILITANDO y HABILITANDO.

Para leer el estado actual de la tabla, en el intérprete de comandos hbase, ejecute:

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

Un valor de x08x00 == HABILITADA, x08x01 == DESHABILITADA, etc. También puede ejecutar describe <TABLENAME> en el prompt del shell. Este ejemplo hace que el usuario de nombre de tabla esté HABILITADO:

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

Devuelve cualquiera que fuera el estado anterior de la tabla. Si se especifica -i or --inputFiles, pasa uno o más nombres de archivos de entrada. Cada archivo contiene <TABLENAME> <STATE>, uno por línea. Por ejemplo:

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

Opción:

  • -i,--inputFiles: toma uno o más archivos de entrada de nombres de servidores.

Programa ServerCrashProcedure(SCP) para una lista de RegionServers. Formatea el nombre del servidor como <HOSTNAME>,<PORT>,<STARTCODE>. (Consulte HBase UI/logs.)

En este ejemplo se usa 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

Devuelve los PID de los ServerCrashProcedures creados o -1 si no se crea ningún procedimiento. (Consulte los registros Maestros para saber por qué no lo hace.) El soporte de comandos se agrega en las versiones de HBase 2.0.3, 2.1.2, 2.2.0, o más recientes. Si se especifica -i or --inputFiles, pasa uno o más nombres de archivos de entrada. Cada archivo contiene <SERVERNAME>, uno por línea. Por ejemplo:

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

Solucionar problemas

Esta sección le ayuda a solucionar los problemas más comunes.

Principios generales

Al hacer una reparación, asegúrese primero de que hbase:meta es consistente antes de arreglar cualquier otro tipo de problema, como una desviación en el sistema de archivos. Las desviaciones en el sistema de archivos o los problemas con las asignaciones deben solucionarse después de poner en orden el hbase:meta. Si hbase:meta tiene problemas, el Maestro no puede hacer colocaciones apropiadas cuando adopta datos huérfanos del sistema de archivos o hace asignaciones de regiones.

No se puede asignar una región si está en estado CERRADO (o a la inversa, sin asignar si está en estado ABIERTO) sin pasar primero por CERRADO. Las regiones siempre deben pasar de CERRADA, a ABIERTA, a ABIERTA, y luego a CERRADA y CERRADA.

Al realizar una reparación, arregle las tablas de una en una.

Si una tabla está DESHABILITADA, no puedes asignar una región. En los registros maestros, verá que los informes maestros se omiten porque la tabla está deshabilitada. Puede asignar una región porque actualmente está en estado ABIERTO y quiere que esté en estado CERRADO para que coincida con el estado DESHABILITADO de la tabla. En esta situación, puede que tengas que poner temporalmente el estado de la tabla en HABILITADO para poder hacer la asignación. A continuación, vuelva a establecerlo después de la sentencia de desasignación. HBCK2 tiene facilidad para permitirle realizar este cambio. Consulte la salida de uso de HBCK2.

Asignar y desasignar

Por lo general, al asignar, el maestro persiste hasta que se realiza correctamente. Una asignación toma un bloqueo exclusivo en la región. El bloqueo impide que se ejecute una asignación o desasignación simultánea. Una asignación en una región bloqueada espera hasta que se libere el bloqueo antes de avanzar.

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.

El maestro no puede continuar el inicio porque no hay ningún procedimiento que asignar hbase:meta (o hbase:namespace). Para insertar uno, use la herramienta HBCK2:

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

En este ejemplo, 1588230740 es el nombre codificado de la región hbase:meta. Pase la opción -skip para evitar que HBCK2 haga una comprobación de versión contra el Maestro remoto. Si el Maestro remoto no está activo, la comprobación de versión solicita un Master is initializing response o PleaseHoldException y abandona el intento de asignación. El comando -skip evita la comprobación de versión y realiza la asignación programada.

Lo mismo puede ocurrir con la tabla de sistema hbase:namespace. Busque el nombre de región codificado de la región hbase:namespace y siga pasos similares a los que hicimos para hbase:meta. En este último caso, el Maestro realmente imprime un mensaje de ayuda que se parece a este ejemplo:

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.

Para programar una asignación para la tabla hbase:namespace indicada en la línea de registro anterior:

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

Pase el nombre codificado de la región del espacio de nombres. (El nombre codificado varía según la implementación).

Regiones que faltan en hbase:meta region/table restore/rebuild

En algunos casos inusuales se eliminaron regiones de tabla de la tabla hbase:meta. La evaluación de estos casos reveló que eran inducidos por el operador. Los usuarios ejecutaron la herramienta obsoleta HBCK1 OfflineMetaRepair en un clúster HBCK2. OfflineMetaRepair es una herramienta conocida para corregir hbase:meta problemas relacionados con la tabla en las versiones de HBase 1.x. La versión original no es compatible con HBase 2.x o versiones superiores, por lo que ha sufrido algunos ajustes. En situaciones extremas, ahora se puede ejecutar a través de HBCK2.

En la mayoría de estos casos, las regiones terminan faltando en hbase:meta al azar, pero hbase puede seguir funcionando. En este tipo de situaciones, el problema se puede solucionar con el Maestro en línea mediante el comando addFsRegionsMissingInMeta en HBCK2. Este comando es menos disruptivo para hbase que una reconstrucción completa de hbase:meta, que se explica más adelante. Se puede usar incluso para recuperar la región de la tabla de espacios de nombres.

Regiones extra en hbase:meta region/table restore/rebuild

También puede haber situaciones en las que se eliminaron regiones de tabla en el sistema de ficheros, pero aún existen entradas relacionadas en la tabla hbase:meta. Esto puede ocurrir debido a problemas en la división, errores en la operación manual (como borrar o mover el dir de región manualmente), o incluso problemas de pérdida de datos meta info como HBASE-21843.

Este tipo de problemas se pueden solucionar con el Maestro en línea mediante el comando extraRegionsInMeta --fix en HBCK2. Este comando es menos disruptivo para hbase que una reconstrucción completa de hbase:meta, que se explica más adelante. También es útil cuando esto ocurre en versiones que no admiten la opción fixMeta HBCK2 (cualquier versión anterior a 2.0.6, 2.1.6, 2.2.1, 2.3.0, o 3.0.0).

Receta de reconstrucción hbase:meta en línea

Si la corrupción de hbase:meta no es muy crítica, hbase aún puede ponerla en línea. Incluso si la región del espacio de nombres está entre las regiones que faltan, es posible escanear hbase:meta durante el periodo de inicialización, donde el Maestro espera a que se asigne el espacio de nombres. Para comprobar esta situación, se puede ejecutar un comando de escaneo hbase:meta. Si no se agota el tiempo de espera ni muestra ningún error, el hbase:meta está en línea:

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

HBCK2 addFsRegionsMissingInMeta se puede usar si el mensaje no muestra ningún error. Lea la información de metadatos de región disponible en los directorios de región FS para recrear regiones en hbase:meta. Ya que puede ejecutarse con hbase parcialmente operativo, intentará deshabilitar las tablas en línea afectadas por el problema reportado y leerá las regiones en hbase:meta. Puede comprobar tablas o espacios de nombres específicos, o todas las tablas de todos los espacios de nombres. Este ejemplo muestra la adición de regiones faltantes para las tablas tbl_1 en el espacio de nombres predeterminado, tbl_2 en el espacio de nombres n1, y para todas las tablas del espacio de nombres 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

Como funciona independientemente de Maestro, después de que termine correctamente, se requieren más pasos para que se asignen las regiones leídas. Estos mensajes se enumeran a continuación:

  • addFsRegionsMissingInMeta genera un comando assigns con todas las regiones que se han leído. Este comando se debe ejecutar más tarde, así que cópielo y guárdelo por conveniencia.
  • Para versiones de HBase anteriores a la 2.3.0, después de que addFsRegionsMissingInMeta finalice correctamente y se guarde la salida, reinicie todos los Maestros HBase en ejecución.

Una vez que los Maestros se reinicien y hbase:meta ya esté en línea (comprueba si la interfaz de usuario web es accesible), ejecute el comando de asignaciones de la salida addFsRegionsMissingInMeta guardada anteriormente.

Nota

Si la región del espacio de nombres está entre las regiones que faltan, es necesario agregar la marca --skip al principio del comando de asignaciones devuelto.

Si un clúster sufre una pérdida catastrófica de la tabla hbase:meta, es posible realizar una reconstrucción aproximada mediante la siguiente receta. En esquema, se detiene el clúster. Ejecute la herramienta HBCK2 OfflineMetaRepair, que lee los directorios y metadatos arrojados al sistema de archivos y hace el mejor esfuerzo por reconstruir una tabla hbase:met viable. Reinicie el clúster. Inserte una asignación para poner en línea la tabla del espacio de nombres del sistema. Por último, reasigne las tablas de espacio de usuario que desee habilitar. (La hbase:meta reconstruida crea una tabla con todas las tablas fuera de línea y sin regiones asignadas).

Receta de recompilación detallada

Nota

Use esta opción solo como último recurso. Esta opción no se recomienda.

  • Detenga el clúster.

  • Ejecute el comando de recompilación hbase:meta desde HBCK2. Este comando aparta la hbase:meta original y coloca en su lugar una recién reconstruida. Este ejemplo muestra cómo ejecutar la herramienta. Agrega la marca -details para que la herramienta vuelque información sobre las regiones que encontró en 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
    
  • Inicie el clúster. No se iniciará completamente. Se bloquea porque la tabla del espacio de nombres no está en línea y no hay ningún procedimiento de asignación en el almacén de procedimientos para esta contingencia. El registro HBase Master muestra este estado. Este ejemplo muestra lo que registra:

    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.
    

    Para asignar la región de la tabla de espacio de nombres, no puede usar el shell. Si usa el intérprete de comandos, se produce un error con PleaseHoldException porque el Maestro aún no se ha iniciado. (Está esperando a que la tabla de espacio de nombres esté en línea antes de declararse "up"). Tienes que usar el comando de asignación HBCK2. Para asignar, necesita el nombre codificado del espacio de nombres. Se muestra en el registro entre comillas. En este caso es 725a0fe6c2c869d3d0a9ed82bfa80fa3. Tiene que pasar el comando -skip para saltarse la comprobación de la versión maestra. (Sin él, su invocación HBCK2 provoca el PleaseHoldException porque el Maestro aún no está en marcha). Este ejemplo agrega una asignación de la tabla de espacios de nombres:

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

    Si la invocación vuelve con Connection refused, ¿está activo el Maestro? El maestro se apagará después de un tiempo si no se puede inicializar. Reiniciar el clúster o maestro y volver a ejecutar el comando de asignación.

  • Cuando las asignaciones se ejecutan correctamente, se ve que emite algo similar al siguiente ejemplo. El 48 al final es el PID de la programación del procedimiento de asignación. Si el PID devuelto es -1, el inicio del Maestro no progresó lo suficiente, así que reinténtelo. O bien, el nombre codificado de la región podría ser incorrecto, así que compruebe este problema.

    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]
    
  • Compruebe los registros maestros. El master debería haber llegado. Verá la finalización correcta de PID=48. Busque una línea como la de este ejemplo para verificar que el Maestro se inició correctamente:

    master.HMaster: Master has completed initialization 132.515sec
    

    Es posible que tarde un rato en aparecer.

    La recompilación de hbase:meta agrega las tablas de usuario en estado DISABLED y las regiones en modo CLOSED. Vuelva a habilitar las tablas a través del intérprete de comandos para que todas las regiones de las tablas vuelvan a estar en línea. Hágalo de una en una o vea el comando enable all ".*" para habilitar todas las tablas a la vez.

    A la meta de reconstrucción le faltan ediciones y es posible que necesite una reparación y limpieza posteriores mediante el uso de la herramienta descrita anteriormente en este artículo.

Archivos de referencia quitados, archivos de hbase.version que faltan y archivos dañados

HBCK2 puede comprobar si hay referencias bloqueadas y archivos dañados. Puede pedirle que deje de lado los archivos erróneos, lo que puede necesitarse para superar los obstáculos en los que las regiones no se conectan o las lecturas son incorrectas. Consulte el comando file-system en el listado de HBCK2. Pase uno o más nombres de tablas (o use none para comprobar todas las tablas). Se notifican archivos incorrectos. Pase la opción --fix para hacer reparaciones.

Procedimiento de reinicio

Como último recurso, si el Maestro se encuentra destrozado y todos los intentos de reparación solo dan como resultado bloqueos deshechos o procedimientos que no pueden terminar, o si el conjunto de MasterProcWALs está creciendo sin límites, es posible limpiar el estado del Maestro. Mueva a un lado el directorio /hbase/MasterProcWALs/ bajo su instalación HBase y reinicie el proceso Maestro. Vuelve como un formato tabular sin memoria.

Si en el momento del borrado todas las regiones estaban asignadas o desactivadas correctamente, al reiniciar el Maestro, éste debería continuar como si nada hubiera pasado. Pero si había regiones en transición en ese momento, el operador tiene que intervenir para llevar las asignaciones o desasignaciones pendientes a su punto terminal.

Para determinar lo que hay que asignar o desasignar, lea las columnas hbase:metainfo:state como se ha descrito. Una vez borrado todo el historial apartando el MasterProcWALs, ninguna de las entidades debería estar bloqueada, por lo que es libre de asignar o desasignar en forma masiva.