View a markdown version of this page

HBase en Amazon S3 (modo de almacenamiento de Amazon S3) - Amazon EMR

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

HBase en Amazon S3 (modo de almacenamiento de Amazon S3)

Si ejecuta HBase en la versión 5.2.0 de Amazon EMR o posteriores, puede habilitar HBase en Amazon S3, que ofrece las siguientes ventajas:

  • El directorio raíz de HBase se almacena en Amazon S3, incluidos los metadatos de tabla y los archivos de almacén de HBase. Estos datos son persistentes fuera del clúster, están disponibles a través de las zonas de disponibilidad de Amazon EC2 y no tiene que recuperar mediante instantáneas u otros métodos.

  • Con los archivos de almacén en Amazon S3, puede dimensionar el clúster de Amazon EMR en función de sus requisitos informáticos en lugar de sus requisitos de datos, con una replicación 3x en HDFS.

  • Mediante la versión 5.7.0 de Amazon EMR o posteriores, puede configurar un clúster de réplicas de lectura, lo que le permite mantener copias de solo lectura de los datos en Amazon S3. Puede acceder a los datos desde el clúster de réplicas de lectura para realizar operaciones de lectura de forma simultánea y en caso de que el clúster principal deje de estar disponible.

  • En las versiones de Amazon EMR desde la 6.2.0 hasta la 7.3.0, el seguimiento persistente de HFile usa una tabla del sistema HBase llamada hbase:storefile para rastrear directamente las rutas de HFile utilizadas para las operaciones de lectura. Esta característica está habilitada de forma predeterminada y no requiere ninguna migración manual. En las versiones posteriores a la 7.3.0, las rutas de HFile se rastrean mediante un rastreador de archivos, que almacena las rutas de HFile directamente en un metarchivo, dentro del directorio de la tienda.

nota

Los usuarios que utilicen una versión de Amazon EMR anterior a la 7.4.0 y estén migrando a una versión posterior, EMR-7.4.0 consulten Migración desde versiones anteriores de HBase y sigan la documentación de actualización disponible para garantizar una transición fluida.

La siguiente ilustración muestra los componentes de HBase relevantes para HBase en Amazon S3.

Arquitectura de HBase en Amazon S3.

Habilitar HBase en Amazon S3

Puede habilitar HBase en Amazon S3 mediante la consola de Amazon EMR, AWS CLI la o la API de Amazon EMR. La configuración es una opción durante la creación del clúster. Al utilizar la consola, elija la configuración mediante las Advanced options (Opciones avanzadas). Al utilizar la AWS CLI, utilice la opción --configurations para proporcionar un objeto de configuración JSON. Las propiedades del objeto de configuración especifican el modo de almacenamiento y la ubicación del directorio raíz en Amazon S3. La ubicación de Amazon S3 que especifique debe estar en la misma región que el clúster de Amazon EMR. Solo un clúster activo a la vez puede utilizar el mismo directorio raíz de HBase en Amazon S3. Para ver los pasos de la consola y un ejemplo detallado de creación de clústeres mediante la, consulte. AWS CLICreación de un clúster con HBase Un objeto de configuración de ejemplo se muestra en el siguiente fragmento de JSON.

{ "Classification": "hbase-site", "Properties": { "hbase.rootdir": "s3://amzn-s3-demo-bucket/my-hbase-rootdir"} }, { "Classification": "hbase", "Properties": { "hbase.emr.storageMode":"s3" } }
nota

Si utiliza un bucket de Amazon S3 como rootdir para HBase, debe agregar una barra al final del URI de Amazon S3. Por ejemplo, debe utilizar "hbase.rootdir: s3://amzn-s3-demo-bucket/", en lugar de "hbase.rootdir: s3://amzn-s3-demo-bucket", para evitar problemas.

Uso de un clúster de réplicas de lectura

Después de configurar un clúster principal mediante HBase en Amazon S3, puede crear y configurar un clúster de réplicas de lectura que proporcione acceso de solo lectura a los mismos datos que el clúster principal. Esto resulta útil cuando se necesita acceso simultáneo a datos de consulta o acceso ininterrumpido si el clúster principal deja de estar disponible. La característica de réplica de lectura está disponible en la versión 5.7.0 de Amazon EMR y posteriores.

El clúster principal y el clúster de réplicas de lectura se configuran de la misma forma con una importante diferencia. Ambos apuntan a la misma ubicación hbase.rootdir. Sin embargo, la clasificación hbase del clúster de réplicas de lectura incluye la propiedad "hbase.emr.readreplica.enabled":"true".

