实现目标

  1. Hive可以实时查询Hbase中的数据.
  2. hive中的表插入数据会同步更新到hbase对应的表中.
  3. 可以将hbase中不同的表中的列通过 left 或 inner join 方式映射到hive 中的一个视图中.

Hive map hbase

1,启动hive hbase

在hive hbase服务启动的情况下, $HIVE_HOME/bin/hive --auxpath $HIVE_HOME/lib/hive-hbase-handler-1.1.0-cdh5.7.1.jar,$HIVE_HOME/lib/hbase-common-1.2.0-cdh5.7.1.jar,$HIVE_HOME/lib/zookeeper-3.4.5-cdh5.7.1.jar,$HIVE_HOME/lib/guava-14.0.1.jar --hiveconfhbase.master=dwrj5123:60000      (可能不需要这个过程)  .

2, 查询hbase中表的结构

(1)查询jinan:SI3U_AC06_TEMP

describe 'jinan:SI3U_AC06_TEMP'

Table jinan:SI3U_AC06_TEMP is ENABLED

jinan:SI3U_AC06_TEMP

COLUMN FAMILIES DESCRIPTION

{NAME => 'AC06_TEMP', BLOOMFILTER => 'ROW', VERSIONS => '1', IN_MEMORY => 'false', KEEP_DELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODING => 'NONE', TTL => '

FOREVER', COMPRESSION => 'NONE', MIN_VERSIONS => '0', BLOCKCACHE => 'true', BLOCKSIZE => '65536', REPLICATION_SCOPE => '0'}

1 row(s) in 0.1960 seconds

其中jinan:SI3U_AC06_TEMP为表名, 列族为AC06_TEMP,通过查询表中的数据得知有不限于以下列:

AC06_TEMP:AAC001,

AC06_TEMP:AAE140,

AC06_TEMP:AAE149,

AC06_TEMP:BAA044,

AC06_TEMP:BAA035,

AC06_TEMP:BAA036,

AC06_TEMP:AAE034

(2) 查询jinan:SI3U_AC01

hbase(main):003:0> describe 'jinan:SI3U_AC01'

Table jinan:SI3U_AC01 is ENABLED

jinan:SI3U_AC01

COLUMN FAMILIES DESCRIPTION

{NAME => 'AC01', BLOOMFILTER => 'ROW', VERSIONS => '1', IN_MEMORY => 'false', KEEP_DELETED_CELLS => 'FALSE'

MPRESSION => 'NONE', MIN_VERSIONS => '0', BLOCKCACHE => 'true', BLOCKSIZE => '65536', REPLICATION_SCOPE =>

1 row(s) in 0.1850 seconds

jinan:SI3U_AC01 通过查询表中的数据得到不限于以下列:

AC01:AAC001,

AC01:AAC003,

AC01:AAA109

3, 创建hive 表到hbase映射

(1) 创建hive 表jinan_SI3U_AC01 到hbase 表"jinan:SI3U_AC01的映射:

解释: jinan_SI3U_AC01为hive 中表名, jinan:SI3U_AC01为需要映射的hbase表名.

":key,AC01:AAC001,AC01:AAC003,AC01:AAA109": 为需要映射的列, AC01为列族,多列以逗号隔开.

(2) 创建hive 表jinan_SI3U_AC06_TEMP 到hbase表jinan:SI3U_AC06_TEMP的映射:

CREATE EXTERNAL  TABLE jinan_SI3U_AC06_TEMP(key string,AAC001 string,AAE140 string,AAE149 string,BAA044 string,BAA035 decimal(19,4),BAA036 decimal(19,4),AAE034 TIMESTAMP )

STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'

WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,AC06_TEMP:AAC001,AC06_TEMP:AAE140,AC06_TEMP:AAE149,AC06_TEMP:BAA044,AC06_TEMP:BAA035,AC06_TEMP:BAA036,AC06_TEMP:AAE034")  TBLPROPERTIES ("hbase.table.name" = "jinan:SI3U_AC06_TEMP");

Hive创建视图

hive 中可以通过创建视图的方式将多个表的数据整合成一个视图,方便查询和使用. 这里以上面映射的jinan_SI3U_AC01jinan_SI3U_AC06_TEMP两个表为例.

create view fact_view (AAC001,AAC003,AAA109,AAE140,AAE149,BAA044,BAA035,BAA036, AAE034 ) as  SELECT a.AAC001, a.AAC003,a.AAA109, b.AAE140,b.AAE149, b.BAA044,b.BAA035, b.BAA036,b.AAE034 FROM  jinan_SI3U_AC01 a RIGHT JOIN jinan_SI3U_AC06_TEMP b ON a.aac001 =b.aac001;

表名

列名

视图名

jinan_SI3U_AC01

AAC001

AAC003

AAA109

 

fact_view

jinan_SI3U_AC06_TEMP

AAE140

AAE149

BAA044

BAA035

BAA036

AAE034

通过SELECT * FROM fact_view; 可以查询到有效数据.

KYLIN hive 视图的使用

kylin 支持hive 视图构建立方体, 过程与使用hive 表相同. 构建立方体完成之后,执行查询,

SELECT SUM(BAA035) FROM FACT_VIEW  left inner join DATE_VIEW ON FACT_VIEW.aae034=DATE_VIEW.start_date where(DATE_VIEW.start_date>'2014-05-01' and DATE_VIEW.start_date<'2015-01-01');

总结

Hive 与hbase实现了通过一次映射, 可以实时查询hbase中的数据, 也可以从hive表中插入数据到hbase. 通过构建视图的方式可以将多个hive 表的数据整合到一个视图中, 方便数据的使用, 通过以上方式对hbase 中数据的利用不占用数据储存空间.缺点,以上过程无数据清洗过程,可能会存在数据冲突的问题.

参考

https://cwiki.apache.org/confluence/display/Hive/HBaseIntegration

最新文章

  1. Linq表达式、Lambda表达式你更喜欢哪个?
  2. 看jpg和png图片
  3. PHP初学者都该掌握哪些技能
  4. python学习-异常处理
  5. 通过自己技能把某个网站的ppt全部下载下来的过程
  6. UITabelView 高级(自定义Cell)
  7. Starting MySQL.. ERROR! The server quit without updating PID file (/usr/local/mysql/data/localhost.localdomain.pid).
  8. C语言笔记——简介与编译过程初探
  9. ios使用xcode进行Archive打包上传出现的常见错误
  10. [.NET] RabbitMQ 的行为艺术
  11. [ext4]07 磁盘布局 - 块/inode分配策略
  12. SSD-Tensorflow: 3 步运行 TensorFlow 单图片多盒目标检测器
  13. iOS 中文转拼音
  14. 位运算-出现k次与出现一次
  15. MS17-010 漏洞研究——免考课题 20155104 赵文昊
  16. topcoder srm 630 div1 (2-SAT and SCC template)
  17. cmake add_custom_command 使用
  18. 怎么解决mysql 执行SQL过长问题------------?
  19. jmeter压测、操作数据库、分布式linux下运行、webservice接口测试、charles抓包
  20. node升级的正确方法

热门文章

  1. DataList:HTML5中的input输入框自动提示宝器
  2. Android中常见功能包描述(转)
  3. webdriver 获取佰词斩的单词(涉及字符串转换)
  4. genymotion模拟器访问本地服务器
  5. Java用户线程和守护线程
  6. 【转】 TechED2010与我(三) —— 初识云计算
  7. 2015.10.15class
  8. Swing图形用户界面
  9. 新浪ip地址转换接口
  10. MySQL中MyISAM和InnoDB的区别