大数据(二十七)HBASE【Hbase 综述】

来源:互联网 发布:string.h 51单片机 编辑:程序博客网 时间:2024/05/22 14:12

HADOOP生态系统

        其中:

                Zookeeper:分布式协作服务组件,管理Hadoop相关组件

                Flume:日志收集工具

                Sqoop:关系型数据库ETL工具【ETL,是英文 Extract-Transform-Load 的缩写,用来描述将数据从来源端经过抽取(extract)、转换(transform)、加载(load)至目的端的过程。ETL一词较常用在数据仓库,但其对象并不限于数据仓库。】

                Mahout:数据挖掘插件,里面有可供调用的算法包(MapReduce编写的),可以直接调用

                Hive:数据仓库(将类SQL翻译为MapRedue)

                Pig:将脚本语言翻译为MapReduce,其使用的是自己的语言Pig Latin。

                Hbase:实时、分布式、高纬数据库(按列存储的非关系型数据库),其依赖于HDFS。

Hbase

一、Hbase简介:

        1、Hbase(Hadoop Database)是一个高可靠性、高性能、面向列、可伸缩、实时读写的分布式数据库。

        解释:

                高可靠性:HDFS保证数据高可靠性;Zookeeper保证服务高可靠性。

                高性能:上亿数据是Hbase的初级数据量,而这对于关系型数据库来说已经心有余而力不足了。

                面向列:与关系型数据库面向行的数据不同,Hbase数据是面向列的。

                可伸缩:集群可大可小。

                实时读写:Hbase响应是ms级别的

        2、利用Hadoop HDFS作为其文件存储系统,利用Hadoop MapReduce来处理HBase中的海量数据,利用Zookeeper作为其分布式协同服务。
        3、主要用来存储非结构化和半结构化的松散数据(列存 NoSQL 数据库)。

二、Hbase数据模型展示

      

        上图中在关系型数据库看来是一张表,但是在Hbase看来是一行数据。其中有几个重要的概念:

        ROW KEY、Column Family列族、Timestamp时间戳。

        举例说明:

        假设我们要存储一个用户信息,其包含如下信息【姓名、性别、爱好(多个)、地址(多个)】。

        在关系型数据库中:我们需要建三张表【用户表(id、姓名);爱好表(id、用户id、爱好);地址表(id、用户id、地址)】。

        但是在非关系型数据库中:我们只需要一个记录既可以完成。如下图所示。

ROW KEYTimestamp时间戳Column Family列族(cf1)123325441255484cf1:name=小明23325442355484cf1:爱好=LOL23325441255676cf1:爱好=发呆23325441255676cf1:爱好=打篮球23325441255676cf1:地址=中国 陕西 西安23325441256587cf1:地址=中国 北京223325441256589cf1:name=小红23325441252023cf1:爱好=小明23325441252025cf1:爱好=小王23325441259514cf1:地址=中国 陕西 咸阳        其中ROW_KEY决定一条数据。列族中可以以固定格式存储任意数据。时间戳是针对列族中每一个单元格的。

三、Hbase数据模型概念

        1、ROW KEY
                – 决定一行数据
                – 按照字典顺序排序的。
                – Row key只能存储64k的字节数据

        2、Column Family列族 & qualifier列
                – HBase表中的每个列都归属于某个列族,列族必须作为表模式(schema)定义的一部分预先给出。如 create ‘test’, ‘course’;
                – 列名以列族作为前缀,每个“列族”都可以有多个列成员(column);如course:math, course:english, 新的列族成员(列)可以随后按需、动态加入;
                – 权限控制、存储以及调优都是在列族层面进行的;
                – HBase把同一列族里面的数据存储在同一目录下,由几个文件保存。
        3、Timestamp时间戳
                – 在HBase每个cell存储单元对同一份数据有多个版本,根据唯一的时间戳来区分每个版本之间的差异,不同版本的数据按照时间倒序排序,最新的数据版本排在最前面。
                – 时间戳的类型是 64位整型。
                – 时间戳可以由HBase(在数据写入时自动)赋值,此时时间戳是精确到毫秒的当前系统时间。
                – 时间戳也可以由客户显式赋值,如果应用程序要避免数据版本冲突,就必须自己生成具有唯一性的时间戳。

        4、Cell单元格
               
– 由行和列的坐标交叉决定;
                – 单元格是有版本的;
                – 单元格的内容是未解析的字节数组;
                        • 由 {row key, column( =<family> +<qualifier>), version} 唯一确定的单元。cell中的数据是没有类型的,全部是字节码形式存贮。

        5、HLog(WAL log)
            
    – HLog文件就是一个普通的Hadoop Sequence File,Sequence File 的Key是HLogKey对象,HLogKey中记录了写入数据的归属信息,除了table和region名字,同时还包括 sequence number timestamp,timestamp是”写入时间”,sequence number的起始值为0,或者是最近一次存入文件系统中sequence number。
                – HLog SequeceFile的Value是HBase的KeyValue对象,即对应HFile中的KeyValue。