El clúster de réplicas de lectura está diseñado para operaciones de solo lectura y no se deben realizar acciones manuales de compactación o escritura en él. Para las versiones de Amazon EMR anteriores a la 7.4.0, se recomienda deshabilitar la compactación en el clúster de réplicas de lectura al habilitar la característica de réplicas de lectura. Esta precaución es necesaria porque, con la función de seguimiento persistente de archivos HFile habilitada en el clúster principal, es posible que el clúster de lectura-réplica compacte las tablas del sistema, lo que podría provocar una en el clúster principal. FileNotFoundException Al deshabilitar la compactación en el clúster de réplicas de lectura, se evitan las incoherencias de datos entre los clústeres principal y de réplicas de lectura.

Por ejemplo, dada la clasificación JSON del clúster principal, tal y como se ha mostrado anteriormente en el tema, la configuración de un clúster de réplicas de lectura para versiones de EMR anteriores a la 7.4.0 es la siguiente:

{ "Classification": "hbase-site", "Properties": { "hbase.rootdir": "s3://amzn-s3-demo-bucket/my-hbase-rootdir", "hbase.regionserver.compaction.enabled": "false" } }, { "Classification": "hbase", "Properties": { "hbase.emr.storageMode":"s3", "hbase.emr.readreplica.enabled":"true" } }

Para las versiones de Amazon EMR posteriores a la 7.3.0, ahora usamos la característica Seguimiento de archivos de almacenamiento, por lo que no es necesario deshabilitar las compactaciones.

Sincronización de la réplica de lectura al agregar datos

Como la réplica de lectura utiliza HBase StoreFiles y los metadatos que el clúster principal escribe en Amazon S3, la réplica de lectura solo es tan actualizada como el almacén de datos de Amazon S3. Las siguientes directrices pueden ayudarle a minimizar el retardo entre el clúster principal y la réplica de lectura al escribir datos.

  • Cargue los datos de forma masiva en el clúster principal siempre que sea posible. Para obtener más información, consulte Carga en bloque en la documentación de Apache HBase.

  • Debe llevarse a cabo un vaciado que escriba archivos de almacén en Amazon S3 tan pronto como sea posible después de agregar los datos. Realice el vaciado manualmente o bien ajuste la configuración de vaciado para minimizar el retardo.

  • Si las compactaciones se pudieran ejecutar automáticamente, ejecute una compactación manual para evitar incoherencias cuando se activen las compactaciones.

  • En el clúster de réplicas de lectura, cuando haya cambiado algún metadato; por ejemplo, cuando se producen compactaciones o división de región HBase o cuando las tablas se agregan o se borran, ejecute el comando refresh_meta.

  • En el clúster de réplicas de lectura, ejecute el comando refresh_hfiles cuando se añadan registros o se cambien en una tabla.

Sincronización de datos con una réplica de lectura de HBase

Seguimiento persistente de HFile

El seguimiento persistente de HFile utiliza una tabla del sistema HBase llamada hbase:storefile para rastrear directamente las rutas de HFile utilizadas para las operaciones de lectura. Las nuevas rutas de HFile se agregan a la tabla a medida que se agregan datos adicionales a HBase. Esto elimina las operaciones de cambio de nombre como mecanismo de confirmación en la ruta de escritura crítica de las operaciones de HBase y mejora el tiempo de recuperación al abrir una región de HBase al leer la tabla del sistema en lugar de la lista de directorios del sistema de archivos de hbase:storefile. Esta característica está habilitada de forma predeterminada en las versiones desde 6.2.0 hasta 7.3.0 de Amazon EMR y no requiere ningún paso de migración manual.

nota

El seguimiento persistente de HFile mediante la tabla del sistema de archivos de almacenamiento de HBase no admite la característica de replicación regional de HBase. Para obtener más información sobre la replicación de la región de HBase, consulte el número elevado de lecturas disponibles. Timeline-consistent

Deshabilitar el seguimiento persistente de archivos HFile

El seguimiento persistente de archivos HFile está habilitado de forma predeterminada a partir de la versión 6.2.0 de Amazon EMR. Para deshabilitar el seguimiento persistente de HFile, especifique la siguiente anulación de configuración al lanzar un clúster:

{ "Classification": "hbase-site", "Properties": { "hbase.storefile.tracking.persist.enabled":"false", "hbase.hstore.engine.class":"org.apache.hadoop.hbase.regionserver.DefaultStoreEngine" } }
nota

Al volver a configurar el clúster de Amazon EMR, se deben actualizar todos los grupos de instancias.

Sincronización manual de la tabla de archivos de almacenamiento

