上篇文章我們講述了HBase中的協處理器并通過一個簡單的示例實作了資料同步插入的問題,本文我們來看一下HBase與Hive的集成,關注專欄《破繭成蝶——大資料篇》,查看更多相關的內容~
目錄
一、HBase與Hive集成的必要性
二、HBase與Hive集成
2.1 jar包拷貝
2.2 修改組態檔
三、案例
3.1 案例一
3.1.1 需求說明
3.1.2 需求實作
3.2 案例二
3.2.1 需求說明
3.2.2 需求實作
一、HBase與Hive集成的必要性
Hive是建立在Hadoop之上的資料倉庫基礎構架、是為了減少MapReduce撰寫作業的批處理系統,Hive本身不存盤和計算資料,它完全依賴于HDFS和MapReduce,Hive可以理解為一個客戶端工具,將我們的sql操作轉換為相應的MapReduce jobs,然后在Hadoop上面運行,HBase全稱為Hadoop Database,即HBase是Hadoop的資料庫,是一個分布式的存盤系統,HBase利用Hadoop的HDFS作為其檔案存盤系統,利用Hadoop的MapReduce來處理HBase中的海量資料,利用Zookeeper作為其協調工具, HBase資料庫的缺點在于——語法格式異類,沒有類sql的查詢方式,因此在實際的業務當中操作和計算資料非常不方便,但是Hive就不一樣了,Hive支持標準的sql語法,于是我們就希望通過Hive這個客戶端工具對HBase中的資料進行操作與查詢,進行相應的資料挖掘,這就是所謂HBase與Hive集成的含義,
二、HBase與Hive集成
2.1 jar包拷貝
因為HBase與Hive集成,后續Hive操作會對HBase的表產生影響,所以Hive需要拷貝操作HBase的jar包,所以我們使用軟鏈接將jar包鏈接到Hive中,如下所示,
export HBASE_HOME=/opt/modules/hbase
export HIVE_HOME=/opt/modules/hive
ln -s $HBASE_HOME/lib/hbase-common-1.3.1.jar $HIVE_HOME/lib/hbase-common-1.3.1.jar
ln -s $HBASE_HOME/lib/hbase-server-1.3.1.jar $HIVE_HOME/lib/hbase-server-1.3.1.jar
ln -s $HBASE_HOME/lib/hbase-client-1.3.1.jar $HIVE_HOME/lib/hbase-client-1.3.1.jar
ln -s $HBASE_HOME/lib/hbase-protocol-1.3.1.jar $HIVE_HOME/lib/hbase-protocol-1.3.1.jar
ln -s $HBASE_HOME/lib/hbase-it-1.3.1.jar $HIVE_HOME/lib/hbase-it-1.3.1.jar
ln -s $HBASE_HOME/lib/htrace-core-3.1.0-incubating.jar $HIVE_HOME/lib/htrace-core-3.1.0-incubating.jar
ln -s $HBASE_HOME/lib/hbase-hadoop2-compat-1.3.1.jar $HIVE_HOME/lib/hbase-hadoop2-compat-1.3.1.jar
ln -s $HBASE_HOME/lib/hbase-hadoop-compat-1.3.1.jar $HIVE_HOME/lib/hbase-hadoop-compat-1.3.1.jar

2.2 修改組態檔
在hive-site.xml中添加如下配置:
<property>
<name>hive.zookeeper.quorum</name>
<value>master,slave01,slave02</value>
<description>The list of ZooKeeper servers to talk to. This is only needed for read/write locks.</description>
</property>
<property>
<name>hive.zookeeper.client.port</name>
<value>2181</value>
<description>The port of ZooKeeper servers to talk to. This is only needed for read/write locks.</description>
</property>
三、案例
3.1 案例一
3.1.1 需求說明
創建Hive表,同時關聯HBase表,插入資料到Hive表的同時也可以在HBase中查看資料,
3.1.2 需求實作
1、創建Hive表,并同時關聯HBase
CREATE TABLE hive_hbase_user(
id int,
name string,
sex string)
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,info:name,info:sex")
TBLPROPERTIES ("hbase.table.name" = "hbase_hive_user");
創建成功后,可以分別在Hive和HBase中查看到表已經創建成功:

2、在Hive中創建中間表,用于load檔案中的資料,這里需要注意的是,不能將資料直接load進Hive所關聯HBase的那張表中,
CREATE TABLE user_tmp(
id int,
name string,
sex string)
row format delimited fields terminated by ',';
3、向中間表中匯入資料
load data local inpath '/root/files/user_tmp.txt' into table user_tmp;
4、通過insert命令將中間表中的資料匯入到Hive關聯HBase的那張表中
insert into table hive_hbase_user select * from user_tmp;
5、查看Hive和HBase中是否已經匯入了資料
select * from hive_hbase_user;

scan 'hbase_hive_user'

3.2 案例二
3.2.1 需求說明
在HBase中已經存在了某張表(hbase_hive_user,案例一中的表),在Hive中創建一個外部表來關聯映射HBase中的這張表,實作使用Hive來分析HBase的表資料,
3.2.2 需求實作
1、新建Hive外部表映射HBase中的表
CREATE EXTERNAL TABLE hive_hbase_user_outer(
id int,
name string,
sex string)
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,info:name,info:sex")
TBLPROPERTIES ("hbase.table.name" = "hbase_hive_user");
2、查詢外部表進行資料分析
select * from hive_hbase_user_outer;

好了,本文到此已經全部結束,你們在這個程序中遇到了什么問題,歡迎留言,讓我看看你們遇到了什么問題~
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/271954.html
標籤:其他
上一篇:hive sql系列(七)
下一篇:小白的開始-我的第一次博客
