日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Hive 整合Hbase(来自学习资料--博学谷)

發(fā)布時(shí)間:2024/9/27 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Hive 整合Hbase(来自学习资料--博学谷) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1、摘要

Hive提供了與HBase的集成,使得能夠在HBase表上使用HQL語句進(jìn)行查詢 插入操作以及進(jìn)行Join和Union等復(fù)雜查詢、同時(shí)也可以將hive表中的數(shù)據(jù)映射到Hbase中。

2、應(yīng)用場景

2.1 將ETL操作的數(shù)據(jù)存入HBase

2.2 HBase作為Hive的數(shù)據(jù)源

2.3 構(gòu)建低延時(shí)的數(shù)據(jù)倉庫

3、環(huán)境準(zhǔn)備

3.1 hive與hbase版本兼容性

Hive版本 hive-1.2.1、hbase的版本hbase-1.2.1
hbase與hive哪些版本兼容?
1.hive0.90與hbase0.92是兼容的,早期的hive版本與hbase0.89/0.90兼容。
2.hive1.x與hbase0.98.x或則更低版本是兼容的。
3.hive2.x與hbase1.x及比hbase1.x更高版本兼容。
Hive 0.6.0推出了storage-handler,用于將數(shù)據(jù)存儲到HDFS以外的其他存儲上。并方便的通過hive進(jìn)行插入、查詢等操作。同時(shí)hive提供了針對Hbase的hive-hbase-handler。這使我們在使用hive節(jié)省開發(fā)M/R代碼成本的同時(shí)還能獲得HBase的特性來快速響應(yīng)隨機(jī)查詢。
但是,hive自帶的hive-hbase-handler是針對特定版本的Hbase的,比如,0.7.0版本的hive編譯時(shí)使用的是0.89.0版本的Hbase,0.6.0版本的hive默認(rèn)使用0.20.3版本的hbase進(jìn)行編譯。如果能夠找到對應(yīng)的版本,可以跳過編譯的步驟直接使用。不過,我們現(xiàn)狀已經(jīng)找不到這些版本的Hbase與之配合使用了。所以只好自己來編譯這個(gè)jar包。
注:使用不匹配的版本,一些功能會(huì)發(fā)生異常。其原因是由于沒有重新編譯storage-handler組件,發(fā)現(xiàn)在hive中查詢HBase表存在問題。hive-hbase-handler.jar的作用在hbase與hive整合的時(shí)候發(fā)揮了重要作用,有了這個(gè)包,hbase與hive才能通信。
如果想hbase1.x與hive1.x整合,需要編譯hive1.x 代碼本身

hive-2.3.2 兼容 hbase 1.4.2版本

編譯:
創(chuàng)建項(xiàng)目
在eclipse中創(chuàng)建一個(gè)項(xiàng)目。Java project即可。

隨便起個(gè)名,finish即可。
導(dǎo)入代碼
在創(chuàng)建好的項(xiàng)目上點(diǎn)擊右鍵,選擇Import

選擇General下的FileSystem

找到hive-1.2.1\src\hbase-handler\src\java目錄選擇其中的org目錄導(dǎo)入

添加依賴包
導(dǎo)入代碼后可以看到很多的錯(cuò)誤提示。這時(shí)由于沒有引入依賴的jar包導(dǎo)致的。下面,我們引入,需要hadoop、hive、hbase下相關(guān)的lib包
新建lib目錄,把對應(yīng)的依賴包,導(dǎo)入

選擇Build Path點(diǎn)擊Add to Bulid Path
至此可以導(dǎo)出我們需要的jar包了。在org.apache.hadoop.hive.hbase包上點(diǎn)擊右鍵,選擇export
選擇java下的JAR file,選擇一個(gè)生成位置,即可點(diǎn)擊完成。

到這里我們就生成了符合自己Hbase版本的hive-hbase-handler了。

3.2 hive與hbase整合環(huán)境配置

(1)修改hive-site.xml文件,添加配置屬性(zookeeper的地址)

<property> <name>hbase.zookeeper.quorum</name> <value>itcast01:2181,itcast02:2181,itcast03:2181</value> </property>

(2)引入hbase的依賴包
將hbase安裝目錄下的lib文件夾下的包導(dǎo)入到hive的環(huán)境變量中

在hive-env.sh 文件中添加

