Hive訪問EMR HBase數(shù)據(jù)
在阿里云E-MapReduce(EMR)中,Hive支持通過內(nèi)部表和外部表兩種方式來訪問和處理存儲(chǔ)在HBase中的數(shù)據(jù)。本文通過示例為您介紹,如何使用EMR上的Hive處理EMR HBase數(shù)據(jù)。
前提條件
已創(chuàng)建選擇了Hive、HBase和Zookeeper服務(wù)的自定義集群(Custom),詳情請參見創(chuàng)建集群。
已登錄集群,詳情請參見登錄集群。
Hive通過內(nèi)表訪問HBase
如果HBase中沒有已經(jīng)創(chuàng)建好的表,則可以在Hive中創(chuàng)建表,Hive會(huì)自動(dòng)把表結(jié)構(gòu)和數(shù)據(jù)寫入到HBase中。本示例是在Hive中新建表訪問HBase。
執(zhí)行以下命令,進(jìn)入Hive命令行。
hive
- 在Hive中創(chuàng)建并查詢表數(shù)據(jù)。
- 執(zhí)行以下命令,在Hive中創(chuàng)建HBase表。
create table hive_hbase_table(key int, value string) stored by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' with serdeproperties("hbase.columns.mapping" = ":key,cf1:val") tblproperties("hbase.table.name" = "hive_hbase_table", "hbase.mapred.output.outputtable" = "hive_hbase_table");
說明 表的存儲(chǔ)方式是HBaseStorageHandler,可以存儲(chǔ)和讀取HBase數(shù)據(jù)。 - 執(zhí)行以下命令,向表中插入數(shù)據(jù)。
insert into hive_hbase_table values(212,'bab');
- 執(zhí)行以下命令,查看表數(shù)據(jù)。
select * from hive_hbase_table;
返回信息如下。OK 212 bab Time taken: 0.337 seconds, Fetched: 1 row(s)
- 執(zhí)行以下命令,在Hive中創(chuàng)建HBase表。
退出Hive命令行后,執(zhí)行以下命令,進(jìn)入HBase命令行。
hbase shell
執(zhí)行以下命令,查看是否已經(jīng)通過Hive在HBase中創(chuàng)建了表。
describe 'hive_hbase_table'
返回信息如下。
說明查看表已存在,說明Hive已經(jīng)在HBase中創(chuàng)建了表。
執(zhí)行以下命令,在HBase中查看Hive寫的數(shù)據(jù)是否已存在。
scan 'hive_hbase_table'
返回信息如下。
ROW COLUMN+CELL 212 column=cf1:val, timestamp=****, value=bab 1 row(s) in 0.2320 seconds
說明查看數(shù)據(jù)已存在,并且與在Hive中插入的數(shù)據(jù)一致,說明Hive已經(jīng)成功訪問了HBase的數(shù)據(jù)。
Hive通過外表訪問HBase
如果已經(jīng)在HBase中創(chuàng)建了表,想通過Hive訪問,則可以使用Hive外表的方式與HBase中的表建立映射關(guān)系,進(jìn)而通過Hive訪問HBase中已經(jīng)存在的表。
退出Hive命令行后,執(zhí)行以下命令,進(jìn)入HBase命令行。
hbase shell
- 在HBase中創(chuàng)建并查詢表數(shù)據(jù)。
- 執(zhí)行以下命令,在HBase中創(chuàng)建表。
create 'hbase_table','f'
- 執(zhí)行以下命令,向表中插入數(shù)據(jù)。
put 'hbase_table','1122','f:col1','hello'
- 執(zhí)行以下命令,查看表數(shù)據(jù)。
scan 'hbase_table'
返回信息如下。ROW COLUMN+CELL 1122 column=f:col1, timestamp=1627027165760, value=hello 1 row(s) in 0.0170 seconds
- 執(zhí)行以下命令,在HBase中創(chuàng)建表。
退出HBase命令行后,執(zhí)行以下命令,進(jìn)入Hive命令行。
hive
- 執(zhí)行以下命令,在Hive中創(chuàng)建外表,并與HBase中的表建立映射關(guān)系。
create external table hbase_table(key int,col1 string,col2 string) stored by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' with serdeproperties("hbase.columns.mapping" = "f:col1,f:col2") tblproperties("hbase.table.name" = "hbase_table", "hbase.mapred.output.outputtable" = "hbase_table");
執(zhí)行以下命令,在Hive中查看hbase_table數(shù)據(jù)。
select * from hbase_table;
返回信息如下。
1122 hello NULL
說明查看數(shù)據(jù)已存在,并且與在HBase中插入的數(shù)據(jù)一致,說明Hive已經(jīng)成功訪問了HBase的數(shù)據(jù)。
EMR HBase開啟Kerberos
如果EMR HBase開啟了Kerberos,Hive關(guān)聯(lián)HBase表并進(jìn)行查詢時(shí),則需要設(shè)置Kerberos相關(guān)參數(shù),設(shè)置方式有以下兩種:
Hive命令行設(shè)置
set hbase.security.authentication=kerberos; set hbase.master.kerberos.principal=hbase/_HOST@EMR.${CLUSTER_ID}.COM; set hbase.regionserver.kerberos.principal=hbase/_HOST@EMR.${CLUSTER_ID}.COM; set hbase.zookeeper.quorum=master-1-1;
環(huán)境變量設(shè)置
env HIVE_OPTS="-hiveconf hbase.security.authentication=kerberos -hiveconf hbase.master.kerberos.principal=hbase/_HOST@EMR.${CLUSTER_ID}.COM -hiveconf hbase.regionserver.kerberos.principal=hbase/_HOST@EMR.${CLUSTER_ID}.COM -hiveconf hbase.zookeeper.quorum=master-1-1" hive
${CLUSTER_ID}
獲取方式,可以登錄集群節(jié)點(diǎn),執(zhí)行hostname
命令,命令返回值中'.'后以'c-'開頭到結(jié)尾的字符串轉(zhuǎn)換為大寫即可。
相關(guān)文檔
如需訪問云數(shù)據(jù)庫HBase的數(shù)據(jù),詳情請參見Hive訪問云HBase數(shù)據(jù)。