您好,登錄后才能下訂單哦!
Hive和Hbase整合理論
1、為什么hive要和hbase整合
2、整合的優缺點
優點:
(1).Hive方便地提供了Hive QL的接口來簡化MapReduce的使用,
而HBase提供了低延遲的數據庫訪問。如果兩者結合,可以利
用MapReduce的優勢針對HBase存儲的大量內容進行離線的計算和分析。
(2).操作方便,hive提供了大量系統功能
缺點:
性能的損失,hive有這樣的功能, 他支持通過類似sql語句的語法來操作hbase
中的數據, 但是速度慢。
3、整合需要做什么樣的準備工作
4、整合后的目標
(1). 在hive中創建的表能直接創建保存到hbase中。
(2). 往hive中的表插入數據,數據會同步更新到hbase對應的表中。
(3). hbase對應的列簇值變更,也會在Hive中對應的表中變更。
(4). 實現了多列,多列簇的轉化:(示例:hive中3列對應hbase中2列簇)
5、hive和Hbase整合后如果通信?
查看hive和Hbase通信圖:
主要是通過hive 的lib目錄下的hive-hbase-handler-1.2.1.jar來實現hive
和Hbase通信。
整合過程(案例操作)
在hive中創建的表的數據直接保存在hbase中。
第一: 首先啟動hive.進入交互式界面,然后創建表。
hive版本: apache-hive-1.2.1
hbase版本:apache-hbase-1.1.2
hadoop版本: hadoop-2.7.3
第一: 創建hbase能識別的表。
建表語句:
create table if not exists hive_hbase(
id int,
name String,
age int,
sex String,
address String
)
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,cf_info:eName,cf_info:eAge,cf_info:eSex,cf_beizhu:eAddress")
TBLPROPERTIES ("hbase.table.name" = "ns2:hive_hbase01");
注意: 此處的 org.apache.hadoop.hive.hbase.HBaseStorageHandler 類是hive的lib包下的,需要替換成.hive-1.2.1版本的jar包。否則會報錯提示找不到這個類。
錯誤提示:FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. org.apache.hadoop.hbase.HTableDescriptor.addFamily(Lorg/apache/hadoop/hbase/HColumnDescriptor;)V
也不能hive版本過高。比如2.x版本會報錯
Exception in thread "main" java.lang.RuntimeException: java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient
要確保hive目錄的lib目錄下有mysql-connector的數據庫包。否則也會報錯。
創建后可以在hbase中查看一下表。list
第二:
自己準備測試數據。此處省略
create table test(
id int,
name string)
row format delimited fields terminated by ','
lines terminated by '\n'
stored as textfile;
加載數據到表中:
load data local inpath '/usr/local/test01.txt' overwrite into table test;
通過結果集的方式插入數據到表中
insert overwrite table hive_hbase select * from test;
此處會跑mapreduce程序。過程省略。
第三: 在hbase中查詢插入的 數據
select * from hive_hbase;
20170616,zhangshaoqi,22,nan,jincheng
20170617,xuqianya,29,nv,beijing
20170618,xiaolin,29,nv,jincheng
20170619,xiaopan,33,nan,guizhou
20170620,xiaohu,26,nan,shouzhou
1 row(s) in 3.19 seconds
第四:在hbase中掃描這個表,查看是否有數據
scan 'ns2:hive_hbase01'
第五: hive訪問已經存在的hbase
需要使用external 類型的外部表,否則會報錯
REATE EXTERNAL TABLE hbase_table_3(key int, value string)
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = "info:name")
TBLPROPERTIES("hbase.table.name" = "student");
hive> CREATE EXTERNAL TABLE hbase_table_3(key int, value string)
> STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
> WITH SERDEPROPERTIES ("hbase.columns.mapping" = "info:name")
> TBLPROPERTIES("hbase.table.name" = "student");
OK
Time taken: 1.21 seconds
注意:如果hbase中列簇名name數據變更,那么hive中查詢結果也會相應的變更,如果hbase中不是其他列簇
內容更新則hive中查詢結果不顯示
就這些了,有問題歡迎討論
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。