estrategia de optimización HBase
- Solución de efecto de punto caliente
HBase causa de datos de temas de actualidad:
un gran número de solicitudes de lectura y escritura de usuario el acceso a grupo de HBase de uno o unos pocos RegionServer, lo que resulta en RegionServer aumento de la presión de carga puede causar una disminución en el rendimiento RegionServer, lo que resulta en los casos más graves, Servicio de ala;
- Cuando se crea la tabla pre-partición, no de acuerdo con la política por defecto, crear una tabla única región, pero si es necesario, crear múltiples Región como una tabla para evitar el efecto de los puntos calientes
- Basado en la rowKey pre-partición pre-basados partición
- 语法:
3.1 Crear 't1', 'f1', SPLITS => [ '10', '20', '30', '40']
3.2 Crear 't1', 'f1', SPLITS_FILE => 'splits.txt'
splits.txt
10
20
30
40
3.3 crear 'T2', 'F1', {NUMREGIONS => 15, SPLITALGO => 'HexStringSplit'}- Solución de problemas candentes requiere atención a lo siguiente fundamental
- Pre-partición
- rowKey Conjunto En resumen dos personas tratan de resolver los temas de actualidad.
- Mejorar la eficiencia de recuperación
- rowKey a continuación, recuperar una constante alta eficiencia relativamente continua (secuencia de consulta de las operaciones de exploración)
- MEMSTORE conjunto tamaño, Block Cache tamaño hbase-site.xml proporcionado
hbase.hregion.memstore.flush.size 128M cada MEMSTORE alcanzó el 40% 128M ras hbase.regionserver.global.memstore.size 0,4 espacio de montón
(espacio ocupado JVM RegionServer )
- Dejar que los datos tanto como sea posible colocar en la memoria, mejorar la eficiencia de recuperación
- MEMSTORE evitar el bloqueo de operación de vaciado cliente a ras cuando el hbase.regionserver.global.memstore.size.lower.limit mundial
MEMSTORE con una capacidad de 95% no está a ras
hfile.block.cache.size 0,4- El índice de los datos dentro de hbase bloque, el filtro de Bloom
- parámetros de JVM
proceso de JVM de Java
JVM (espacio de montón) HBase Cenozoico 1/3 años 2/3 generación permanente (estática, constante) Eden superviviente (de) superviviente (a)
8 1 1 ParNewGC ConcMarkSweepGC "-Xmx8g -Xms8G -Xmn128m -XX: UseParNewGC
-XX : UseConcMarkSweepGC - XX: CMSInitiatingOccupancyFraction = 70 -verbose: gc -XX: + PrintGCDetails -XX: + PrintGCTimeStamps -Xloggc: $ HBASE_HOME / logs / GC - {hostname} $ -hbase.log "HBASE_REGIONSERVER_OPTS exportación hbase-env.sh =”- Xmx8g -Xms8G
-Xmn128m -XX: UseParNewGC -XX: UseConcMarkSweepGC -XX: CMSInitiatingOccupancyFraction = 70 -verbose: gc -XX: + PrintGCDetails -XX: + PrintGCTimeStamps -Xloggc: $ HBASE_HOME / logs /gc-${hostname}-hbase.log”
- mslab
- Evitar la fragmentación de memoria, la fragmentación excesiva de memoria, pérdidas de memoria, FullGC ocurrió STW hbase.hregion.memstore.mslab.enabled cierto si se debe habilitar MSLAB, por defecto a true.
Hbase.hregion.memstore.mslab.chunksize 2M -> 4,5M 6M
Chunk tamaño predeterminado de 2 MB
- automatización de procesos de funcionamiento cambia al procesamiento manual
Timing de unión, secuencias de comandos shell para completar la división compacto herramientas de procesamiento de HBase manual de
rowKey Diseño
Principios de diseño único, ordenada, la longitud, el hash
El único principio
HBase rowKey identifica de forma exclusiva la línea de datos, hay que asegurarse de que ningún duplicado única;
principio ordenado
RowKey clasifican automáticamente en orden alfabético, por ejemplo: aluvión de aire puede ser diseñado直播间ID:timestamp
principio de libre
El máximo permitido rowKey 64 bytes, se recomienda establecer un radio de 16 bytes;
50 bytes * 100 millones de discos ≈ 4 GB
- Que se traducirá en una pérdida de recursos de memoria
- El espacio de almacenamiento de impacto MEMSTORE efectiva
principio de hash
La dispersión de la pluralidad de datos almacenados en el almacenamiento de HBase RegionServer; puntos calientes impiden datos;
- consulta multi región, sugerencia rowKey continuas (principios ordenados)
- Pequeño consulta región, picadillo de hash -> Cifrado, UUID
DigestUtils.md5Hex (rowKey); cifrado
de cadena rowKey = "yxx_male_151";
. = UUID UUID.randomUUID () toString ()
Cadena newRowKey = rowKey + "" + uuid.subString () puede tomar varias