export HIVE_CLASSPATH=$HIVE_CLASSPATH:/var/local/hbase/lib/*

至此、hive與hbase整合環(huán)境準(zhǔn)備完成。

4、實(shí)戰(zhàn)

4.1 hbase表映射到hive表中

① 在hbase中創(chuàng)建表:表名hbase_test, 有三個(gè)列族 f1、f2、f3

create 'hbase_test',{NAME => 'f1',VERSIONS => 1},{NAME => 'f2',VERSIONS => 1},{NAME => 'f3',VERSIONS => 1}

② 插入數(shù)據(jù)

put 'hbase_test','r1','f1:name','zhangsan' put 'hbase_test','r1','f2:age','20' put 'hbase_test','r1','f3:sex','male' put 'hbase_test','r2','f1:name','lisi' put 'hbase_test','r2','f2:age','30' put 'hbase_test','r2','f3:sex','female' put 'hbase_test','r3','f1:name','wangwu' put 'hbase_test','r3','f2:age','40' put 'hbase_test','r3','f3:sex','male'

③ 查詢數(shù)據(jù)

④ 創(chuàng)建基于hbase的hive表
以下在hive的命令行窗口中執(zhí)行

CREATE EXTERNAL TABLE hiveFromHbase( rowkey string, f1 map<STRING,STRING>, f2 map<STRING,STRING>, f3 map<STRING,STRING> ) STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,f1:,f2:,f3:") TBLPROPERTIES ("hbase.table.name" = "hbase_test");

這里使用外部表映射到HBase中的表,這樣,在Hive中刪除表,并不會(huì)刪除HBase中的表,否則,就會(huì)刪除。另外,除了rowkey,其他三個(gè)字段使用Map結(jié)構(gòu)來保存HBase中的每一個(gè)列族。
? hbase.columns.mapping
Hive表和HBase表的字段映射關(guān)系,分別為:Hive表中第一個(gè)字段映射:key(rowkey),第二個(gè)字段映射列族f1,第三個(gè)字段映射列族f2,第四個(gè)字段映射列族f3
? hbase.table.name
HBase中表的名字

⑤ hive中查詢hbase表
hive> select * from hiveFromHbase;

可以看到,Hive中只有一行數(shù)據(jù),因?yàn)橹挥幸粋€(gè)rowkey,每一個(gè)列族的列和值,分別被存儲到Map結(jié)構(gòu)中

⑥ Hive中插入數(shù)據(jù)到HBase表

insert into table hiveFromHbase SELECT 'r4' AS rowkey, map('name','zhaoliu') AS f1, map('age','50') AS f2, map('sex','male') AS f3 from person limit 1;

插入成功后查看2張表的數(shù)據(jù)

hive表hiveFromHbase:

Hbase表hbase_test:

Hive中的外部表hiveFromHbase,就和其他外部表一樣,只有一份元數(shù)據(jù),真正的數(shù)據(jù)是在HBase表中,Hive通過hive-hbase-handler來操作HBase中的表。

4.2 hive表映射到hbase表中

① 創(chuàng)建映射hbase的表

create table hive_test( id string, name string, age int, address string )STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,f1:name,f2:age,f3:address") TBLPROPERTIES ("hbase.table.name" = "hbaseFromhive");

在hive1.2.1 跟hbase 0.98整合時(shí),需要添加:

"hbase.mapred.output.outputtable" = "hbaseFromhive" 表屬性TBLPROPERTIES ("hbase.table.name" = "hbaseFromhive","hbase.mapred.output.outputtable"="hbaseFromhive");

如果不添加會(huì)報(bào)錯(cuò):Must specify table name
② 查看hbase映射表是否產(chǎn)生

③ 查看hbase映射表的表結(jié)構(gòu)和數(shù)據(jù)


由于hive表中沒有加載數(shù)據(jù),此時(shí)hbase中映射的表也無數(shù)據(jù)
④ Hive表加載數(shù)據(jù)

數(shù)據(jù)來源于另一張表hive_source;
查看hive_source的表結(jié)構(gòu)和數(shù)據(jù)

加載數(shù)據(jù):

insert overwrite table hive_test select * from hive_source;

⑤ 查看hive和hbase中表的數(shù)據(jù)

映射表可以查看到hive表中的數(shù)據(jù)。

總結(jié)

以上是生活随笔為你收集整理的Hive 整合Hbase(来自学习资料--博学谷)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。