La tabla de archivos de almacenamiento se mantiene actualizada a medida que se crean nuevas instancias HFiles. Sin embargo, si la tabla de archivos de almacenamiento no está sincronizada con los archivos de datos por algún motivo, se pueden usar los comandos a continuación para sincronizar los datos de forma manual:

Sincronice la tabla de archivos de almacenamiento en una región en línea:

hbase org.apache.hadoop.hbase.client.example.RefreshHFilesClient <table>

Sincronice la tabla de archivos de almacenamiento en una región sin conexión:

  • Elimine la tabla de archivos de almacenamiento znode.

    echo "ls /hbase/storefile/loaded" | sudo -u hbase hbase zkcli [<tableName>, hbase:namespace] # The TableName exists in the list echo "delete /hbase/storefile/loaded/<tableName>" | sudo -u hbase hbase zkcli # Delete the Table ZNode echo "ls /hbase/storefile/loaded" | sudo -u hbase hbase zkcli [hbase:namespace]
  • Asigne la región (ejecute en el intérprete de comandos de HBase).

    hbase cli> assign '<region name>'
  • Si se produce un error en la asignación.

    hbase cli> disable '<table name>' hbase cli> enable '<table name>'

Escalar la tabla de archivos de almacenamiento

La tabla de archivos de almacenamiento se divide en cuatro regiones de forma predeterminada. Si la tabla de archivos de almacenamiento aún tiene una gran carga de escritura, se puede dividir aún más manualmente.

Para dividir una región activa específica, utilice el siguiente comando (ejecute en el intérprete de comandos de HBase).

hbase cli> split '<region name>'

Para dividir la tabla, utilice el siguiente comando (ejecute en el intérprete de comandos de HBase).

hbase cli> split 'hbase:storefile'

Seguimiento de archivos de almacenamiento

De forma predeterminada, utilizamos la FileBasedStoreFileTrackerimplementación. Esta implementación crea nuevos archivos directamente en el directorio de la tienda, lo que evita la necesidad de realizar operaciones de cambio de nombre. Mantiene una lista de las instancias de hfile confirmadas en la memoria, con respaldo de los metarchivos de cada directorio de la tienda. Cada vez que se confirma un nuevo archivo hfile, se actualiza la lista de archivos rastreados en el almacén en cuestión y se escribe un nuevo metaarchivo con el contenido de la lista, y se descarta el metarchivo anterior, que contiene una lista obsoleta. Puede encontrar más información sobre el seguimiento de archivos de almacenamiento en Store File Tracking en la guía de referencia de Apache HBase.

La implementación del FileBasedStoreFile rastreador está habilitada de forma predeterminada, a partir de la versión 7.4.0 de Amazon EMR:

{ "Classification": "hbase-site", "Properties": { hbase.store.file-tracker.impl: "org.apache.hadoop.hbase.regionserver.storefiletracker.FileBasedStoreFileTracker" } }

Para deshabilitar la FileBasedStoreFileTracker implementación, especifique la siguiente anulación de configuración al lanzar un clúster:

{ "Classification": "hbase-site", "Properties": { hbase.store.file-tracker.impl: "org.apache.hadoop.hbase.regionserver.storefiletracker.DefaultStoreFileTracker" } }
nota

Al volver a configurar el clúster de Amazon EMR, se deben actualizar todos los grupos de instancias.

Configuración de la política de lectura de S3A para HBase

A partir de la versión 7.10 de Amazon EMR, HBase en Amazon S3 usa el cliente del sistema de archivos S3A. De forma predeterminada, la propiedad fs.s3a.experimental.input.fadvise está establecida en normal. En este modo, S3A se adapta automáticamente entre las políticas de lectura secuencial y aleatoria en función del patrón de acceso observado en el flujo de entrada.

HBase en Amazon S3 se basa en lecturas secuenciales para compactaciones, escaneos y cargas masivas. En algunos casos, el modo normal puede cambiar a la política de lectura aleatoria. Esto puede suceder aunque las lecturas posteriores sigan siendo secuenciales. Cuando esto ocurre, el rendimiento de lectura para compactaciones, escaneos y cargas masivas puede degradarse considerablemente.

Versiones afectadas

Este problema se aplica a las versiones 7.10, 7.11, 7.12 y 7.13 de Amazon EMR con HBase.

Si presenta alguno de los siguientes síntomas, defina la política de lectura del S3A en: sequential

  • Compactaciones lentas

  • Un número creciente de HFiles

  • Operaciones de limpieza bloqueadas que provocan errores RegionTooBusyException

  • Operaciones de escaneo y carga masiva más lentas en comparación con las versiones anteriores de Amazon EMR

