sql >> Base de Datos >  >> NoSQL >> HBase

Presentamos las políticas de partición de compactación de almacenamiento de objetos medianos (MOB) de Apache HBase

Introducción

La característica de almacenamiento de objetos medianos (MOB) de Apache HBase fue introducida por HBASE-11339. Esta característica mejora el acceso de lectura y escritura de baja latencia para valores de tamaño moderado (idealmente de 100K a 10 MB según los resultados de nuestras pruebas), por lo que es ideal para almacenar documentos, imágenes y otros objetos de tamaño moderado [1]. La función Apache HBase MOB logra esta mejora al separar las rutas de E/S para las referencias de archivos y los objetos MOB, aplicando diferentes políticas de compactación a los MOB y, por lo tanto, reduciendo la amplificación de escritura creada por las compactaciones de HBase. Los objetos MOB se almacenan en una región especial, denominada región MOB. Los objetos MOB para una tabla se almacenan en la región MOB como archivos MOB, lo que significa que habrá muchos archivos MOB en esta región. Consulte la Figura 1 de [1] para conocer la arquitectura Apache HBase MOB.

Figura 1 Arquitectura MOB de Apache HBase

Inicialmente, los archivos MOB son relativamente pequeños (menos de 1 o 2 bloques HDFS). Para mejorar la eficiencia de Apache HDFS, los archivos MOB se fusionan periódicamente en archivos más grandes a través de una operación llamada compactación MOB , que es independiente del proceso normal de compactación. La versión inicial de la compactación MOB reescribe los múltiples archivos MOB de un día en particular en archivos MOB más grandes para ese día. Usemos la lista de archivos de ejemplo a continuación para aclarar esto. La tabla t1 tiene dos regiones (r1, r2), tiene una familia de columnas (f1) y MOB habilitado. Puedes ver que hay dos prefijos; D279186428a75016b17e4df5ea43d080 corresponde al valor hash de la clave de inicio para la región r1 y D41d8cd98f00b204e9800998ecf8427e al valor hash de la clave de inicio para la región r2. Para la región r1, hay dos archivos MOB el 1/1/2016 y el 2/1/2016, y para la región r2, hay 3 archivos MOB el 1/1/2016 en la región MOB, que es /hbase/data/ mobdir/data/default/t1/78e317a6e78a0fceb27b9fa0cb9dcf5b/f1.

>ls  /hbase/data/mobdir/data/default/t1/78e317a6e78a0fceb27b9fa0cb9dcf5b/f1

D279186428a75016b17e4df5ea43d08020160101 f9d9713ab2fb4a8b825485f6a8accfcd5

D279186428a75016b17e4df5ea43d08020160101 af7713ab2fbf4a8abc5135f6a8467ca8

D279186428a75016b17e4df5ea43d08020160102 9013ab2fceda8b825485f6a8acfcd515

D279186428a75016b17e4df5ea43d08020160102 9a7978013ab2fceda8b825485f6a8acf

D41d8cd98f00b204e9800998ecf8427e20160101 fc94af623c2345f1b241887721e32a48

D41d8cd98f00b204e9800998ecf8427e20160101 d0954af623c2345f1b241887721e3259

D41d8cd98f00b204e9800998ecf8427e20160101 439adf4af623c2345f1b241887721e32

Después de la compactación MOB, dos archivos MOB el 1/1/2016 y el 2/1/2016 para la región r1 se compactan en un archivo para cada día. Tres archivos MOB del 1/1/2016 para la región r2 se compactan en un solo archivo.

D279186428a75016b17e4df5ea43d08020160101 f49a9d9713ab2fb4a8b825485f6a8acf

D279186428a75016b17e4df5ea43d08020160102 bc9176d09424e49a9d9065caf9713ab2

D41d8cd98f00b204e9800998ecf8427e20160101 d9cb0954af623c2345f1b241887721e3

Dado que solo los archivos MOB del mismo día para una región se pueden compactar juntos, el límite mínimo de archivos MOB en el directorio de región MOB único para una familia específica en un año será 365 x número de regiones. Con 1000 regiones, en 10 años, habrá 365 x 1000 x 10, 3,65 millones de archivos después de la compactación MOB, ¡y sigue creciendo! Desafortunadamente, Apache HDFS tiene un límite de memoria limitado para la cantidad de archivos en un directorio [2]. Una vez que el número de archivos MOB supera este límite de HDFS, la tabla MOB ya no se puede escribir. El número máximo predeterminado de archivos en un directorio para Apache HDFS es 1 millón. Para 1000 regiones, alcanzará este límite en aproximadamente 3 años. Con más regiones, alcanzará el límite más rápido.

HBASE-16981 presenta políticas de agregación de particiones de compactación MOB semanales y mensuales para mejorar este problema de escalado del recuento de archivos MOB en factores de 7 o ~30 respectivamente.

Diseño de políticas de partición de compactación MOB semanales y mensuales (HBASE-16981)

La idea básica de HBASE-16981 es compactar archivos MOB en una semana calendario o un mes calendario en menos archivos más grandes. La semana calendario está definida por la norma ISO 8601, comienza el lunes y termina el domingo. Normalmente, con la política semanal, después de la compactación MOB habrá un archivo por semana por región; con la política mensual, después de la compactación MOB habrá un archivo por mes por región. La cantidad de archivos MOB en el directorio de regiones MOB para una familia específica en un año se reducirá a 52 x número de regiones con póliza semanal y 12 x número de regiones con póliza mensual. Esto reduce en gran medida la cantidad de archivos MOB después de la compactación.

