resumen HBase_

1, conceptos básicos HBase

HBase HDFS está construida sobre una base de datos distribuida nosql, principalmente para el campo de datos de gran tamaño, y los soportes de nodo de lectura concurrente y escribir de alta expansión, para la columna de almacenamiento de datos escasos, en general, puede ser operado por varios JAVAAPI datos.

2, características HBase

  • (1)almacenamiento masivo: Puede almacenar grandes cantidades de datos,
  • (2)almacenamiento columnar: Los datos se almacenan en base al grupo de columnas, los datosmatriz de bytesPara el almacenamiento, puede tener varias versiones de los valores
  • (3)fácil expansión: ¿Puede la expansión del clúster de almacenamiento mediante la adición de servidores (HDFS inferior)
  • (4)Alta simultáneas de lectura y escritura: Soporte de lectura es alto concurrente y solicitudes de escritura
  • (5) no es compatible con archivos pequeños, no soporta escritura concurrente, no es compatible con archivos modificar aleatoriamente, eficiencia de la consulta es baja
  • Al iniciar, es necesario comenzar racimos HDFS por adelantado y ZooKeeper

3, la arquitectura HBase

HMaster- HRegionServer- Región

  • Región: clúster HBase es la unidad más pequeña de una tabla de almacenamiento distribuido Región tabla corresponde a una parte de los datos
  • cúmulo HBase solamente una mesa meta, esta tabla sólo tiene una región, los datos almacenados en una región HRegionServer
  • meta región tabla almacena información para todas las tablas de usuario, podemos scan 'hbase:meta'ver la información de la tabla meta

4, estructuras de datos HBase

rowKey tecla OK - Columna viviendas idónea para la columna - Columna Columna - célula a célula - Marca de tiempo timestamp

  • Un HRegionServer gestionar múltiples región, una región que contiene un número de tienda, en una familia de columnas en una tienda, una tienda que tiene un MEM tienda y mucho más StoreFile , los datos finales son un montón de HFILE archivo de tal estructura de datos almacenada en HDFS sucesivamente.

  • Los datos no es el tipo de célula, toda la matriz de memoria en bytes; varias veces tabla de asignación de la célula, cada marca de tiempo cuando la operación de asignación, se puede ver como una célula versión valor de número,

  • HBase Regionserver en la memoria se divide en dos porciones

    • Como parte de MEMSTORE, utilizado principalmente para escribir;
    • También como parte de BlockCache, principalmente para la lectura de datos;

5, el despliegue de instalación HBase

racimos HDFS necesitan comenzar temprano y ZooKeeper

start-hbase.sh

WebUI: http: // node01: 60010

stop-hbase.sh

6, HBase shell de comandos funcionamiento básico


list
--创建
create 'user', 'info', 'data'
create 'user', {NAME => 'info', VERSIONS => '3'},{NAME => 'data'}
--赋值
put 'user', 'rk0001', 'info:name', 'zhangsan'
--查询--get
get 'user', 'rk0001'
get 'user', 'rk0001', 'info:name', 'info:age'
--查询-过滤器
 get 'user', 'rk0001', {FILTER => "ValueFilter(=, 'binary:zhangsan')"} 
get 'user', 'rk0001', {FILTER => "(QualifierFilter(=,'substring:a'))"}

--查询--scan
scan 'user', {COLUMNS => 'info'}
scan 'user', {COLUMNS => 'info', RAW => true, VERSIONS => 5}
scan 'user', {COLUMNS => 'info', RAW => true, VERSIONS => 3}

scan 'user',{FILTER=>"PrefixFilter('rk')"}--模糊查询
scan 'user', {TIMERANGE => [1392368783980, 1392380169184]}--范围查询

--更新--alter
alter 'user', NAME => 'info', VERSIONS => 5
delete 'user', 'rk0001', 'info:name'

count 'user'

disable 'user'
enable 'user'

7, HBase API de Java para la operación

Crear un proyecto maven, repositorios de contenido de plomo pom.xml paquete de forma automática (necesidad de descarga desde el almacén cloudera, lleva mucho tiempo, ser paciente )

