View a markdown version of this page

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

Configurar HBase

Aunque la configuración predeterminada de HBase debería funcionar con la mayoría de aplicaciones, puede modificar sus opciones de configuración de HBase. Para ello, utilice propiedades de HBase clasificaciones de configuración. Para obtener más información, consulte Configuración de aplicaciones.

En el siguiente ejemplo, se crea un clúster con un directorio raíz de HBase alternativo basado en un archivo de configuración, myConfig.json, almacenado en Amazon S3.

nota

Se incluyen caracteres de continuación de línea de Linux (\) para facilitar la lectura. Se pueden eliminar o utilizar en los comandos de Linux. En Windows, elimínelos o sustitúyalos por un signo de intercalación (^).

aws emr create-cluster --release-label emr-7.13.0 --applications Name=HBase \ --instance-type m5.xlarge --instance-count 3 --configurations https://s3.amazonaws.com/amzn-s3-demo-bucket/myfolder/myConfig.json

El archivo myConfig.json especifica la propiedad hbase.rootdir de la clasificación de configuración hbase-site, tal y como se muestra en el siguiente ejemplo. ip-XXX-XX-XX-XXX.ec2.internalSustitúyalo por el nombre de host DNS interno del nodo principal del clúster.

[ { "Classification":"hbase-site", "Properties": { "hbase.rootdir": "hdfs://ip-XXX-XX-XX-XXX.ec2.internal:8020/user/myCustomHBaseDir" } } ]
nota

Con la versión 5.21.0 y posteriores de Amazon EMR, puede anular las configuraciones de clúster y especificar las clasificaciones de configuración adicionales para cada grupo de instancias en un clúster en ejecución. Para ello, utilice la consola Amazon EMR, el AWS Command Line Interface (AWS CLI) o el AWS SDK. Para obtener más información, consulte Suministrar una configuración para un grupo de instancias en un clúster en ejecución.

Cambios en la asignación de memoria en YARN

HBase no se ejecuta como una aplicación de YARN, por lo que es necesario volver a calcular la memoria asignada a YARN y sus aplicaciones, lo que se traduce en una reducción de la memoria disponible para YARN si HBase está instalado. Debería tener esto en cuenta a la hora de planificar la coubicación de aplicaciones de YARN y HBase en los mismos clústeres. Los tipos de instancias con menos de 64 GB de memoria tienen la mitad de la memoria disponibleNodeManager, que luego se asigna a la RegionServer HBase. En el caso de los tipos con una memoria superior a 64 GB, la RegionServer memoria HBase tiene un límite de 32 GB. Como regla general, la memoria de configuración de YARN es un múltiplo de la memoria de tareas MapReduce reductora.

Las tablas en Valores predeterminados para los ajustes de configuración de tareas muestran cambios en la configuración de YARN en función de la memoria necesaria para HBase.

Números de puerto de HBase

Algunos números de puerto elegidos para HBase son diferentes de la opción predeterminada. A continuación se indican las interfaces y los puertos de HBase en Amazon EMR.

Puertos de HBase
Interfaz Puerto Protocolo
HMaster 16 000 TCP
IU de HMaster 16010 HTTP
RegionServer 16020 TCP
RegionServer Información 16030 HTTP
Servidor REST 8070 HTTP
IU REST 8085 HTTP
Servidor Thrift 9090 TCP
IU Servidor Thrift 9095 HTTP
importante

kms-http-port es 9700 y kms-admin-port es 9701 en la versión de lanzamiento de Amazon EMR 4.6.0 y posteriores.

Configuración del sitio de HBase para optimizar

Puede definir uno o todos los ajustes de sitio de HBase a fin de optimizar el clúster de HBase para la carga de trabajo de su aplicación. Le recomendamos los siguientes ajustes como punto de partida en la investigación.

zookeeper.session.timeout

El tiempo de espera predeterminado es de 40 segundos (40 000 ms). Si un servidor de región se bloquea, esto es lo que tarda el servidor principal en advertir la ausencia de un servidor de región y comenzar la recuperación. Para ayudar a que el servidor principal se recupere con mayor rapidez, puede reducir este valor a un periodo de tiempo más corto. En el ejemplo siguiente se utilizan 30 segundos o 30 000 ms:

[ { "Classification":"hbase-site", "Properties": { "zookeeper.session.timeout": "30000" } } ]

