Hbase数据模型以及与Hive的继承

Hbase的表设计以及存储结构的设计,关系到后期数据的查询效果。
同时Hbase数据中有一些分析型操作的功能没有,所以结合Hbase进行数据集成
查阅网上的资料以及相关数据的内容,对这部分加深理解

数据模型

行键上的单一索引--主键
命名空间-
0.namespace
    命名空间
            权限<Pernission>--限额<Quota>
    常用命令--创建、删除和修改
        describe_namespace、list_namespace 、 list_namespace_table    
        create_namespace
        alter_namespace
        drop_namespace
01.table
    对应英文: rowkey,  family name, column name,  column value,  timestamp
     行    表 行键  列族:列  列值  时间戳
     单元格cell
     版本 version--版本基于时间戳的长整型,默认保留3个版本的记录
                Hbase数据保留技术:版本最小数目 与生存时间TTL

02.数据类型:字节数组
    Hbase隐式的通过序列化框架将数据转换为字节数组,Hbase数据类型--字节数组
     put 和Result方法处理对象的编码和解码,可以转化为字节的事物都可以存储在HBase中
     Cell 单元格存储值范围 10~15MB
     不包含值的列不进行存储--注意缺省值的处理
03.模式设计
    01.HBase特点
            不支持join操作等
            支持的操作:
                    00.通用操作  status  version list
                    01.数据操作: put  get  scans truncate  disable enable delete  
                                    grant revoke
                    02.HBase region 管理:assign compact flush split move
                    03.Hbase节点管理
                    04.Hbase访问控制与安全:
            客户端支持的操作:

    02.选择有效的存储以及访问数据的设置--以便最高效的读取HBase
    围绕着应用来设计:
        短而宽:向右增长,更好的原子性
        高而瘦:向下增长,更好的扩展性 ***<首选>
    存储方式:
        批量加载 bulk loading

        Hbase客户端API加载
    数据结构设计
            行键的结构-行的版本-列族-列-内容
            行键的设计:
                    表数量的设计
                    行键的索引
                    复合键--行键的设计
            压缩算法

数据的操作

1.创建Hbase表
 create <table>, {NAME => <family>, VERSIONS => <VERSIONS>,COMPRESSION=><VERSIONS>}  
    1.必须在创建表的时候确定列族的个数和对应的名称,
    2.列可以随时在存储中添加,不包含列值的列不进行存储
    3.存储到单元格的字节数组 最大10-15MB,太大会有所影响
    4.版本指定是基于时间戳,默认情况下保存三个版本记录,可以改变保留版本的数量
2.添加数据
允许动态添加列
 put <table>,<rowkey>,<family:column>,<value>,<timestamp>
    例如:给表my_test的添加一行记录:
    rowkey是rowkey001,family name:f1,column name:col1,value:value01,timestamp:系统默认  
        错误做法:    put 'my_test','rowkey001','f1:Channel','2','f1:Region','3','f2:Fresh','12669','f2:Milk','9656','f2:Grocery','12669','f2:Frozen','9656','f2:Detergents_Paper','12669','f2:Delicassen','9656'
                直接的把多个参数给这个没通过,
        正确做法:
            需要单个单个的给
        put 'my_test','rowkey001','f1:Channel'
查看帮助 help "put"中可知put的参数一般是5个,所以对于多个参数的时候就会报错;
3.运行中的Hbase
    目录表:
            hbase:meta的目录表:
                    当前集群所有区域的列表 状态和位置
                            使用区域名做为主键: 表名,起始行,区域的创建名称,MD5哈希

Hbase数据到Hive

用Hive连接Hbase
Hbase数据到Hive中
 1.Hbase中创建表
    create  'TEST_BOOK_HBASE',{NAME =>info}  
        导入数据:
            方式一:使用put导入数据       
 2.创建Hive外部表-并关联Hbase
  drop table if exists test_book_hive;
  create external table test_book_HIVE(key STRING, userid STRING, bookeid STRING, rating int)
  STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' 
  WITH SERDEPROPERTIES("hbase.columns.mapping" = ":key,info:userid,info:bookeid,info:rating") 
  TBLPROPERTIES ("hbase.table.name"="TEST_BOOK_HBASE");
    说明:storagehandlers是一个独立的模块,放在hive-hbase-handler-*.jar包中
                SERDEPROPERTIES ,用来控制hbase列和hive的映射
    注意:如果没有成功,注意是否关联jar文件
            Hive-Hbase handler.<version>.jar
            HBase.<version>.jar
            Guava.<version>.jar
        关联方式--启动hive的方式
            hive --auxpath  /usr/lib/hive/lib/.<version>.jar,
                            /usr/lib/hive/lib/hive-hbase handler.<version>.jar,
                            /usr/lib/hive/lib/guava.<version>.jar,
                            /usr/lib/hive/lib/zookeeper.jar
    也可以关联hive内部表 create l table test_book_hive(key STRING, userid STRING, bookeid STRING, rating int)
    在这里第一列是主键列,作为Hbase的行键
    注意Hive内部表和外部表的不同,根据需要进行选择
3.在Hive执行SQL查询
hive> select *  from  test_book_hive limit 100;

其他
 01.Hbase中副本对Hive的影响要注意。
 02.Hive中插入中文数据
    INSERT INTO TABLE table_dim  SELECT '25', decode(binary('中文字符'),'utf-8'), 'uniq', NULL FROM table_dim LIMIT 1;
 03.Hive计算的数据导入到Hbase,这个功能是否需要深入,根据需要再看吧~

参考:

 《Learning Hbase 中文版》
 hive和habse的集成 https://cwiki.apache.org/confluence/display/Hive/HBaseIntegration

blogroll

social