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

Lo que se debe y no se debe hacer en Apache HBase

Hace poco di una charla en el grupo de usuarios de LA Hadoop sobre lo que se debe y lo que no se debe hacer en Apache HBase. La audiencia fue excelente y tenía preguntas muy informadas y bien articuladas. Jody de Shopzilla fue un excelente anfitrión y le debo un gran agradecimiento por darme la oportunidad de hablar con más de 60 LA Hadoopers. Dado que no todos viven en Los Ángeles o podrían asistir a la reunión, he resumido aquí algunos de los puntos más destacados. Para aquellos de ustedes con un día ajetreado, aquí está el tl;dr:

  • HBase es bueno, pero no es un reemplazo de RDBMS o HDFS
  • Buena configuración significa buen funcionamiento
  • Monitor monitor monitor monitor monitor

En Cloudera somos grandes fans de HBase. Nos encanta la tecnología, nos encanta la comunidad y hemos descubierto que es ideal para muchas aplicaciones. Los usos exitosos de HBase han sido bien documentados y, como resultado, muchas organizaciones están considerando si HBase es una buena opción para algunas de sus aplicaciones. El ímpetu de mi charla y esta publicación de blog de seguimiento es aclarar algunas de las buenas aplicaciones para HBase, advertir sobre algunas aplicaciones deficientes y resaltar los pasos importantes para una implementación exitosa de HBase.

Cuándo usar HBase

La consideración más importante al mirar HBase es que, si bien es una gran solución para muchos problemas, no es una panacea. HBase no está optimizado para aplicaciones transaccionales clásicas o incluso análisis relacional. Tampoco es un sustituto completo de HDFS cuando se realizan lotes grandes de MapReduce. Eche un vistazo a algunos de los casos de uso en esta publicación para tener una idea de qué aplicaciones son adecuadas para HBase y si tiene preguntas, continúe y publique en las listas. ¿He mencionado que la comunidad es fantástica?

Con esa advertencia fuera del camino, ¿por qué debería usar HBase? Si su aplicación tiene un esquema variable en el que cada fila es ligeramente diferente, debería consultar HBase. Como ejemplo, hacer un ejercicio de modelado utilizando un esquema relacional estándar; Cuando no puede agregar columnas lo suficientemente rápido y la mayoría de ellas son NULL en cada fila, debe considerar HBase. Si encuentra que sus datos están almacenados en colecciones, por ejemplo, algunos metadatos, datos de mensajes o datos binarios que están todos codificados en el mismo valor, entonces debería considerar HBase. Si necesita acceso basado en claves a los datos al almacenar o recuperar, entonces debería considerar HBase.

Servicios de apoyo

Suponiendo que esté convencido de que HBase es una buena opción para su aplicación, aquí hay algunos consejos que debe tener en cuenta al implementarlo. Hay algunos servicios de apoyo que son importantes y uno que se requiere. Si no ha visto ZooKeeper antes, ahora es el momento. HBase usa ZooKeeper para varios servicios de coordinación distribuidos, como la elección maestra. A medida que HBase se desarrolla y crece, continúa confiando en ZooKeeper para obtener funciones adicionales, lo que lo convierte en una parte clave del sistema. Además, debe tener los servicios de red adecuados, como NTP y DNS. HBase depende de que todos los nodos del clúster tengan relojes estrechamente sincronizados y se refieran entre sí de manera consistente. El uso de NTP y DNS garantiza que no se encontrará con comportamientos extraños cuando un nodo A piensa que es mañana y el nodo B piensa que es ayer. También evitará situaciones en las que el nodo maestro le dice al nodo C que atienda una región, pero el nodo C no sabe su propio nombre y no responde. El uso de NTP y DNS le ahorrará muchos dolores de cabeza al comenzar.

He dicho que la consideración más importante al seleccionar HBase es asegurarse de tener un caso de uso que se ajuste. Lo más importante que se debe hacer al usar HBase es monitorear el sistema. El monitoreo es clave para el éxito de las operaciones de HBase. Como es el caso con muchos sistemas distribuidos, HBase es susceptible a fallas en cascada. Si un nodo comienza a intercambiarse, puede perder contacto con el maestro, lo que hace que otro servidor tome la carga y se sobrecargue. Ese segundo servidor fallará y la falla se producirá en cascada. Debe monitorear la memoria, la CPU, la E/S y la latencia y el ancho de banda de la red en cada uno de sus nodos HBase para asegurarse de que estén funcionando dentro de parámetros saludables. El monitoreo es la práctica más importante para operar un clúster HBase saludable.