El funcionamiento de la base de datos: Conéctese ---- obtener objetos de cliente - Operar la base de datos - cerrada

 	private Connection connection ;
    private final String TABLE_NAME = "myuser";
    private Table table ;

    @BeforeTest
    public void initTable () throws IOException {
        Configuration configuration = HBaseConfiguration.create();
        configuration.set("HBase.zookeeper.quorum","node01:2181,node02:2181");
        connection= ConnectionFactory.createConnection(configuration);
        table = connection.getTable(TableName.valueOf(TABLE_NAME));
    }

   @Test
 public void createData() throws IOException {
        Admin admin = connection.getAdmin();//获取管理员对象,来对手数据库进行DDL的操作  
        TableName myuser = TableName.valueOf("myuser");   //指定我们的表名
        HTableDescriptor hTableDescriptor = new HTableDescriptor(myuser);
        //指定两个列族
        HColumnDescriptor f1 = new HColumnDescriptor("f1");
        HColumnDescriptor f2 = new HColumnDescriptor("f2");
        hTableDescriptor.addFamily(f1);
        hTableDescriptor.addFamily(f2);
        admin.createTable(hTableDescriptor);
        admin.close();
 }

    public void addData() throws IOException {
        //获取表
        Table table = connection.getTable(TableName.valueOf(TABLE_NAME));
        Put put = new Put("0001".getBytes());//创建put对象,并指定rowkey值
        put.addColumn("f1".getBytes(),"name".getBytes(),"zhangsan".getBytes());
     
        table.put(put);} 

    @AfterTest
    public void close() throws IOException {
        table.close();
        connection.close();
    }

8, el filtro de HBase consulta

Papel de filtro se determina si los datos satisface las condiciones del servidor y, a continuación, sólo los datos que satisfacen las condiciones de vuelta al cliente

Tipo de filtro mucho, pero se pueden dividir en:Comparación de filtro,filtros especiales

  1. Comparador de filtro: OK RowFilter filtro de clave, filtro familiar columna FamilyFilter, la columna filtra QualifierFilter, el filtro de valor de la columna ValueFilter
//查询哪些字段值  包含数字8
    @Test
    public void contains8() throws IOException {
        Scan scan = new Scan();
        SubstringComparator substringComparator = new SubstringComparator("8");
        //列值过滤器,过滤列值当中包含数字8的所有的列
        ValueFilter valueFilter = new ValueFilter(CompareFilter.CompareOp.EQUAL, substringComparator);
        scan.setFilter(valueFilter);
        ResultScanner scanner = table.getScanner(scan);
        printlReult(scanner);
    }
  1. Utilizar filtros especiales

1, el filtro de valor único SingleColumnValueFilter, devuelve todos los campos para satisfacer las condiciones de todo el valor de la columna

2, el filtro de exclusión valor de columna SingleColumnValueExcludeFilter: columna excluirá especificado, todos los demás retorno columnas

3, rowKey PrefixFilter filtro prefijo: Todas las consultas rowKey prefijo al comienzo de la XX

4, el filtro de pestaña PageFilter

3) Multi-filtro integrado consulta filterlist

  • Requisitos: familia columna de la consulta f1, es el nombre de datos Liu Bei, y al mismo tiempo se encuentran la rowKey prefijo al inicio de los datos 00 (PrefixFilter)

    @Test
    public  void filterList() throws IOException {
        Scan scan = new Scan();
        SingleColumnValueFilter singleColumnValueFilter = new SingleColumnValueFilter("f1".getBytes(), "name".getBytes(), CompareFilter.CompareOp.EQUAL, "刘备".getBytes());
        PrefixFilter prefixFilter = new PrefixFilter("00".getBytes());
        
        FilterList filterList = new FilterList();
        filterList.addFilter(singleColumnValueFilter);
        filterList.addFilter(prefixFilter);
        
        scan.setFilter(filterList);
        ResultScanner scanner = table.getScanner(scan);
        printlReult(scanner);
    }

9, en un escenario de aplicación real hbase

1 Transporte: Información sobre el buque GPS, GPS enviar información todo el río Yangtze, los datos almacenados cerca de 10 millones de dólares diarios.

2 Aspectos financieros: información al consumidor, información de crédito, tarjetas de crédito y otra información de pago

3 áreas de negocio: electricidad eléctricos de sitios web de comercio información comercial, información logística, información de viaje, etc.

4 telecomunicaciones: información de la llamada, como los detalles de una sola voz

Resumen: Massive almacén de datos detalle, y el buen rendimiento de consulta última necesidad

