Hive和Hbase整合理論
我們提供的服務有:成都做網(wǎng)站、成都網(wǎng)站建設、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認證、遼中ssl等。為1000+企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務,是有科學管理、有技術的遼中網(wǎng)站制作公司
1、為什么hive要和hbase整合
2、整合的優(yōu)缺點
優(yōu)點:
(1).Hive方便地提供了Hive QL的接口來簡化MapReduce的使用,
而HBase提供了低延遲的數(shù)據(jù)庫訪問。如果兩者結合,可以利
用MapReduce的優(yōu)勢針對HBase存儲的大量內(nèi)容進行離線的計算和分析。
(2).操作方便,hive提供了大量系統(tǒng)功能
缺點:
性能的損失,hive有這樣的功能, 他支持通過類似sql語句的語法來操作hbase
中的數(shù)據(jù), 但是速度慢。
3、整合需要做什么樣的準備工作
4、整合后的目標
(1). 在hive中創(chuàng)建的表能直接創(chuàng)建保存到hbase中。
(2). 往hive中的表插入數(shù)據(jù),數(shù)據(jù)會同步更新到hbase對應的表中。
(3). hbase對應的列簇值變更,也會在Hive中對應的表中變更。
(4). 實現(xiàn)了多列,多列簇的轉化:(示例:hive中3列對應hbase中2列簇)
5、hive和Hbase整合后如果通信?
查看hive和Hbase通信圖:
主要是通過hive 的lib目錄下的hive-hbase-handler-1.2.1.jar來實現(xiàn)hive
和Hbase通信。
整合過程(案例操作)
在hive中創(chuàng)建的表的數(shù)據(jù)直接保存在hbase中。
第一: 首先啟動hive.進入交互式界面,然后創(chuàng)建表。
hive版本: apache-hive-1.2.1
hbase版本:apache-hbase-1.1.2
hadoop版本: hadoop-2.7.3
第一: 創(chuàng)建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的數(shù)據(jù)庫包。否則也會報錯。
創(chuàng)建后可以在hbase中查看一下表。list
第二:
自己準備測試數(shù)據(jù)。此處省略
create table test(
id int,
name string)
row format delimited fields terminated by ','
lines terminated by '\n'
stored as textfile;
加載數(shù)據(jù)到表中:
load data local inpath '/usr/local/test01.txt' overwrite into table test;
通過結果集的方式插入數(shù)據(jù)到表中
insert overwrite table hive_hbase select * from test;
此處會跑mapreduce程序。過程省略。
第三: 在hbase中查詢插入的 數(shù)據(jù)
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中掃描這個表,查看是否有數(shù)據(jù)
scan 'ns2:hive_hbase01'
第五: hive訪問已經(jīng)存在的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數(shù)據(jù)變更,那么hive中查詢結果也會相應的變更,如果hbase中不是其他列簇
內(nèi)容更新則hive中查詢結果不顯示
就這些了,有問題歡迎討論