Buenas prácticas para la arquitectura HBase

Avance rápido a su clúster HBase bien monitoreado que ejecuta un caso de uso perfecto, aquí hay algunas buenas prácticas. Use un prefijo clave que se distribuya bien según su caso de uso. Si antepone su clave por marca de tiempo o cualquier valor similar que, cuando se ordena, se almacena o consulta en un lote, es probable que sobrecargue cada servidor de región a su vez en lugar de distribuir la carga de manera uniforme. También debe mantener la cantidad de regiones en un número razonable según el tamaño de la memoria y la cantidad de RAM, y la JVM de RegionServer debe limitarse a 12 GB de almacenamiento dinámico de Java para minimizar las pausas prolongadas de GC. Por ejemplo, una máquina con 36 GB de RAM que también ejecuta un demonio DataNode podría manejar aproximadamente 100 regiones con escrituras activas y una memoria de 48 MB cada una. Eso permite suficiente margen para los requisitos de memoria de DataNode y RegionServer, espacio de búfer de archivos de Linux y un tamaño de descarga razonable para cada RegionServer.

Algunas recomendaciones de configuración incluyen la desactivación de la compactación automática (de manera predeterminada, ocurre cada 24 horas desde el momento en que comienza HBase) y prográmelo para que se ejecute todos los días en un horario de menor actividad. También debe configurar la compresión (como LZO) y colocar explícitamente el directorio HBase conf configurado correctamente en su CLASSPATH.

HBase NO HACER

Hemos cubierto una amplia gama de buenas prácticas para HBase. También hay algunos patrones de uso que se deben evitar. Por ejemplo, no espere usar HBase como un reemplazo general para cada una de sus bases de datos relacionales. HBase es excelente en muchas cosas, pero no reemplaza las bases de datos relacionales. Para empezar, no habla SQL, no tiene un optimizador, admite transacciones de registros cruzados o uniones. Si no usa ninguno de estos en su aplicación de base de datos, entonces HBase podría ser la opción perfecta.

Tenga cuidado al ejecutar cargas de trabajo mixtas en un clúster de HBase. Cuando tenga SLA en el acceso a HBase independientemente de cualquier trabajo de MapReduce (por ejemplo, una transformación en Pig y el suministro de datos desde HBase), ejecútelos en clústeres separados. HBase hace un uso intensivo de la CPU y la memoria con un gran acceso de E/S secuencial esporádico, mientras que los trabajos de MapReduce están principalmente vinculados a la E/S con memoria fija y CPU esporádica. Combinados, estos pueden generar latencias impredecibles para la contención de HBase y CPU entre los dos. Un clúster compartido también requiere menos ranuras de tareas por nodo para adaptarse a los requisitos de CPU de HBase (por lo general, la mitad de las ranuras en cada nodo que asignaría sin HBase). También vigile el intercambio de memoria. Si HBase comienza a intercambiarse, es muy probable que se pierda un latido y se elimine del clúster. En un clúster ocupado, esto puede sobrecargar otra región, provocando un intercambio y una cascada de fallas.

Reflexiones finales

Un último consejo antes de resumir. Al cargar HBase, use HFileOuputFormat si carga a través de un trabajo de MapReduce o una colección de servidores que usan transferencias por lotes. Cargar con un solo cliente provocará un cuello de botella en ese cliente y no aprovechará la escalabilidad que ofrece HBase.

En resumen, considere HBase cuando cargue datos por clave, busque datos por clave (o rango), entregue datos por clave, consulte datos por clave o cuando almacene datos por fila que no se ajustan bien a un esquema.

Casos de uso

  • Apache HBase:Desarrollado por HBase Wiki
  • Mozilla:Traslado de Socorro a HBase
  • Facebook:el nuevo sistema de mensajería en tiempo real de Facebook:HBase
  • StumbleUpon:HBase en StumbleUpon