日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

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

不過,Hive 與 HBase 的整合可以實現我們的這個目標。不僅如此,還能通過 Hive 將數據批量地導入到 HBase 中。

今天我們來為大家介紹hive和HBase的區別,以及相互間的整合聯用。

 

兩者分別是什么?

Apache Hive是一個構建在Hadoop基礎設施之上的數據倉庫。通過Hive可以使用HQL語言查詢存放在HDFS上的數據。HQL是一種類SQL語言,這種語言最終被轉化為Map/Reduce. 雖然Hive提供了SQL查詢功能,但是Hive不能夠進行交互查詢--因為它只能夠在Haoop上批量的執行Hadoop。

Apache HBase是一種Key/Value系統,它運行在HDFS之上。和Hive不一樣,Hbase的能夠在它的數據庫上實時運行,而不是運行MapReduce任務。Hive被分區為表格,表格又被進一步分割為列簇。列簇必須使用schema定義,列簇將某一類型列集合起來(列不要求schema定義)。例如,“message”列簇可能包含:“to”, ”from” “date”, “subject”, 和”body”. 每一個 key/value對在Hbase中被定義為一個cell,每一個key由row-key,列簇、列和時間戳。在Hbase中,行是key/value映射的集合,這個映射通過row-key來唯一標識。Hbase利用Hadoop的基礎設施,可以利用通用的設備進行水平的擴展。

大數據時代|Hive和HBase的區別以及整合聯用,真的是硬干貨

 

兩者的特點

Hive幫助熟悉SQL的人運行MapReduce任務。因為它是JDBC兼容的,同時,它也能夠和現存的SQL工具整合在一起。運行Hive查詢會花費很長時間,因為它會默認遍歷表中所有的數據。雖然有這樣的缺點,一次遍歷的數據量可以通過Hive的分區機制來控制。分區允許在數據集上運行過濾查詢,這些數據集存儲在不同的文件夾內,查詢的時候只遍歷指定文件夾(分區)中的數據。這種機制可以用來,例如,只處理在某一個時間范圍內的文件,只要這些文件名中包括了時間格式。

HBase通過存儲key/value來工作。它支持四種主要的操作:增加或者更新行,查看一個范圍內的cell,獲取指定的行,刪除指定的行、列或者是列的版本。版本信息用來獲取歷史數據(每一行的歷史數據可以被刪除,然后通過Hbase compactions就可以釋放出空間)。雖然HBase包括表格,但是schema僅僅被表格和列簇所要求,列不需要schema。Hbase的表格包括增加/計數功能。

 

限制

Hive目前不支持更新操作。另外,由于hive在hadoop上運行批量操作,它需要花費很長的時間,通常是幾分鐘到幾個小時才可以獲取到查詢的結果。Hive必須提供預先定義好的schema將文件和目錄映射到列,并且Hive與ACID不兼容。

HBase查詢是通過特定的語言來編寫的,這種語言需要重新學習。類SQL的功能可以通過Apache Phonenix實現,但這是以必須提供schema為代價的。另外,Hbase也并不是兼容所有的ACID特性,雖然它支持某些特性。最后但不是最重要的--為了運行Hbase,Zookeeper是必須的,zookeeper是一個用來進行分布式協調的服務,這些服務包括配置服務,維護元信息和命名空間服務。

應用場景

Hive適合用來對一段時間內的數據進行分析查詢,例如,用來計算趨勢或者網站的日志。Hive不應該用來進行實時的查詢。因為它需要很長時間才可以返回結果。

Hbase非常適合用來進行大數據的實時查詢。Facebook用Hbase進行消息和實時的分析。它也可以用來統計Facebook的連接數。

區別總結

Hive和Hbase是兩種基于Hadoop的不同技術--Hive是一種類SQL的引擎,并且運行MapReduce任務,Hbase是一種在Hadoop之上的NoSQL 的Key/vale數據庫。當然,這兩種工具是可以同時使用的。就像用google來搜索,用FaceBook進行社交一樣,Hive可以用來進行統計查詢,HBase可以用來進行實時查詢,數據也可以從Hive寫到Hbase,設置再從Hbase寫回Hive。

Hive 與 HBase 整合的適用場景:

  • 通過 Hive 與 HBase 整合,可以將 HBase 的數據通過 Hive 來分析,讓 HBase 支持 JOIN、GROUP 等 SQL 查詢語法。
  • 實現將批量數據導入到 HBase 表中。

依賴條件

需要有以下依賴,ambari 已經為我們做好了這一切:

  • 已有 HDFS、MapReduce、Hive、Zookeeper、HBase 環境。
  • 確保 Hive 的 lib 目錄下有 hive-hbase-handler-xxx.jar、Zookeeper jar、HBase Server jar、HBase Client jar 包。

使用HBase Hive集成

