hbase replication,Hive 整合 HBase

 2023-10-22 阅读 18 评论 0

摘要:作者 | 廣???責編 | 張文頭圖 | CSDN 下載自視覺中國HBase 雖然可以存儲數億或數十億行數據,但是對于數據分析來說不太友好,它只提供了簡單的基于 Key 值的快速查詢能力,沒法進行大量的條件查詢。現有 HBase 的查詢工具有很多如:Hive、Tez、Impa

作者 | 廣???責編 | 張文

頭圖 | CSDN 下載自視覺中國

HBase 雖然可以存儲數億或數十億行數據,但是對于數據分析來說不太友好,它只提供了簡單的基于 Key 值的快速查詢能力,沒法進行大量的條件查詢。

現有 HBase 的查詢工具有很多如:Hive、Tez、Impala、Shark/Spark、Phoenix 等。今天主要說 Hive。

Hive 方便地提供了 Hive QL 的接口來簡化 MapReduce 的使用, 而 HBase 提供了低延遲的數據庫訪問。如果兩者結合,可以利用 MapReduce 的優勢針對 HBase 存儲的大量內容進行離線的計算和分析。


Hive 和 HBase 通信原理

Hive 與 HBase 整合的實現是利用兩者本身對外的 API 接口互相通信來完成的。這種相互通信是通過 $HIVE_HOME/lib/hive-hbase-handler-{hive.version}.jar 工具類實現的。

通過 HBaseStorageHandler,Hive 可以獲取到 Hive 表所對應的 HBase 表名、列簇和列、InputFormat、OutputFormat 類、創建和刪除 HBase 表等。

hbase replication?Hive 訪問 HBase 中表數據,實質上是通過 MapReduce 讀取 HBase 表數據,其實現是在 MR 中,使用 HiveHBaseTableInputFormat 完成對 HBase 表的切分,獲取 RecordReader 對象來讀取數據。

對 HBase 表的切分原則是一個 Region 切分成一個 Split,即表中有多少個 Regions,MR 中就有多少個 Map;讀取 HBase 表數據都是通過構建 Scanner,對表進行全表掃描,如果有過濾條件,則轉化為 Filter。當過濾條件為 rowkey 時,則轉化為對 rowkey 的過濾;Scanner 通過 RPC 調用 RegionServer 的 next()來獲取數據;

基本通信原理如下:

Hive-HBase


具體步驟

新建 HBase 表:

create 'test', 'f1'

插入數據:

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 有個列簇 f1,有兩個列 c1 和 c2,新建 Hive 表關聯 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");

hadoop hbase?這里使用外部表映射到 HBase 中的表,Hive 對應的 hdfs 目錄是空的,數據仍然在 HBase 中,這樣在 Hive 中刪除表,并不會刪除 HBase 中的表,否則,就會刪除。

另外,除了 rowkey,其他三個字段使用 Map 結構來保存 HBase 中的每一個列族。

其中,參數解釋如下:

  • hbase.zookeeper.quorum:

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

  • zookeeper.znode.parent

hadoop和hbase對應版本。指定 HBase 在 zookeeper 中使用的根目錄

  • hbase.columns.mapping

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

  • hbase.table.name

HBase 中表的名字

也可以直接在 Hive 中創建表的同時,完成在 HBase 中創建表。
在 Hive 中查詢 HBase 表:

hive> select * from test.test;OK1    name1   name22    name1   name23    name1   name2

hbase集群搭建,也可以插入數據:

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

查看 HBase 的數據:

hive> select * from test.test;OK1    name1   name22    name1   name23    name1   name24    name4   name4


Spark 讀取提升速度

Hive 關聯 HBase 實際是底層是 MR,速度較慢,此時可以使用 spark sql 讀取 Hive 表,進行查詢操作,從而訪問 HBase 數據。

程序員如何避免陷入“內卷”、選擇什么技術最有前景,中國開發者現狀與技術趨勢究竟是什么樣?快來參與「2020?中國開發者大調查」,更有豐富獎品送不停!

?我們差點就用不上 Java 了!?印度永久封禁了微信、百度、TikTok 等 59 款中國 App……
?RISC-V 正在成為芯片世界中的 Linux

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/4/160104.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息