簡介
- hive和hbase都是基於hadoop大數據生態而衍生的不同的技術,hbase是一種nosql的key/value數據庫,主要用於數據的實時查詢,速度比較快,而hive主要使用HQL語言運行MapReduce任務,主要用於統計查詢,但速度較慢;
- 兩者屬於互補的關係,這兩種工具可以同時進行使用,同時操作hadoop底層數據倉庫;
- 環境需求:服務器搭建好hadoop集羣、hbase集羣以及hive客戶端;
實踐
- 在上一篇博客講述安裝完hive客戶端之後,我們還需要將hive和hbase兩者整合起來,由於hbase和hadoop同屬一個大數據的集羣生態,所以,只需要修改hive的配置文件即可完成兩者的互通;
- 切換到hive的配置文件目錄:/data/hadoop/hive/hive/conf;
- 主要修改hive-site.xml和hive-env.sh兩個文件;
- 修改hive-site.xml文件:vim hive-site.xml;
<property>
<name>hive.zookeeper.quorum</name><!--設置zookeeper集羣-->
<value>hadoop-master,hadoop-slave</value>
</property>
<property>
<name>hive.zookeeper.client.port</name><!--連接zookeeper的端口,默認2181-->
<value>2181</value>
</property>
- 修改hive-env.sh文件:vim hive-env.sh;
#設置hadoop環境變量根目錄
HADOOP_HOME=/data/hadoop/hadoop/hadoop
#設置hbase環境變量根目錄
HBASE_HOME=/data/hadoop/hbase/hbase
- 配置完成之後,重啓hive,如果沒有報錯,出現以下界面,則說明啓動成功;
測試
- 首先在hbase創建表以及插入表數據:
#進入命令行
$ hbase shell
#創建表以及列族
hbase>create 'sixmonth','user'
#插入兩行數據以及指定列名
hbase>put 'sixmonth','0001', 'user:name','admin'
hbase>put 'sixmonth','0001', 'user:sex','woman'
hbase>put 'sixmonth','0002', 'user:name','test'
hbase>put 'sixmonth','0002', 'user:sex','man'
#掃描表
hbase>scan 'sixmonth'
- 然後,在hive創建相同的表,同時和hbase映射起來;
hive>create external table sixmonth (
>id string,
>name string,
>sex string
>)
>STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
>WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,user:name,user:sex")
>TBLPROPERTIES("hbase.table.name" = "sixmonth");
- 查詢創建表的數據信息,即可獲取hbase插入的數據;
hive>select * from sixmonth;
總結
- hive和hbase的互補關係在應用開發的時候起到不可或缺的作用,一般在創建hadoop大數據生態的時候都會將hive和hbase整合起來,兩個工具共同使用,用hive進行數據統計,用hbase進行實時查詢;
- 實踐是檢驗認識真理性的唯一標準,自己動手,豐衣足食~~