ivaneeo's blog

          自由的力量,自由的生活。

            BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
            669 Posts :: 0 Stories :: 64 Comments :: 0 Trackbacks

          開場白:
          Hive與HBase的整合功能的實現(xiàn)是利用兩者本身對外的API接口互相進行通信,相互通信主要是依靠hive_hbase-handler.jar工具類 (Hive Storage Handlers), 大致意思如圖所示:
          hive-hbase

          口水:
           對 hive_hbase-handler.jar 這個東東還有點興趣,有空來磋磨一下。

          一、2個注意事項:
          1、需要的軟件有 Hadoop、Hive、Hbase、Zookeeper,Hive與HBase的整合對Hive的版本有要求,所以不要下載.0.6.0以前的老版本,Hive.0.6.0的版本才支持與HBase對接,因此在Hive的lib目錄下可以看見多了hive_hbase-handler.jar這個jar包,他是Hive擴展存儲的Handler ,HBase 建議使用 0.20.6的版本,這次我沒有啟動HDFS的集群環(huán)境,本次所有測試環(huán)境都在一臺機器上。
               
          2、運行Hive時,也許會出現(xiàn)如下錯誤,表示你的JVM分配的空間不夠,錯誤信息如下:
          Invalid maximum heap size: -Xmx4096m
          The specified size exceeds the maximum representable size.
          Could not create the Java virtual machine.

          解決方法:
          /work/hive/bin/ext# vim util/execHiveCmd.sh 文件中第33行
          修改,
          HADOOP_HEAPSIZE=4096

          HADOOP_HEAPSIZE=256

          另外,在 /etc/profile/ 加入 export $HIVE_HOME=/work/hive

          二、啟動運行環(huán)境
          1啟動Hive
          hive –auxpath /work/hive/lib/hive_hbase-handler.jar,/work/hive/lib/hbase-0.20.3.jar,/work/hive/lib/zookeeper-3.2.2.jar -hiveconf hbase.master=127.0.0.1:60000
          加載 Hive需要的工具類,并且指向HBase的master服務(wù)器地址,我的HBase master服務(wù)器和Hive運行在同一臺機器,所以我指向本地。

          2啟動HBase
          /work/hbase/bin/hbase master start

          3啟動Zookeeper
          /work/zookeeper/bin/zkServer.sh start

          三、執(zhí)行
          在Hive中創(chuàng)建一張表,相互關(guān)聯(lián)的表
          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");

          在運行一個在Hive中建表語句,并且將數(shù)據(jù)導(dǎo)入
          建表
              CREATE TABLE pokes (foo INT, bar STRING);
          數(shù)據(jù)導(dǎo)入
              LOAD DATA LOCAL INPATH '/work/hive/examples/files/kv1.txt' OVERWRITE INTO TABLE pokes;

          在Hive與HBase關(guān)聯(lián)的表中 插入一條數(shù)據(jù)
              INSERT OVERWRITE TABLE hbase_table_1 SELECT * FROM pokes WHERE foo=98;
          運行成功后,如圖所示:
          hive

          插入數(shù)據(jù)時采用了MapReduce的策略算法,并且同時向HBase寫入,如圖所示:
          Map-Reduce Job for INSERT

          在HBase shell中運行 scan 'xyz' 和describe "xyz" 命令,查看表結(jié)構(gòu),運行結(jié)果如圖所示:
          hive

          xyz是通過Hive在Hbase中創(chuàng)建的表,剛剛在Hive的建表語句中指定了映射的屬性 "hbase.columns.mapping" = ":key,cf1:val"  和 在HBase中建表的名稱 "hbase.table.name" = "xyz"

          在hbase在運行put命令,插入一條記錄
              put 'xyz','10001','cf1:val','www.javabloger.com'

          在hive上運行查詢語句,看看剛剛在hbase中插入的數(shù)據(jù)有沒有同步過來,
              select * from hbase_table_1 WHERE key=10001;
          如圖所示:
          hive

          最終的效果
              以上整合過程和操作步驟已經(jīng)執(zhí)行完畢,現(xiàn)在Hive中添加記錄HBase中有記錄添加,同樣你在HBase中添加記錄Hive中也會添加, 表示Hive與HBase整合成功,對海量級別的數(shù)據(jù)我們是不是可以在HBase寫入,在Hive中查詢 喃?因為HBase 不支持復(fù)雜的查詢,但是HBase可以作為基于 key 獲取一行或多行數(shù)據(jù),或者掃描數(shù)據(jù)區(qū)間,以及過濾操作。而復(fù)雜的查詢可以讓Hive來完成,一個作為存儲的入口(HBase),一個作為查詢的入口(Hive)。如下圖示。
              hive mapreduce
              
              呵呵,見笑了,以上只是我面片的觀點。

          先這樣,稍后我將繼續(xù)更新,感謝你的閱讀。

           

          相關(guān)文章:
           Apache Hive入門2 
           Apache Hive入門1

           HBase入門篇4 
           HBase入門篇3 
           HBase入門篇2 
           HBase入門篇

          –end–

           

          豆瓣讀書  向你推薦有關(guān) HBase、 Hadoop、 Hive、 MapReduce、 云計算、 架構(gòu)設(shè)計、 類別的圖書。

          posted on 2011-01-10 15:22 ivaneeo 閱讀(4560) 評論(1)  編輯  收藏 所屬分類: bi(商務(wù)智能)

          Feedback

          # re: Hive與HBase的整合[未登錄] 2015-04-13 19:18 bill
          hive集成hbase數(shù)據(jù)同步過程中如果出現(xiàn)異常,會是什么結(jié)果? 例如往hive的表中插入100w記錄,往hbase同步的到一半的時候出現(xiàn)一個異常,會回滾掉所有hive的更新以及hbase的更新嗎  回復(fù)  更多評論
            

          主站蜘蛛池模板: 盐池县| 崇文区| 八宿县| 宁陵县| 常州市| 手游| 巴楚县| 句容市| 金堂县| 白朗县| 澄迈县| 深泽县| 德惠市| 安陆市| 三台县| 渭源县| 二连浩特市| 洪洞县| 阿拉善左旗| 磐安县| 丹阳市| 磐石市| 宜黄县| 梁山县| 平和县| 上杭县| 阳原县| 峨边| 湄潭县| 伊川县| 吉安县| 同德县| 绥化市| 环江| 沂南县| 梧州市| 大方县| 阿城市| 宝坻区| 高州市| 镶黄旗|