Especifique la siguiente configuración al crear el clúster:

[ { "Classification": "hbase-site", "Properties": { "fs.s3a.experimental.input.fadvise": "sequential" } } ]

Aplique esta propiedad a todos hbase-site.xml los nodos. El cambio surtirá efecto después de reiniciar los procesos del servidor principal y regional de HBase.

Cluster-wide configuración recomendada

Se recomienda configurarlo en sequential todo el clúster fs.s3a.experimental.input.fadvise para todas las cargas de trabajo de HBase en las versiones afectadas. Si aplica la configuración solo a comandos individuales, la degradación del rendimiento de las compactaciones y los escaneos persiste.

Configuración de la política de lectura para operaciones de carga masiva

Si solo necesita mejorar el rendimiento de las cargas masivas sin cambiar la configuración de todo el clúster, puede pasar la propiedad directamente al comando. completebulkload

Para usar la política de lectura secuencial para una sola operación de carga masiva:

sudo -u hbase hbase completebulkload \ -Dfs.s3a.experimental.input.fadvise=sequential \ s3://amzn-s3-demo-bucket/path/to/hfiles table_name

Como alternativa, puede usar EMRFS para la operación de carga masiva:

sudo -u hbase hbase completebulkload \ -Dfs.s3.impl=com.amazon.ws.emr.hadoop.fs.EmrFileSystem \ s3://amzn-s3-demo-bucket/path/to/hfiles table_name

Consideraciones operativas

Los servidores de la región HBase se utilizan BlockCache para almacenar las lecturas de datos en la memoria y BucketCache para almacenar las lecturas de datos en el disco local. Además, los servidores de región suelen almacenar las escrituras de datos en la memoria y utilizan los registros de escritura anticipada para almacenar las escrituras de datos en HDFS antes de que los datos se escriban en HBase en StoreFiles Amazon S3. MemStore El rendimiento de lectura del clúster se refiere a la frecuencia con la que un registro puede recuperarse en memoria o en las cachés de disco. Si se pierde la memoria caché, el registro se lee desde Amazon S3, que tiene una latencia y una desviación estándar significativamente más altas que la lectura desde HDFS. StoreFile Además, las velocidades de solicitud máximas en Amazon S3 son más bajas que las que se pueden conseguir en la caché local, por lo que el almacenamiento de datos en caché podría ser importante para cargas de trabajo con lectura intensiva. Para obtener más información, consulte Optimizar el rendimiento de Amazon S3 en la Guía del usuario de Amazon Simple Storage Service.

Para mejorar el rendimiento, le recomendamos que almacene en caché el máximo posible del conjunto de datos en el almacenamiento de instancias de EC2. Como BucketCache utiliza el almacenamiento de instancias EC2 del servidor regional, puede elegir un tipo de instancia EC2 con un almacén de instancias suficiente y añadir el almacenamiento de Amazon EBS para acomodar el tamaño de caché requerido. También puede aumentar el BucketCache tamaño de los almacenes de instancias adjuntos y los volúmenes de EBS mediante la propiedad. hbase.bucketcache.size La configuración predeterminada es 8 192 MB.

En el caso de las escrituras, la MemStore frecuencia de las descargas y el número de descargas StoreFiles presentes durante las compactaciones menores y mayores pueden contribuir considerablemente a aumentar los tiempos de respuesta de los servidores regionales. Para obtener un rendimiento óptimo, considere la posibilidad de aumentar el tamaño del multiplicador de bloques MemStore empotrado y HRegion, lo que aumenta el tiempo transcurrido entre las compactaciones principales, pero también aumenta el retraso en la coherencia si utiliza una réplica de lectura. En algunos casos, es posible obtener un mejor rendimiento mediante tamaños de bloque de archivo más grandes (pero inferiores a 5 GB) para activar la funcionalidad de carga multiparte de Amazon S3 en EMRFS. El tamaño de bloque predeterminado de Amazon EMR es de 128 MB. Para obtener más información, consulte Configuración de HDFS. No son frecuentes los clientes que superen un tamaño de bloque de 1 GB al realizar un análisis comparativo del rendimiento con vaciados y compactaciones. Además, las compactaciones HBase y los servidores regionales funcionan de manera óptima cuando es necesario compactar menos. StoreFiles

Las tablas pueden tardar mucho en eliminarse en Amazon S3, ya que es necesario cambiar de nombre directorios grandes. Considere la posibilidad de deshabilitar las tablas en lugar de eliminarlas.