10, hbase leer los datos

  • 1, el cliente es el primer contacto con ZK, encontrar la tabla HRegionServer que comprende de ZK meta, que comprende HRegionServer este sentido, se observa Tabla de metadatos;
  • 2, de acuerdo con la información de consulta, los datos de información para encontrar la región correspondiente, que se encuentra en la región correspondiente a regionserver, y enviar la solicitud
  • 3, que corresponde a una búsqueda y localización Región,
  • 4, a partir de datos hallazgo MEMSTORE - Si usted no lee desde el BlockCache ---- Si no hay StoreFile sigue leyendo.
  • Después de 5, los datos leídos de la storeFile, no vuelve directamente los datos al cliente, pero los datos se escriben primero en BlockCache, el objetivo es agilizar la consulta posterior; a continuación, devolver los resultados al cliente.

11, datos de escritura hbase

  • 1, el cliente se conecta primero con zk, zk encontrar la tabla para encontrar la región de las posiciones zk meta, es decir, que comprende HRegionServer meta tabla, esta conexión comprende HRegionServer, lee la tabla de datos de metadatos;

  • 2, de acuerdo con la información de consulta, los datos de información para encontrar la región correspondiente, que se encuentra en la región correspondiente a regionserver, y enviar la solicitud

  • 3, que corresponde a una búsqueda y localización Región,

  • 4, cuando la escritura de datos, los datos se escriben ConGrupo y uno cada uno tampones MEMSTORE

  • . 5, el rubor: la MEMSTORE alcanza un umbral, los datos de disco cepillo para generar una pluralidad de archivos storeFile.

    • Región MEMSTORE llegar a cualquiera de 128MB
    • Región en el tamaño de la suma de todos MEMSTORE alcance block.multiplier * flush.size
    • Región del servidor en el número ConGrupo alcanza el límite superior
  • 6, compacto :

    • Pequeño fusión: archivo de almacén pequeño se combinó en un archivo de almacén relativamente grande,
    • Combinar grande: Combinar todas tienda HFILE un HFILE

12, la región de división mecanismo

rowKey región en la tienda de grandes cantidades de datos, cuando demasiadas piezas de datos en la región, afectarán la eficiencia consulta. Por lo tanto, cuando la región es demasiado grande tiempo, hbase dividirá la región.

HBase la región dividió un total de estrategia: fijo región tamaño de división (10 g, versión 0.94 antes de defecto), incrementar el límite superior de la división (tiempos parciales ^ 3 * 256,0.94 a 2,0 por defecto versión), división fraccional (versión predeterminada 2,0 )

13, la región pre-partición

Cada región mantiene startRow y endRowKey, si se añade a los datos en línea con un rango región rowKey de mantenimiento, los datos de mantenimiento a esta región.

Aumentar la eficiencia de los datos de lectura y escritura, para evitar el balanceo de carga sesgo de los datos, optimización del número de Mapa

especificar manualmente el pre-partición

HexStringSplit algoritmo

create 'person','info1','info2',SPLITS => ['1000','2000','3000','4000']

create 'mytable', 'base_info',' extra_info', {NUMREGIONS => 15, SPLITALGO => 'HexStringSplit'}

14, merge región

Para fines de mantenimiento. Después de un gran número de datos borrados tal, Región han llegado a ser muy pequeña, Región desperdicia.

Clase Región Merge por el frío combinada, el calor online_merge combina por Región

15, HBase MapReduce Integración

tabla de datos HBase finalmente se almacena en el HDFS, hbase naturales operación MR apoyo ,

Podemos MR, el procesamiento de datos tabla directamente HBase y MR se pueden procesar los resultados almacenados directamente a la mesa HBase.

16, HBase Colmena integración

Colmena proporciona integración con HBase para que la tabla se puede utilizar en HBase instrucción SQL colmena consultas, así como de inserción y Unión de Ingreso consultas complejas como, pero también puede ser una tabla de datos colmena hbase asignada a la

Colmena HBase
Almacén de datos almacenar bases de datos no relacionales columna
Análisis de datos y de limpieza fuera de línea, alta latencia Baja latencia, el acceso al uso del negocio en línea
Basado en HDFS, MapReduce Basado en HDFS
Un tipo de motor SQL de clase, y las tareas de MapReduce ejecutar Un tipo de NoSQL clave / de base de datos en el valle de Hadoop

