您的位置:首页 > 其它

HBase之简介

2015-03-10 01:35 344 查看

(一)HBase之简介

 * 概念

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

       * [b]高可靠性:[/b]
         * (1): 在数据的写入过程中,数据首先会写到预写日志WAL(write ahead log)中,再写到memstore(内存)中,一旦 

                        HRegionServer宕机,可以回滚WAL,重新写入数据;

         * (2):数据存储时,一般是用Hadoop的hdfs作为底层存储,可以设置多个数据副本,数据会保存在本机、同一机架的不

                        同机器以及不同机架的机器上,利用数据的冗余存储来保证数据的安全性

       * 高性能:

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

       *可伸缩:

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

       * 支持版本控制:

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

       * 稀疏的:

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

       * 多维度:

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

       * 排序的:

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

 * 作用

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

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

 [b]* 特性[/b]

    * 通过行健检索数据,仅支持单行事务,主要用于存储非结构化和半结构化的松散数据
    * 容量巨大
      * HBase单表可以有百亿行、百万列,数据矩阵横向和纵向两个维度所支持的数量级非常具有弹性
      * 传统数据库如Mysql、Oracle等,如果数据在亿级别,查询和写入性能将成指数级别下降,而HBase对百亿、千亿级数量不成

         问题
      * 如果是亿级别的列,如果不是查询整个RowKey,指定一些列是没有问题
    * 面向列
      * HBase的数据是按照列存储的,在查询某几个字段的时候能够大大减速读取的数据量,比如某个字段聚集存储,就更容易设计

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

        非常稀疏
    * 扩展性
      * HBase的扩展是热扩展,在不停止现有服务的情况下,可以随时添加或者减少节点
    * 高可靠性
      * HBase提供了WAL和Replication机制
    * 高性
      * 底层的LSM数据结构和RowKey有序排列等架构上的独特设计,HBase具备非常高的写入性能
      * Region切分、主键索引和缓存机制使得HBase在海量数据具备一定的随机读取性能,该性能对行健的查询能够达到毫秒级别
      * HBase对于高并发的场景也据有很好的适应能力

 * [b]应用场景条件[/b]


     * 从需求角度、存储级别、性能、扩展、数据格式、关联关系等考虑
     * 存储大量数据(PB级别数据)且保证良好的随机访问性能
     * 需要很高的吞吐量、瞬间写入量很大,传统数据库不能支持或需要很高成本的场景
     * 可以进行很优雅的数据扩展,动态扩展整个存储系统容量
     * 数据格式无限制,支持半结构化和非结构化数据
     * 业务场景简单,不需要全部的关系型数据库特性,例如交叉列、交叉表、事务、连接等

* [b]主要组件模块[/b]

* Client
     * JAVA API
     * Shell
     * Thrift
     * Avro
     * Rest
  * Zookeeper
  * HMaster
  * HRegionServer

      
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息