Existe un proceso limpiador de HBase que limpia los archivos de almacén y los archivos WAL antiguos. En la versión 5.17.0 de Amazon EMR y posteriores, el limpiador está habilitado de forma global y se pueden utilizar las siguientes propiedades de configuración para controlar su comportamiento.

Propiedad de configuración Predeterminado Description (Descripción)

hbase.regionserver.hfilecleaner.large.thread.count

1

El número de subprocesos asignados para limpiar los HFiles grandes que han caducado.

hbase.regionserver.hfilecleaner.small.thread.count

1

El número de subprocesos asignados para limpiar los HFiles pequeños que han caducado.

hbase.cleaner.scan.dir.concurrent.size

Se establece en la cuarta parte de los núcleos disponibles.

El número de subprocesos para analizar los directorios oldWALs.

hbase.oldwals.cleaner.thread.size

2

El número de subprocesos para limpiar los WAL del directorio oldWALs.

En Amazon EMR 5.17.0 y versiones anteriores, el funcionamiento del limpiador puede afectar al rendimiento de las consultas cuando se ejecutan cargas de trabajo pesadas, por lo que le recomendamos que únicamente habilite el limpiador fuera de las horas punta. El limpiador tiene los siguientes comandos shell de HBase:

  • cleaner_chore_enabled consulta si el limpiador está habilitado.

  • cleaner_chore_run ejecuta manualmente el limpiador para eliminar archivos.

  • cleaner_chore_switch habilita o deshabilita el limpiador y devuelve el estado anterior del limpiador. Por ejemplo, cleaner_chore_switch true habilita el limpiador.

Propiedades para ajuste de rendimiento de HBase en Amazon S3

Los siguientes parámetros se pueden modificar para ajustar el rendimiento de la carga de trabajo cuando utilice HBase en Amazon S3.

Propiedad de configuración Predeterminado Description (Descripción)

hbase.bucketcache.size

8 192

La cantidad de espacio en disco, en MB, reservado en el servidor regional, los almacenes de instancias Amazon EC2 y los volúmenes de EBS para almacenamiento. BucketCache La configuración se aplica a todas las instancias de servidor de región. BucketCache Los tamaños más grandes suelen corresponder a un rendimiento mejorado

hbase.hregion.memstore.flush.size

134217728

El límite de datos, en bytes, a partir del cual el vaciado de memstore en Amazon S3 se activa.

hbase.hregion.memstore.block.multiplier

4

Multiplicador que determina el límite MemStore superior en el que se bloquean las actualizaciones. Si hbase.hregion.memstore.flush.size se MemStore supera el valor multiplicado por este valor, las actualizaciones se bloquean. MemStore Es posible que las descargas y la compactación desbloqueen las actualizaciones.

hbase.hstore.blockingStoreFiles

10

La cantidad máxima StoreFiles que puede haber en una tienda antes de que se bloqueen las actualizaciones.

hbase.hregion.max.filesize

10737418240

El tamaño máximo de una región antes de que la región se divida.

Cierre y restauración de un clúster sin pérdida de datos

Para cerrar un clúster de Amazon EMR sin perder datos que no se hayan escrito en Amazon S3, debe vaciar la MemStore memoria caché en Amazon S3 para escribir nuevos archivos de almacenamiento. En primer lugar, tendrá que deshabilitar todas las tablas. La siguiente configuración de paso puede utilizarse al añadir un paso al clúster. Para obtener más información, consulte Uso de pasos con la AWS CLI y la consola en la Guía de administración de Amazon EMR.

Name="Disable all tables",Jar="command-runner.jar",Args=["/bin/bash","/usr/lib/hbase/bin/disable_all_tables.sh"]

De forma alternativa, puede ejecutar el siguiente comando bash directamente.

bash /usr/lib/hbase/bin/disable_all_tables.sh

Después de deshabilitar todas las tablas, vacíe la tabla de hbase:meta con el intérprete de comandos de HBase y el siguiente comando.

flush 'hbase:meta'

A continuación, puede ejecutar un script de shell incluido en el clúster de Amazon EMR para vaciar la caché. MemStore Puede agregarlo como un paso o ejecutarlo directamente a través de la AWS CLI en el clúster. El script deshabilita todas las tablas de HBase, lo que provoca que MemStore el servidor de cada región pase a Amazon S3. Si el script se completa de forma satisfactoria, los datos persisten en Amazon S3 y el clúster puede terminarse.

Para reiniciar un clúster con los mismos datos de HBase, especifique la misma ubicación de Amazon S3 que el clúster anterior, ya sea en la propiedad de hbase.rootdir configuración Consola de administración de AWS o mediante ella.