Nuestro paquete de HBase de cinco cántaro en el directorio lib de la colmena

17, HBase coprocesador

Después de 0,92 HBase introdujo coprocesador (coprocesadores), un índice secundario se puede establecer fácilmente, un filtro complejo (pushdown predicado), y control de acceso.

Dos coprocesador: Observador punto final coprocesador coprocesador

coprocesador observador:

  • Al igual que en las bases de datos tradicionales factores desencadenantes , sobre todo en el final del servicio
  • En el curso normal de clúster permite las operaciones del cliente, puede comportarse de manera diferente
  • Se puede lograr la gestión de derechos, el establecimiento de prioridades, el seguimiento, el control DDL, el índice secundario y otras funciones

coprocesador de punto final

  • Similar a la tradicional base de datos de procedimiento almacenado , el trabajo principal en el extremo del cliente
  • Capacidad para permitir la expansión del clúster, la aplicación cliente y la apertura de un nuevo comando de operación
  • Pueden implementarse min, max, avg, suma, distinta, grupo por otras funciones

Hay dos maneras de cargar coprocesador

  • modificación de carga estática hbase-site.xml
  • Habilitar agregación mesa de carga dinámica, sólo tienen efecto para una tabla específica.

18, diseño de la tabla HBase rowKey (tres principios)

Longitud principio, el principio de hash, el único principio

1) Principio de longitud rowKey, se recomienda lo más corto posible, pero no demasiado corto

2) Principio de rowKey hachís, alta rowKey como el hash de los campos,
. 3) rowKey único principio, rowKey se almacena ordenadas lexicográfico

19, caliente

Häbse recuperada registros, para localizar la primera fila de datos por la clave fila.
Cuando un gran número de cliente de clúster de acceso hbase de uno o unos pocos nodos, lo que resulta en un número pequeño de carga del servidor región es demasiado grande, mientras que la otra carga del servidor región es muy pequeña, causando un fenómeno "punto caliente".

soluciones calientes (pre-partición, sal, hachís, hacia atrás)

1) Pre-partición: haga ficha técnica se pueden dispersar en un clúster equilibrada,
2) sal rowKey: delante del aumento rowKey número aleatorio
3) Hash: siempre la misma línea con el mismo prefijo con sal.
4) Reverse: rowKey longitud fija inversa o el formato digital, de modo que la parte () rowKey menos significativo parte constante cambio en el frente.

20, copia de seguridad de datos HBase

1) HBase basado-Class proporcionó datos HBase en una tabla en particular, se exportan a HDFS

2) enfoque para lograr la transferencia de datos instantánea instantánea de base y copiar HBase.

创建表的snapshot
snapshot 'tableName', 'snapshotName'

恢复snapshot
disable 'tableName'
restore_snapshot 'snapshotName'
enable 'tableName'

21, índice secundario HBase

rowKey tabla hbase equivalente de un índice

hbase índice secundario, se establece la tabla HBase mapeo entre las columnas y filas de bonos

Construcción de dos indexación hbase esquema

  • (1) Esquema MapReduce
  • (2) hbase coprocesador (coprocesador) Programa
  • (3) Solr + hbase Programa
  • (4) ES + hbase Programa
  • (. 5) Phoenix programa de HBase +

Construcción secundaria phoenix índice

Phoenix es la construcción de una capa de SQL en HBase, y nos permite utilizar las API de JDBC estándar en lugar de API de cliente HBase para crear tablas, insertar datos a HBase y consulta de los datos. Phoenix ha proporcionado apoyo a HBase índice secundario.

Si desea activar el índice secundario Phoenix, es necesario modificar el archivo de configuración hbase-site.xml

  • indexación global, el índice global para la lectura y la escritura menos escenarios de negocio.
  • Indexación local, índice local para operaciones de escritura y escenario con espacio limitado frecuente.
--给表USER创建基于Global Indexing的二级索引
create index USER_COOKIE_ID_INDEX on USER ("f"."cookie_id"); 

--给表USER创建基于Local Indexing的二级索引
create local index USER_USER_ID_INDEX on USER ("f"."user_id");
Publicado 77 artículos originales · ganado elogios 25 · vistas 9198

Supongo que te gusta

Origin blog.csdn.net/TU_JCN/article/details/105340806
Recomendado
Clasificación