hbase.regionserver.handler.count

Esto define el número de procesos que el servidor de región mantiene abiertos para servir las solicitudes a las tablas. El valor predeterminado de 10 es bajo, a fin de impedir que los usuarios finalicen sus servidores de región al utilizar grandes búferes de escritura con un elevado número de clientes simultáneos. La regla general consiste en mantener un valor bajo para este número cuando la carga por solicitud se aproxima al rango de MB (put grandes, análisis utilizando una caché grande) y alto cuando la carga es pequeñas (get, put pequeños, ICV, eliminaciones). El siguiente ejemplo aumenta el número de subprocesos abiertos a 30:

[ { "Classification":"hbase-site", "Properties": { "hbase.regionserver.handler.count": "30" } } ]

hbase.hregion.max.filesize

Este parámetro controla el tamaño, en bytes, de las regiones individuales. De forma predeterminada, está establecido en 10737418240. Si va a escribir una gran cantidad de datos en el clúster de HBase y esto está provocando divisiones frecuentes, puede aumentar este tamaño para hacer que las regiones individuales sean mayores. Esto reduce las divisiones, pero se tarda más tiempo en equilibrar la carga de las regiones de un servidor a otro.

[ { "Classification":"hbase-site", "Properties": { "hbase.hregion.max.filesize": "10737418240" } } ]

hbase.hregion.memstore.flush.size

Este parámetro controla el tamaño máximo de memstore, en bytes, antes de que se vacíe al disco. De forma predeterminada, es 134217728. Si la carga de trabajo consta de ráfagas cortas de operaciones de escritura, es posible que desee aumentar este límite para que todas las escrituras se mantengan en la memoria durante la ráfaga y se vacíen al disco después. Esto puede mejorar el rendimiento durante las ráfagas.

[ { "Classification":"hbase-site", "Properties": { "hbase.hregion.memstore.flush.size": "134217728" } } ]

Consideraciones sobre el rendimiento

Habilitación de Z Garbage Collector (ZGC) para HBase

Con Amazon EMR versión 7.10.0 y versiones posteriores, los usuarios pueden configurar sin problemas los ajustes de recopilación de elementos no utilizados (GC) para su clúster de HBase. Recomendamos habilitar Z Garbage Collector (ZGC) para lograr tiempos de pausa de GC de baja latencia y de menos de milisegundos.

Esta es una configuración para habilitar ZGC para HBase RegionServer (s):

[ { "Classification": "hbase-env", "Properties": {}, "Configurations": [ { "Classification": "export", "Properties": { "JAVA_HOME": "/usr/lib/jvm/jre-21", "HBASE_REGIONSERVER_GC_OPTS": "\"-XX:+UseZGC -XX:+ZGenerational\"" } } ] } ]
nota

La variable de entorno JAVA_HOME debe configurarse cuando se usa el ZGC generacional (recomendado), ya que se introdujo en el JDK 21. Si desea usar el modo no generacional (sin -XX:+ZGenerational) del ZGC, no es necesario configurar el JAVA_HOME. En el JDK 24, se ha eliminado el modo no generacional del ZGC.

Afinamiento de ZGC

  1. Habilite la pila fija de JVM

    El Z Garbage Collector (ZGC) funciona de manera más eficiente cuando se configura con una memoria de pila fija, lo que elimina la sobrecarga que supone devolver la memoria al sistema operativo. Para configurar la memoria de pila fija para su clúster de HBase, use la siguiente configuración:

    [ { "Classification": "hbase", "Properties": { "hbase.regionserver.fixed.heap.enabled": "true" } } ]
  2. Habilitado Pre-touch

    La habilitación de pre-touch mejora el rendimiento de la recopilación de elementos no utilizados (GC) al reducir la latencia inicial y ofrecer un rendimiento más predecible. Para habilitar el pre-touch en su clúster HBase, utilice la siguiente configuración:

    [ { "Classification": "hbase-env", "Properties": {}, "Configurations": [ { "Classification": "export", "Properties": { "JAVA_HOME": "/usr/lib/jvm/jre-21", "HBASE_REGIONSERVER_GC_OPTS": "\"-XX:+UseZGC -XX:+ZGenerational -XX:+AlwaysPreTouch\"" } } ] } ]