(一)HBase之简介

 * 概念

     * HBase是一个高可靠性、高性能、面向列、可伸缩、支持版本控制、稀疏的、多维度的和排序分布式数据库

       * 高可靠性

         * (1): 在数据的写入过程中,数据首先会写到预写日志WAL(write ahead log)中,再写到memstore(内存)中,一旦 
                        HRegionServer宕机,可以回滚WAL,重新写入数据;
         * (2):数据存储时,一般是用Hadoop的hdfs作为底层存储,可以设置多个数据副本,数据会保存在本机、同一机架的不
                        同机器以及不同机架的机器上,利用数据的冗余存储来保证数据的安全性

       * 高性能:

         * 可以处理PB级别,低延迟,秒级别响应且保证一定的性能

       *可伸缩:

         * 可以通过横向添加廉价的pc server来扩展整个系统的存储、处理能力

       * 支持版本控制:

         * 保存数据操作时的时间戳,可以配置版本数量

       * 稀疏的:

         * HBase逻辑上是一张宽表,有许多空值,但是物理上不会存储

       * 多维度:

         * RDBMS的表由行和列组成,我们也叫它二维表,HBase有行健、列族、列、时间戳组成,所以也叫多维表

       * 排序的:

         * HBase行健和列是按照字典排序的方式存储在文件中

 * 作用

     *(1):弥补了Hadoop只能离线批处理的不足,能够存储小文件

     *(2):解决海量的非结构化数据的高并发随机读写性能的问题

 * 特性

    * 通过行健检索数据,仅支持单行事务,主要用于存储非结构化和半结构化的松散数据

    * 容量巨大

      * HBase单表可以有百亿行、百万列,数据矩阵横向和纵向两个维度所支持的数量级非常具有弹性

      * 传统数据库如Mysql、Oracle等,如果数据在亿级别,查询和写入性能将成指数级别下降,而HBase对百亿、千亿级数量不成
         问题

      * 如果是亿级别的列,如果不是查询整个RowKey,指定一些列是没有问题

    * 面向列

      * HBase的数据是按照列存储的,在查询某几个字段的时候能够大大减速读取的数据量,比如某个字段聚集存储,就更容易设计
        压缩算法

    * 稀疏性

      * 传统数据库往往是稀疏的,存在大量空列,而且会占用空间,造成存储空间浪费,而HBase不会存储空的列,因此可以设计得
        非常稀疏

    * 扩展性

      * HBase的扩展是热扩展,在不停止现有服务的情况下,可以随时添加或者减少节点

    * 高可靠性

      * HBase提供了WAL和Replication机制

    * 高性

      * 底层的LSM数据结构和RowKey有序排列等架构上的独特设计,HBase具备非常高的写入性能

      * Region切分、主键索引和缓存机制使得HBase在海量数据具备一定的随机读取性能,该性能对行健的查询能够达到毫秒级别

      * HBase对于高并发的场景也据有很好的适应能力

 * 应用场景条件

     * 从需求角度、存储级别、性能、扩展、数据格式、关联关系等考虑

     * 存储大量数据(PB级别数据)且保证良好的随机访问性能

     * 需要很高的吞吐量、瞬间写入量很大,传统数据库不能支持或需要很高成本的场景

     * 可以进行很优雅的数据扩展,动态扩展整个存储系统容量

     * 数据格式无限制,支持半结构化和非结构化数据

     * 业务场景简单,不需要全部的关系型数据库特性,例如交叉列、交叉表、事务、连接等

* 主要组件模块

* Client

     * JAVA API

     * Shell

     * Thrift

     * Avro

     * Rest

  * Zookeeper

  * HMaster

  * HRegionServer