El enfoque propuesto inicial

Cuando ocurre la compactación de MOB, HBase master selecciona y agrega archivos MOB dentro de un mes calendario o una semana calendario en menos archivos más grandes. Dependiendo de la frecuencia con la que se produzca la compactación MOB, es posible que los archivos se compacten varias veces. Como ejemplo, supongamos que la operación de compactación MOB ocurre diariamente con una política de agregación mensual. El día 1, la compactación MOB compacta todos los archivos del día 1 en un solo archivo. El día 2, la compactación MOB compacta el archivo del día 1 y los archivos del día 2 en un nuevo archivo; el día 3, la compactación MOB compactará el archivo del día 2 y los archivos del día 3 en un nuevo archivo, continúa hasta el último día del mes. En este caso, los archivos del día 1 se compactan más de 30 veces y, por lo tanto, aumenta la cantidad de E/S de escritura en más de 30 veces.

El objetivo de diseño de Apache HBase MOB es reducir la amplificación de escritura creada por la compactación MOB. Este enfoque ingenuo anula el objetivo del diseño.

El enfoque final implementado

Para superar la deficiencia del enfoque propuesto inicial, se adopta la compactación de MOB por etapas para las nuevas pólizas semanales y mensuales en HBASE-16981. La Figura 2 muestra cómo funciona con la póliza mensual, funciona de manera similar para la póliza semanal.

Figura 2 Compactación de MOB por etapas con política mensual

Como muestra la Figura 2, la compactación de MOB ocurre el 15/11/2016. Los archivos de la semana del calendario actual se compactan en función de la partición diaria con un umbral de MOB configurado. En la Figura 2, los archivos del 14/11/2016 se compactan juntos, y los archivos del 15/11/2016 se compactan juntos. Los archivos de las últimas semanas del calendario del mes actual se compactan en función de la partición semanal con un umbral semanal (umbral MOB configurado x 7). En la Figura 2, los archivos del 1/11/2016 al 6/11/2016 se compactan juntos y los archivos del 7/11/2016 al 13/11/2016 se compactan juntos. Los archivos de los últimos meses se compactan en función de la partición mensual con un umbral mensual (umbral de MOB configurado x 28). En la Figura 2, los archivos del 1/10/2016 al 31/10/2016 se compactan juntos. Como se puede notar, la primera semana calendario en noviembre de 2016 es del 31/10/2016 al 6/11/2016. Dado que el 31/10/2016 es el mes pasado, los archivos para ese día se compactan en función de la partición mensual, lo que deja solo 6 días para la partición semanal (1/11/2016 ~ 6/11/2016). Después de la compactación, hay 5 archivos si el umbral de compactación MOB y ​​el tamaño del lote de compactación MOB se configuran correctamente.

Con este diseño, los archivos MOB pasan por compactaciones de 2 o 3 etapas. En cada etapa, la partición diaria, la partición semanal o la partición mensual se aplican con un umbral de compactación MOB creciente. Los archivos MOB se compactan como máximo 3 veces normalmente con una política mensual y como máximo 2 veces normalmente con una política semanal durante su vigencia.

Para obtener más detalles sobre el diseño, consulte [3].

Uso

De forma predeterminada, la política de partición de compactación MOB es diaria. Para aplicar la política semanal o mensual, se agregó un nuevo atributo MOB_COMPACT_PARTITION_POLICY para la familia de columnas MOB. El usuario puede establecer este atributo al crear una tabla desde el shell de HBase.

>create 't1', {NAME => 'f1', IS_MOB => true, MOB_THRESHOLD => 1000000, MOB_COMPACT_PARTITION_POLICY => 'weekly’}

El usuario también puede cambiar la MOB_COMPACT_PARTITION_POLICY de la tabla existente desde el shell de HBase.

>alter 't1', {NAME => 'f1', MOB_COMPACT_PARTITION_POLICY => 'monthly'}

Si la política cambia de diaria a semanal o mensual, o de semanal a mensual, la siguiente compactación MOB volverá a compactar los archivos MOB que se han compactado con la política anterior. Si la política cambia de mensual o semanal a diaria, o de mensual a semanal, los archivos MOB ya compactados con la política anterior no se volverán a compactar con la nueva política.

Conclusión

HBASE-16981 resuelve el problema de escalado del número de archivo con Apache HBase MOB. Estará disponible en la versión Apache HBase 2.0.0. CDH es compatible con Apache HBase MOB en CDH 5.4.0+. HBASE-16981 está respaldado y estará disponible en CDH 5.11.0.

Agradecimientos

Un agradecimiento especial a Jingcheng Du y Anoop Sam John por su ayuda en el diseño y revisión de HBASE-16981, Jonathan Hsieh y Sean Busbey por revisar el blog.

Referencias

[1] https://clouderatemp.wpengine.com/blog/2015/06/inside-apache-hbases-new-support-for-mobs/

[2] https://clouderatemp.wpengine.com/blog/2009/02/the-small-files-problem/

[3] https://issues.apache.org/jira/browse/HBASE-16981