<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Hive整合Hbase

          共 2385字,需瀏覽 5分鐘

           ·

          2021-01-23 02:29

          HBase 雖然可以存儲(chǔ)數(shù)億或數(shù)十億行數(shù)據(jù),但是對(duì)于數(shù)據(jù)分析來說,不太友好,只提供了簡(jiǎn)單的基于 Key 值的快速查詢能力,沒法進(jìn)行大量的條件查詢。現(xiàn)有hbase的查詢工具有很多如:Hive,Tez,Impala,Shark/Spark,Phoenix等。今天主要說Hive,Hive方便地提供了Hive QL的接口來簡(jiǎn)化MapReduce的使用, 而HBase提供了低延遲的數(shù)據(jù)庫訪問。如果兩者結(jié)合,可以利用MapReduce的優(yōu)勢(shì)針對(duì)HBase存儲(chǔ)的大量?jī)?nèi)容進(jìn)行離線的計(jì)算和分析。

          Hive和HBase通信原理

          Hive與HBase整合的實(shí)現(xiàn)是利用兩者本身對(duì)外的API接口互相通信來完成的,這種相互通信是通過$HIVE_HOME/lib/hive-hbase-handler-{hive.version}.jar工具類實(shí)現(xiàn)的。通過HBaseStorageHandler,Hive可以獲取到Hive表所對(duì)應(yīng)的HBase表名,列簇和列,InputFormat、OutputFormat類,創(chuàng)建和刪除HBase表等。Hive訪問HBase中表數(shù)據(jù),實(shí)質(zhì)上是通過MapReduce讀取HBase表數(shù)據(jù),其實(shí)現(xiàn)是在MR中,使用HiveHBaseTableInputFormat完成對(duì)HBase表的切分,獲取RecordReader對(duì)象來讀取數(shù)據(jù)。對(duì)HBase表的切分原則是一個(gè)Region切分成一個(gè)Split,即表中有多少個(gè)Regions,MR中就有多少個(gè)Map;讀取HBase表數(shù)據(jù)都是通過構(gòu)建Scanner,對(duì)表進(jìn)行全表掃描,如果有過濾條件,則轉(zhuǎn)化為Filter。當(dāng)過濾條件為rowkey時(shí),則轉(zhuǎn)化為對(duì)rowkey的過濾;Scanner通過RPC調(diào)用RegionServer的next()來獲取數(shù)據(jù);

          基本通信原理如下:

          hive-hbase

          具體步驟

          新建hbase表:

          create?'test',?'f1'

          插入數(shù)據(jù):

          put?'test','1','f1:c1','name1'
          put?'test','1','f1:c2','name2'
          put?'test','2','f1:c1','name1'
          put?'test','2','f1:c2','name2'
          put?'test','3','f1:c1','name1'
          put?'test','3','f1:c2','name2'

          這里hbase有個(gè)列簇f1,有兩個(gè)列c1c2,新建hive表關(guān)聯(lián)hbase的這兩列:

          SET?hbase.zookeeper.quorum=zkNode1,zkNode2,zkNode3;
          SET?zookeeper.znode.parent=/hbase;
          ADD?jar?hive-hbase-handler-{hive.version}.jar;
          CREATE?EXTERNAL?TABLE?test.test?(
          rowkey?string,
          c1?string,
          c2?string
          )?STORED?BY?'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
          WITH?SERDEPROPERTIES?("hbase.columns.mapping"?=?":key,f1:c1,f1:c2")
          TBLPROPERTIES?("hbase.table.name"?=?"test");

          這里使用外部表映射到HBase中的表,hive對(duì)應(yīng)的hdfs目錄是空的,數(shù)據(jù)仍然在hbase中,這樣在Hive中刪除表,并不會(huì)刪除HBase中的表,否則,就會(huì)刪除。

          另外,除了rowkey,其他三個(gè)字段使用Map結(jié)構(gòu)來保存HBase中的每一個(gè)列族。

          其中,參數(shù)解釋如下:

          • hbase.zookeeper.quorum:

          指定HBase使用的zookeeper集群,默認(rèn)端口是2181,可以不指定,如果指定,格式為zkNode1:2222,zkNode2:2222,zkNode3:2222

          • zookeeper.znode.parent

          指定HBase在zookeeper中使用的根目錄

          • hbase.columns.mapping

          Hive表和HBase表的字段一一映射,分別為:Hive表中第一個(gè)字段映射:key(rowkey),第二個(gè)字段映射列族f1:c1,第三個(gè)字段映射列族發(fā):f1:c2。

          • hbase.table.name

          HBase中表的名字

          也可以直接在Hive中創(chuàng)建表的同時(shí),完成在HBase中創(chuàng)建表。
          在hive中查詢hbase表:

          hive>?select?*?from?test.test;
          OK
          1????name1???name2
          2????name1???name2
          3????name1???name2

          也可以插入數(shù)據(jù):

          insert?into?test.test?select?'4',?'name4',?'name4';

          查看hbase的數(shù)據(jù):

          hive>?select?*?from?test.test;
          OK
          1????name1???name2
          2????name1???name2
          3????name1???name2
          4????name4???name4

          Spark讀取提升速度

          hive關(guān)聯(lián)hbase實(shí)際是底層是MR,速度較慢,此時(shí)可以使用spark sql讀取hive表,進(jìn)行查詢操作,從而訪問hbase數(shù)據(jù)。


          猜你喜歡
          數(shù)倉建模分層理論
          數(shù)據(jù)湖是誰?那數(shù)據(jù)倉庫又算什么?
          數(shù)倉架構(gòu)發(fā)展史
          Hive 中的四種排序詳解
          Hive中的鎖的用法場(chǎng)景
          數(shù)倉建模方法論

          瀏覽 26
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  免费观看亚洲 | 最新中文字幕MV第三季歌词完整版 | 天天艹夜夜 | 视频在线a | 黄色片网站在线观看 |