注意,這里與HDP 2.x不同:在 HDP 3.0 中對 Hive-3.1.0 的更改是所有 StorageHandler 必須標記為“外部”,沒有 StorageHandler 創建的非外部表。如果在創建 Hive 表時存在相應的 HBase 表,它將模仿“外部”表的 HDP 2.x 語義。如果在創建 Hive 表時不存在相應的 HBase 表,則它將模仿非外部表的 HDP 2.x 語義。

總結: 不管 HBase 表是否存在,在 Hive 中都要使用 external 表來與 HBase 表進行關聯,如果關聯的 HBase 表不存在,Hive 會自動創建Hbase 表。

示例

1.HBase表不存在

CREATE EXTERNAL TABLE hive_table (key int, value string) 
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mApping" = ":key,cf1:val")
TBLPROPERTIES ("hbase.table.name" = "default:hbase_table");

這里簡單說一下建表時的參數:

  • hbase.columns.mapping 是必須的,這將會和 HBase 表的列族進行驗證。
  • hbase.table.name 屬性是可選的,默認指定 HBase 表名與 Hive 表名一致。

此時,hivetable 與 hbasetable 都是空的。我們準備一些數據:

insert into hive_table (key, value) values(1, "www.ymq.io");

insert 語句會觸發 map 任務,如下圖所示:

大數據時代|Hive和HBase的區別以及整合聯用,真的是硬干貨

 

任務完成之后,Hive 與 HBase 表中就都存在數據了。

# hive_table 表數據
+-----------------+-------------------+
| hive_table.key  | hive_table.value  |
+-----------------+-------------------+
| 1               | www.ymq.io        |
+-----------------+-------------------+
# hbase_table表數據
hbase(main):002:0> scan 'hbase_table'
ROW                                    COLUMN+CELL                                                                                                  
 1                                     column=cf1:val, timestamp=1558710260266, value=www.ymq.io                                                    
1 row(s)
Took 0.2400 seconds

當將 hivetable 表刪除,對應的 hbasetable 表不受影響,里面依舊有數據。當刪除 hbasetable 表后,再查詢 hivetable 表數據,會報錯:Error: JAVA.io.IOException: org.apache.hadoop.hbase.TableNotFoundException: hbase_table (state=,code=0),這是正常的。

注意!注意!注意: 在上述示例中,我們使用的 insert 命令向 Hive 表中插入數據。對于批量數據的插入,還是建議使用 load 命令,但對于 Hive 外部表來說,不支持 load 命令。我們可以先創建一個 Hive 內部表,將數據 load 到該表中,最后將查詢內部表的所有數據都插入到與 Hbase 關聯的 Hive 外部表中,就可以了,相當于中轉一下。


2. HBase表已存在

創建 HBase 表:

create 'default:people', {NAME=>'basic_info'}, {NAME=>'other_info'}

插入一些數據:

put 'people', '00017','basic_info:name','tom'
put 'people', '00017','basic_info:age','17'
put 'people', '00017','basic_info:sex','man'
put 'people', '00017','other_info:telPhone','176xxxxxxxx'
put 'people', '00017','other_info:country','China'

put 'people', '00023','basic_info:name','mary'
put 'people', '00023','basic_info:age',23
put 'people', '00023','basic_info:sex','woman'
put 'people', '00023','basic_info:edu','college'
put 'people', '00023','other_info:email','cdsvo@163.com'
put 'people', '00023','other_info:country','Japan'

put 'people', '00018','basic_info:name','sam'
put 'people', '00018','basic_info:age','18'
put 'people', '00018','basic_info:sex','man'
put 'people', '00018','basic_info:edu','middle'
put 'people', '00018','other_info:telPhone','132xxxxxxxx'
put 'people', '00018','other_info:country','America'

put 'people', '00026','basic_info:name','Sariel'
put 'people', '00026','basic_info:age',26
put 'people', '00026','basic_info:edu','college'
put 'people', '00026','other_info:telPhone','178xxxxxxxx'
put 'people', '00026','other_info:email','12345@126.com'
put 'people', '00026','other_info:country','中國'

再創建一個簡單的 Hive 外部表,語法與之前的一致:

create external table people
(
id int,
name string,
age string,
sex string, 
edu string, 
country string, 
telPhone string,  
email string
)
stored by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
with serdeproperties ("hbase.columns.mapping" = "
:key,
basic_info:name,
basic_info:age,
basic_info:sex,
basic_info:edu,
other_info:country,
other_info:telPhone,
other_info:email
")
tblproperties("hbase.table.name" = "default:people");

查詢全部數據:

select * from people;
大數據時代|Hive和HBase的區別以及整合聯用,真的是硬干貨

 

條件查詢:

# 根據性別查詢
select * from people where sex = 'man';
# 根據年齡查詢
select * from people where age > 18;

這樣,我們就可以使用 Hive 來分析 HBase 中的數據了。

 

分享到:
標簽:數據
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定