擴充Hadoop功能的軍火庫 [Hive 可用SQL語法存取Hadoop資料]
擴充Hadoop功能的軍火庫 [Hive 可用SQL語法存取Hadoop資料]
資料來源:https://www.ithome.com.tw/node/73980
HDFS和MapReduce只是打造Hadoop平臺最基本的核心套件,在Apache基金會的網站中還有其他的相關開源套件,共同組成了一個Hadoop體系(Hadoop Ecosystem)。
透過這些相關專案的延伸,開發人員就算不懂Java,也可以用特定Script語言來撰寫Hadoop上的MapReduce程式,甚至可以用SQL語法來查詢HDFS上的資料。這些周邊專案可說是大幅強化Hadoop功能的軟體軍火庫,想要善用Hadoop的開發人員不可錯過。其中重要的周邊專案包括HBase、Hive 、ZooKeeper、Pig和Mahout。
HBase 能容納PB資料量的分散式資料庫
HBase是專門用於Hadoop檔案系統上的資料庫系統,採取Column-Oriented 資料庫設計,不同於傳統的關聯式資料庫,例如沒有資料表、Schema資料架構等功能,而是採用Key-Value形式的資料架構,每筆資料都有一個Key值對應到一個Value值,再透過多維度的對應關係來建立類似表格效果的資料架構。如此就能採取分散式儲存方式,可以擴充到數千臺伺服器,以應付PB等級的資料處理。
Hive 可用SQL語法存取Hadoop資料
Hive是建置在HDFS上的一套分散式資料倉儲系統,可讓使用者以慣用的SQL語法,來存取Hadoop檔案中的大型資料集,例如可以使用Join、Group by、Order by等,而這個語法稱為Hive QL。不過,Hive QL和SQL並非完全相同,例如Hive就不支援Store Procedure、Trigger等功能。
Hive會將使用者輸入的Hive QL指令編譯成Java程式,再來存取HDFS檔案系統上的資料,所以,執行效率依指令複雜度和處理的資料量而異,可能有數秒鐘,甚至是數分鐘的延遲。和HBase相比,Hive容易使用且彈性高,但執行速度較慢。不少資料庫系統,都是透過先連結到Hive,才能與Hadoop整合。例如微軟就是透過Hive ODBC驅動程式,將SQL指令轉換成Hive QL,讓Excel可以存取Hadoop上的資料。
在同一個Hadoop叢集中,Hive可以存取HBase上的資料,將HBase上的資料對應成Hive內的一個表格。
Pig 不懂Java開發也能寫MapReduce
Pig提供了一個Script語言Pig Latin,語法簡單,類似可讀性高的高階Basic語言,可用來撰寫MapReduce程式。Pig會自動將這些腳本程式轉換,成為能在Hadoop中執行的MapReduce Java程式。
因此,使用者即使不懂Java也能撰寫出MapReduce。不過,一般來說,透過Pig腳本程式轉換,會比直接用Java撰寫MapReduce的效能降低了25%。
ZooKeeper 讓Hadoop內部伺服器能協同運作
Zookeeper是監控和協調Hadoop分散式運作的集中式服務,可提供各個伺服器的配置和運作狀態資訊,用於提供不同Hadoop系統角色之間的工作協調。
以HBase資料庫為例,其中有兩種伺服器角色:Region伺服器角色和Master伺服器角色,系統會自動透過ZooKeeper監看Master伺服器的狀態,一旦Master的運作資訊消失,代表當機或網路斷線,HBase就會選出另一臺Region伺服器成為Mater角色來負責管理工作。
Mahout 立即可用的常用MapReduce函式庫
在Hadoop中,開發人員必須將資料處理作法拆解成可分散運算的Map和Reduce程式,因為思考邏輯和常見的程式開發邏輯不同,所以開發難度很高。Mahout則提供了一個常用的MapReduce函式庫,常見的數值分析方法、叢集分類和篩選方式,都已經有對應的MapReduce函數可呼叫,開發人員就不必再重複開發一次。
One thought on “擴充Hadoop功能的軍火庫 [Hive 可用SQL語法存取Hadoop資料]”
Hive、Hbase、mysql區別
https://www.itread01.com/p/1135524.html
Hive和HBase的區別
Hive是為了簡化編寫MapReduce程式而生的,使用MapReduce做過資料分析的人都知道,很多分析程式除業務邏輯不同外,程式流程基本一樣。在這種情況下,就需要Hive這樣的使用者程式設計介面。Hive本身不儲存和計算資料,它完全依賴於HDFS和MapReduce,Hive中的表純邏輯,就是些表的定義等,也就是表的元資料。使用SQL實現Hive是因為SQL大家都熟悉,轉換成本低,類似作用的Pig就不是SQL。
HBase為查詢而生的,它通過組織起節點內所有機器的記憶體,提供一個超大的記憶體Hash表,它需要組織自己的資料結構,包括磁碟和記憶體中的,而Hive是不做這個的,表在HBase中是物理表,而不是邏輯表,搜尋引擎使用它來儲存索引,以滿足查詢的實時性需求。
hive類似CloudBase,也是基於hadoop分散式計算平臺上的提供data warehouse的sql功能的一套軟體。使得儲存在hadoop裡面的海量資料的彙總,即席查詢簡單化。hive提供了一套QL的查詢語言,以sql為基礎,使用起來很方便。
HBase是一個分散式的基於列儲存的非關係型資料庫。HBase的查詢效率很高,主要由於查詢和展示結果。
hive是分散式的關係型資料庫。主要用來並行分散式處理大量資料。hive中的所有查詢除了”select * from table;”都是需要通過Map/Reduce的方式來執行的。由於要走Map/Reduce,即使一個只有1行1列的表,如果不是通過select * from table;方式來查詢的,可能也需要8、9秒。但hive比較擅長處理大量資料。當要處理的資料很多,並且Hadoop叢集有足夠的規模,這時就能體現出它的優勢。
通過hive的儲存介面,hive和Hbase可以整合使用。
1、hive是sql語言,通過資料庫的方式來操作hdfs檔案系統,為了簡化程式設計,底層計算方式為mapreduce。
2、hive是面向行儲存的資料庫。
3、Hive本身不儲存和計算資料,它完全依賴於HDFS和MapReduce,Hive中的表純邏輯。
4、HBase為查詢而生的,它通過組織起節點內所有機器的記憶體,提供一個超大的記憶體Hash表 。
5、hbase不是關係型資料庫,而是一個在hdfs上開發的面向列的分散式資料庫,不支援sql。
6、hbase是物理表,不是邏輯表,提供一個超大的記憶體hash表,搜尋引擎通過它來儲存索引,方便查詢操作。
7、hbase是列儲存。
Hive和Hbase有各自不同的特徵:hive是高延遲、結構化和麵向分析的,hbase是低延遲、非結構化和麵向程式設計的。Hive資料倉庫在hadoop上是高延遲的。
其中HBase位於結構化儲存層,Hadoop HDFS為HBase提供了高可靠性的底層儲存支援,Hadoop MapReduce為HBase提供了高效能的計算能力,Zookeeper為HBase提供了穩定服務和failover機制。
轉:
覺得在問區別之前,我應該顯示說相同點,這麼一想,又糊塗了,hive和hbase哪裡像了,好像哪裡都不像,既然哪裡都不像,又何來的“區別是什麼”這一問題,他倆所有的都算區別。
那麼,hive是什麼?
白話一點再加不嚴格一點,hive可以認為是map-reduce的一個包裝。hive的意義就是把好寫的hive的sql轉換為複雜難寫的map-reduce程式。
於是,hbase是什麼?
同樣白話一點加不嚴格一點,hbase可以認為是hdfs的一個包裝。他的本質是資料儲存,是個NoSql資料庫;hbase部署於hdfs之上,並且克服了hdfs在隨機讀寫方面的缺點。
所以要問hive和hbase的區別,就應該問問map-reduce和hdfs之間的區別,問區別,就要先說說他倆哪裡像。
Hive和資料庫的比較
由於 Hive 採用了 SQL 的查詢語言 HQL,因此很容易將 Hive 理解為資料庫。其實從結構上來看,Hive 和資料庫除了擁有類似的查詢語言,再無類似之處。本文將從多個方面來闡述 Hive 和資料庫的差異。資料庫可以用在 Online 的應用中,但是Hive 是為資料倉庫而設計的,清楚這一點,有助於從應用角度理解 Hive 的特性。
查詢語言
由於SQL被廣泛的應用在資料倉庫中,因此,專門針對Hive的特性設計了類SQL的查詢語言HQL。熟悉SQL開發的開發者可以很方便的使用Hive進行開發。
資料儲存位置
Hive 是建立在 Hadoop 之上的,所有 Hive 的資料都是儲存在 HDFS 中的。而資料庫則可以將資料儲存在塊裝置或者本地檔案系統中。
資料格式
Hive 中沒有定義專門的資料格式,資料格式可以由使用者指定,使用者定義資料格式需要指定三個屬性:列分隔符(通常為空格、”/t”、”/x001″)、行分隔符(”/n”)以及讀取檔案資料的方法(Hive 中預設有三個檔案格式TextFile,SequenceFile以及RCFile)。由於在載入資料的過程中,不需要從使用者資料格式到 Hive 定義的資料格式的轉換,因此,Hive在載入的過程中不會對資料本身進行任何修改,而只是將資料內容複製或者移動到相應的HDFS目錄中。而在資料庫中,不同的資料庫有不同的儲存引擎,定義了自己的資料格式。所有資料都會按照一定的組織儲存,因此,資料庫載入資料的過程會比較耗時。
資料更新
由於Hive是針對資料倉庫應用設計的,而資料倉庫的內容是讀多寫少的。因此,Hive中不支援對資料的改寫和新增,所有的資料都是在載入的時候中確定好的。而資料庫中的資料通常是需要經常進行修改的,因此可以使用 INSERT INTO … VALUES 新增資料,使用 UPDATE … SET修改資料。
索引
之前已經說過,Hive在載入資料的過程中不會對資料進行任何處理,甚至不會對資料進行掃描,因此也沒有對資料中的某些Key建立索引。Hive要訪問資料中滿足條件的特定值時,需要暴力掃描整個資料,因此訪問延遲較高。由於 MapReduce 的引入, Hive 可以並行訪問資料,因此即使沒有索引,對於大資料量的訪問,Hive 仍然可以體現出優勢。資料庫中,通常會針對一個或者幾個列建立索引,因此對於少量的特定條件的資料的訪問,資料庫可以有很高的效率,較低的延遲。由於資料的訪問延遲較高,決定了 Hive 不適合線上資料查詢。
執行
Hive中大多數查詢的執行是通過 Hadoop 提供的 MapReduce 來實現的(類似 select * from tbl的查詢不需要MapReduce)。而資料庫通常有自己的執行引擎。
執行延遲
之前提到,Hive 在查詢資料的時候,由於沒有索引,需要掃描整個表,因此延遲較高。另外一個導致 Hive 執行延遲高的因素是 MapReduce框架。由於MapReduce 本身具有較高的延遲,因此在利用MapReduce 執行Hive查詢時,也會有較高的延遲。相對的,資料庫的執行延遲較低。當然,這個低是有條件的,即資料規模較小,當資料規模大到超過資料庫的處理能力的時 候,Hive的平行計算顯然能體現出優勢。
可擴充套件性
由於Hive是建立在Hadoop之上的,因此Hive的可擴充套件性是和Hadoop的可擴充套件性是一致的(世界上最大的Hadoop 叢集在 Yahoo!,2009年的規模在4000 臺節點左右)。而資料庫由於 ACID 語義的嚴格限制,擴充套件行非常有限。目前最先進的並行資料庫 Oracle 在理論上的擴充套件能力也只有100臺左右。
資料規模
由於Hive建立在叢集上並可以利用MapReduce進行平行計算,因此可以支援很大規模的資料;對應的,資料庫可以支援的資料規模較小。