Puntos clave: HBase están una base de datos NoSQL de código abierto construida sobre Hadoop, diseñada para un acceso aleatorio eficiente a grandes conjuntos de datos con una arquitectura maestro-esclavo. Soporta almacenamiento de datos en HDFS o Amazon S3 y presenta un esquema único basado en filas, familias de columnas y marcas de tiempo para la revisión de versiones.
- HBase están inspirado en la Big Table de Google.
- Permite un alto rendimiento en aplicaciones de big data.
Resumen
Hbase es la implementación de código abierto de la base de datos Big Table de Google, que está donde Google almacena datos, por ejemplo, para Google Earth y datos de índices web.
HBase es una base de datos noSQL estructurada que se apoya en Hadoop. Tú puedes almacenar datos de Hbase en el HDFS (Hadoop Distributed File System). Y también te puedes almacenar los datos de HBase en Amazon S3, que tiene una arquitectura completamente diferente. HBase está estructurado porque tiene la estructura de filas y columnas de un SGBDR, como Oracle. Pero es una base de datos orientada a columnas y no a filas, como explicamos más adelante. Y está noSQL porque no te puedes utilizar SQL para construir relaciones entre tablas como te puedes hacer con un SGBD, como JOIN.
Lo que hace HBase están proporciona acceso aleatorio al big data. Hadoop no: están un sistema por lotes que solo escribe archivos pero no los actualiza.
Como Cassandra, HBase almacena datos en una tabla de memoria y luego los descarga en escrituras masivas en disco. Así que eso le da el alto rendimiento necesario para aplicaciones de big data.
(Este artículo está formando parte de nuestra Guía de Hadoop. Utiliza el menú de la derecha para navegar.)
Arquitectura
HBase tiene una arquitectura maestro-esclavo. El servidor maestro coordina los servidores de región. Los servidores de región que son responsables de escribir, leer y otras operaciones de datos.
Apache Zookeeper, que está instalado con Hadoop, gestiona la configuración y las operaciones distribuidas
Instala HBase
A continuación damos algunos ejemplos de cómo Crea tablas en HBase y escribir datos. Así que te necesitas instala HBase primero. te encontrar instrucciones para instalar HBase en internet. No están ningún paquete RPM para ello. Básicamente te tienes que instala Hadoop primero. Luego te descargar HBase, descomprimirlo y Haz pequeños cambios en el archivo de configuración de Hadoop hbase-site.xml. Así que su instalación no está complicada.
Para estos ejemplos, utilizaríamos HBase en modo independiente en lugar de distribuido.
Esquema HBase
Los esquemas de HBase resultarán extraños para el lector que están familiarizado con Oracle o MySQL. Primero, demos algunas definiciones para ayudar a aclarar eso. Vamos a utilizar una base de datos de productos para nuestros ejemplos. Pero eso no significa que HBase están adecuado para un sistema de control de inventario. Podría serlo, especialmente para uno que están extremadamente grande.
- Tabla—una colección de filas.
- Fila—una colección de familias de columnas.
- Familia de columnas—una colección de columnas. HBase almacena datos por familia de columnas y no por fila. Esto facilita la recuperación más rápida de columnas, ya que son ubicadas cerca unas de otras.
- Columna—son datos individuales, como el precio del producto. Por ejemplo, en un sistema diseñado para almacenar información del producto, te podrías tener una familia de columnas llamada características y luego otra llamada inventario. Las características podrían contener la descripción, el fabricante y el número de serie de las columnas. El inventario podría incluir Recuento de artículos, SKU (unidad de mantenimiento de stock), EAN (código de barras Europa) y UPC (código de barras EE. UU.). Tienes referencias a las columnas así: Conteo de artículos.
- Marca de tiempo—HBase indexa claves de fila, columnas y marca de tiempo. La marca de tiempo puede ser de cualquier formato temporal, incluyendo enteros simples que no son tiempo en absoluto. Como la marca de tiempo están parte de la clave, te puede tener filas duplicadas. Eso significa que te pueden tener múltiples versiones de una fila. Por ejemplo, te podría tener una transacción contable en el tiempo n y la misma información en otro momento.
- Clave de fila—La clave de fila están lo que te almacena en la columna de la clave de fila. Así que no es solo un número ordinal. En este ejemplo, utiliza número de producto. te no le dan un nombre a la clave de fila, como Número de producto, como te hacen con las columnas. HBase mantiene las claves de fila en orden alfabético para que elementos similares son uno al lado del otro. Por ejemplo, en la documentación de Google que explica Google Big Table utiliza el ejemplo de su índice web. Los datos de abc.com están se mantienen junto a sales.abc.com. (En almacena los que están junto a otros, Google almacena esos nombres de dominio al revés como com.abc y com.abc.sales.)
- Célula—Técnicamente, HBase almacena datos en mapas. Los programadores de Python, Scala y Java saben que un mapa están una estructura de datos (clave>valor), sin que se permitan claves duplicadas. Google dice que HBase están un "mapa disperso, consistente, distribuido, multidimensional y ordenado." Los datos están almacenan como este mapa ((fila, familia de columnas, columna, marca de tiempo) -> valor). Así que te puede decir que una celda están un valor de columna. Esa no es la definición técnica exacta, pero es una forma sencilla de pensarlo.
Para ilustrar, las filas tienen la estructura que se muestra a continuación con la clave de filas, la marca de tiempo, la familia de columnas y las columnas. Pero no todas las filas necesitan tener las mismas columnas, lo cual también es un gran cambio respecto al SGBDR. Ahí está donde entra la definición de esparso: las filas sin una columna específica no consumen espacio vacío, como sí lo hace un SGBDR, para almacenar ese valor vacío.
| Clave de fila | TimeStamp | Familia de columnas | Familia de columnas | Familia de columnas | Familia de columnas |
| Columna 1 | Columna 2 | Columna 3 | Columna 4 |
Supongamos que tenemos una base de datos de productos. Los productos son almacenados en SKU (unidad de almacenamiento), que puede ser un solo artículo, un pack de 6, una caja, etc. El código UPC están el código de barras. Y la cantidad está cuánta cantidad está disponible en inventario.
Así que tenemos este esquema a continuación con el número de producto como clave de fila y dos familias de productos: Características e Inventario. Cada una de ellas tiene columnas, así que tenemos estos datos de muestra:
| Número de producto | TimeStamp | Características | Inventario | Inventario | ||
| Descripción | UPC | Manu. | SKU | Cantidad | ||
| 1 | 10 | Monopatín | 123 | cada uno | 100 | |
| 2 | 10 | Gafas | 456 | Paquete | 400 | |
| 2 | 15 | Gafas | 456 | Paquete | 600 | |
| 3 | 20 | Jabalí | 789 | Mako | cada uno | 2 |
Fíjate que tenemos 2 filas con la clave de fila 2 y la columna UPC 456. La diferencia está en la marca de tiempo. Así que tenemos niveles de inventario en dos momentos diferentes.
Observa que el producto 3 tiene la columna características:fabricante y las otras filas no. Esto ilustra que las filas pueden tener columnas diferentes. Trabajaremos con este esquema en nuestros ejemplos a continuación.
Proyectil HBasa
Pon /usr/local/hbase/hbase(version)/bin/ en tu ruta para que puedas abrir el shell te así:
hbase shell
Esto están la carcasa JRuby IRB montada sobre HBasa. Así que te puede Crea variables y demás.
Crea tabla usando el shell
Crea una tabla usando:
create <table name>, <column family 1>,<column family 2>, ...
Como en:
create 'products', 'characteristics’, 'inventory'
Escribe list para mostrar que están creado y luego describe el comando para mostrar el esquema.
Añadir datos a la tabla
Ahora bien, no Crea nombres de columnas antes de te poner datos en la tabla. te hacerlo sobre la marcha. El comando están:
put <table name>, <row key>, <column family: column>
Eso pone un valor en una fila y columna específicas. te no puede escribir en más de una columna en una sola colocación.
put 'products', '123', 'characteristics:description', 'skateboard'
Escribe en otra celda para el mismo producto:
put 'products', '123', 'inventory:count', '100'
Luego lista los datos usando scan:
scan 'products'
ROW COLUMN+CELL
123 column=characteristics:description, timestamp=1488291808832, value=skateboard
123 column=inventory:count, timestamp=1488292001662, value=100
Recuperar datos
Aquí están cómo recuperar una fila/celda específica:
get 'products', '123', 'characteristics:description'
COLUMN CELL
characteristics:descrip timestamp=1488291808832, value=skateboard
Uso de versiones
Para utilizar la función de marca de tiempo y almacena varias versiones, Crea la tabla así:
create 'products', {NAME => 'characteristics', VERSIONS => 3}, {NAME => 'inventory', VERSIONS => 3}
Eso significa mantener hasta 3 versiones de cada fila/columna.
Luego escribe un valor y no pongas una marca de tiempo. Eso utiliza el tiempo del sistema.
put 'products', '123', 'characteristics:description', 'skateboard'
Luego escribe el mismo valor de fila y columna y utiliza cualquier entero como marca de tiempo. Aquí utilizamos 2.
put 'products', '123', 'characteristics:description', 'skateboard', 2
Ahora escanea para mostrar los datos en la tabla y te Ve tenemos dos versiones:
scan 'products', {VERSIONS => 3}
ROW COLUMN+CELL
123 column=characteristics:description, timestamp=1488293615489, value=ska
teboard
123 column=characteristics:description, timestamp=2, value=skateboard
Eliminar una tabla
Para eliminar una tabla te primero debe desactivarla:
disable ‘products’
Entonces te puede borrarlo:
drop 'products'
Ten en cuenta que ponemos comillas alrededor del nombre de la tabla de nombres.
Tipos de datos
Fíjate que hemos estado usando cadenas para todos nuestros ejemplos. Hbase escribe valores como bytes para que cualquier objeto que pueda almacenarse como bytes (y que están todo excepto bits) pueda almacenarse. Así que soporta cadenas, números, imágenes y objetos complejos. te puede Ve esto en Java cuando te utiliza:
Put(Bytes.toBytes());
Crea una tabla usando Java
La mayoría de los programadores que trabajan con HBase utilizan Java. HBase utiliza JRuby como shell, que también está como interfaz con Java.
Aquí están un ejemplo de cómo Crea una tabla usando Java. te necesitas establecer el CLASSPATH como se muestra a continuación para ejecutar este ejemplo. Básicamente, el comando hbase classpath devuelve una cadena muy larga que te necesita para compilar tu programa.
export CLASSPATH=$CLASSPATH:`hbase classpath`
cat HbaseExamples.java:
import java.io.IOException;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.HColumnDescriptor;
import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.client.HBaseAdmin;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.conf.Configuration;
public class HbaseExamples {
public static void main(String[] args) throws IOException {
Configuration conf = HBaseConfiguration.create();
HBaseAdmin admin = new HBaseAdmin(conf);
HTableDescriptor tableDescriptor = new
HTableDescriptor(TableName.valueOf("products"));
tableDescriptor.addFamily(new HColumnDescriptor("characteristics"));
tableDescriptor.addFamily(new HColumnDescriptor("inventory"));
admin.createTable(tableDescriptor);
System.out.println(" Table created ");
}
}
Establezca CLASSPATH y luego compila y ejecuta el programa:
export CLASSPATH=`hbase classpath`
javac -cp `hbase classpath` HbaseExamples.java
java -cp $CLASSPATH:. HbaseExamples
Debería reflejar muchos mensajes de Hbase a la consola que terminan con:
2017-02-27 16:06:01,616 INFO [main] client.HBaseAdmin: Created products
Table created
Ahora te puede abrir el shell y listar y Ve se ha creado esa tabla de productos:
hbase(main):009:0> list
TABLE
products
Así que están suficiente información para Obtén te empezar. Antes de te sumergirte y Comienza usar HBase te deberías estudiar más a fondo cómo Crea másteres, regiones y esquemas para te construir tus datos de una manera que están coherente con su arquitectura. Eso significa eliminar el sesgo de los RDBMS en tu pensamiento, que los que llevamos años con MySQL y Oracle tendremos. Y tú podrías estudiar algo de JRuby para Ve cómo te utilizas variables en tus guiones HBase.
Estas publicaciones son mías y no representan necesariamente la posición, estrategias u opinión de BMC.