由於項目需要,使用hbase來存儲數據。使用hive來查詢數據。所以這裏需要把hbase 和 hive整合使用。在網上找了下資料,其實也挺簡單的,主要在配置。下面我把整合的步驟做一個記錄。
1.環境:hadoop1.0.4,hbase0.92.0,hive0.9.0
2.在hadoop hbase hive 環境都配好的情況下(如果沒有配置好請參考其他相關文檔),進行如下操作。
- 拷貝hbase-0.92.0.jar hbase-0.92.0-tests.jar 到 hive/lib 目錄下(hive爲hive的安裝根目錄)。如果在hive下已經存在這兩個包的話,請將其刪除以後再進行拷貝。
- 修改hive/conf下的hive-site.xml文件。在底部添加如下內容:
注意:我這裏的hive-site.xml是自行創建的文件,在默認情況下不存在這個文件。
- 拷貝hbase-0.92.0.jar到所有hadoop節點(包括master)的hadoop/lib下。
- 拷貝hbase/conf下的hbase-site.xml文件到所有hadoop節點(包括master)的hadoop/conf下。
3.現在你可以嘗試啓動hive了。
mt@ubuntu:~/hive$ bin/hive
接着可以做下測試了。
- 創建hbase識別的數據庫:
CREATE TABLE hbase_table_1(key int, value string)
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,cf1:val")
TBLPROPERTIES ("hbase.table.name" = "xyz");
hbase.table.name 定義在hbase的table名稱
hbase.columns.mapping 定義在hbase的列族
- 使用sql導入數據 :
新建hive的數據表
CREATE TABLE pokes (foo INT, bar STRING);
批量插入數據
LOAD DATA LOCAL INPATH './examples/files/kv1.txt' OVERWRITE INTO TABLE
使用sql導入hbase_table_1
INSERT OVERWRITE TABLE hbase_table_1 SELECT * FROM pokes WHERE foo=86;
-
查看數據
hive> select * from hbase_table_1;
這時可以登錄Hbase去查看數據了.
hbase(main):001:0> describe 'xyz'
hbase(main):002:0> scan 'xyz'
hbase(main):003:0> put 'xyz','100','cf1:val','www.360buy.com'
這時在Hive中可以看到剛纔在Hbase中插入的數據了。
hive> select * from hbase_table_1
-
hive訪問已經存在的hbase
使用CREATE EXTERNAL TABLE
CREATE EXTERNAL TABLE hbase_table_2(key int, value string)
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = "cf1:val")
TBLPROPERTIES("hbase.table.name" = "some_existing_table");