Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4565339
  • 博文数量: 1214
  • 博客积分: 13195
  • 博客等级: 上将
  • 技术积分: 9105
  • 用 户 组: 普通用户
  • 注册时间: 2007-01-19 14:41
个人简介

C++,python,热爱算法和机器学习

文章分类

全部博文(1214)

文章存档

2021年(13)

2020年(49)

2019年(14)

2018年(27)

2017年(69)

2016年(100)

2015年(106)

2014年(240)

2013年(5)

2012年(193)

2011年(155)

2010年(93)

2009年(62)

2008年(51)

2007年(37)

分类: 大数据

2017-11-14 17:02:28



Hive和Hbase有各自不同的特征:hive是高延迟、结构化和面向分析的,hbase是低延迟、非结构化和面向编程的。Hive数据仓库在hadoop上是高延迟的。Hive集成Hbase就是为了使用hbase的一些特性。

Hive继承HBase可以有效利用HBase数据库的存储特性,如行更新和列索引等。在集成的过程中注意维持HBase jar包的一致性。Hive集成HBase需要在Hive表和HBase表之间建立映射关系,也就是Hive表的列和列类型与HBase表的列族及列限定词建立关联。每一个在Hive表中的域都存在与HBase中,而在Hive表中不需要包含所有HBase中的列。HBase中的rowkey对应到Hive中为选择一个域使用:key来对应,列族(cf:)映射到Hive中的其他所有域,列为(cf:cq)。

下面来简单实战下:

  • 创建HBase表

    1 
    create 'user1',{NAME => 'info',VERSIONS => 1} 
  • 向user表中插入一些数据

    1 2 3 4 5 6 
    put 'user1','1','info:name','zhangsan' put 'user1','1','info:age','25' put 'user1','2','info:name','lisi' put 'user1','2','info:age','22' put 'user1','3','info:name','wangswu' put 'user1','3','info:age','21' 
  • 使用scan命令来查看下user表中的数据

    1 
    scan 'user'; 

    结果如下

    ROW COLUMN+CELL
    1 column=info:age, timestamp=1476773051604, value=25
    1 column=info:name, timestamp=1476773046344, value=zhangsan
    2 column=info:age, timestamp=1476773051685, value=22
    2 column=info:name, timestamp=1476773051661, value=lisi
    3 column=info:age, timestamp=1476773052632, value=21
    3 column=info:name, timestamp=1476773051709, value=wangswu
    3 row(s) in 0.0610 seconds

  • 创建Hive中与HBase中对应的表

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 
    SET hbase.zookeeper.quorum=hadoop001; SET zookeeper.znode.parent=/hbase; ADD jar /opt/bigdata/hive-1.2.1-bin/lib/hive-hbase-handler-1.2.1.jar; // user1表 CREATE EXTERNAL TABLE user1 ( rowkey string, info map ) STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,info:") TBLPROPERTIES ("hbase.table.name" = "user1"); // user2表 CREATE EXTERNAL TABLE user2 ( rowkey string, name string, age int ) STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,info:name,info:age") TBLPROPERTIES ("hbase.table.name" = "user2"); 
  • 查询user1,user2表数据

    查询user1表数据

    1 
    select * from user1; 

    结果如下

    1 2 3 4 5 
    OK 1       {"age":"25","name":"zhangsan"} 2       {"age":"22","name":"lisi"} 3       {"age":"21","name":"wangswu"} Time taken: 0.467 seconds, Fetched: 3 row(s) 

    查询user2表数据

    1 
    select * from user2; 

    结果如下:

    OK
    1 zhangsan 25
    2 lisi 22
    3 wangswu 21
    Time taken: 0.087 seconds, Fetched: 3 row(s)

  • hive插入数据到hbase

    1 2 3 4 
    INSERT INTO TABLE user1 SELECT '4' AS rowkey, map('name','lijin','age','22') AS info from dual limit 1; 

阅读(731) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~