Hadoop體系的強(qiáng)大工具組合
HDFS和MapReduce只是打造Hadoop平臺最基本的核心套件,在Apache基金會的網(wǎng)站中還有其他的相關(guān)開源套件,共同組成了一個Hadoop體系(Hadoop Ecosystem)。
透過這些相關(guān)方案的延伸,開發(fā)人員就算不懂Java,也可以用特定Script語言來撰寫Hadoop上的MapReduce程序,甚至可以用SQL語法來查詢HDFS上的資料。這些周邊方案可說是大幅強(qiáng)化Hadoop功能的軟體軍火庫,想要善用Hadoop的開發(fā)人員不可錯過。其中重要的周邊方案包括HBase、Hive 、ZooKeeper、Pig和Mahout。
HBase 能容納PB資料量的分散式資料庫
HBase是專門用於Hadoop檔案系統(tǒng)上的資料庫系統(tǒng),採取Column-Oriented 資料庫設(shè)計(jì),不同於傳統(tǒng)的關(guān)聯(lián)式資料庫,例如沒有資料表、Schema資料架構(gòu)等功能,而是採用Key-Value形式的資料架構(gòu),每筆資料都有一個Key值對應(yīng)到一個Value值,再透過多維度的對應(yīng)關(guān)係來建立類似表格效果的資料架構(gòu)。如此就能採取分散式儲存方式,可以擴(kuò)充到數(shù)千臺服務(wù)器,以應(yīng)付PB等級的資料處理。
Hive 可用SQL語法存取Hadoop資料
Hive是建置在HDFS上的一套分散式資料倉儲系統(tǒng),可讓使用者以慣用的SQL語法,來存取Hadoop檔案中的大型資料集,例如可以使用Join、Group by、Order by等,而這個語法稱為Hive QL。不過,Hive QL和SQL并非完全相同,例如Hive就不支援Store Procedure、Trigger等功能。
Hive會將使用者輸入的Hive QL指令編譯成Java程序,再來存取HDFS檔案系統(tǒng)上的資料,所以,執(zhí)行效率依指令復(fù)雜度和處理的資料量而異,可能有數(shù)秒鐘,甚至是數(shù)分鐘的延遲。和HBase相比,Hive容易使用且彈性高,但執(zhí)行速度較慢。不少資料庫系統(tǒng),都是透過先連結(jié)到Hive,才能與Hadoop整合。例如微軟就是透過Hive ODBC驅(qū)動程序,將SQL指令轉(zhuǎn)換成Hive QL,讓Excel可以存取Hadoop上的資料。
在同一個Hadoop叢集中,Hive可以存取HBase上的資料,將HBase上的資料對應(yīng)成Hive內(nèi)的一個表格。
Pig 不懂Java開發(fā)也能寫MapReduce
Pig提供了一個Script語言Pig Latin,語法簡單,類似可讀性高的高階Basic語言,可用來撰寫MapReduce程序。Pig會自動將這些腳本程序轉(zhuǎn)換,成為能在Hadoop中執(zhí)行的MapReduce Java程序。
因此,使用者即使不懂Java也能撰寫出MapReduce。不過,一般來說,透過Pig腳本程序轉(zhuǎn)換,會比直接用Java撰寫MapReduce的效能降低了25%。
ZooKeeper 讓Hadoop內(nèi)部服務(wù)器能協(xié)同運(yùn)作
Zookeeper是監(jiān)控和協(xié)調(diào)Hadoop分散式運(yùn)作的集中式服務(wù),可提供各個服務(wù)器的配置和運(yùn)作狀態(tài)資訊,用於提供不同Hadoop系統(tǒng)角色之間的工作協(xié)調(diào)。
以HBase資料庫為例,其中有兩種服務(wù)器角色:Region服務(wù)器角色和Master服務(wù)器角色,系統(tǒng)會自動透過ZooKeeper監(jiān)看Master服務(wù)器的狀態(tài),一旦Master的運(yùn)作資訊消失,代表當(dāng)機(jī)或網(wǎng)路斷線,HBase就會選出另一臺Region服務(wù)器成為Mater角色來負(fù)責(zé)管理工作。
Mahout 即時可用的常用MapReduce函數(shù)庫
在Hadoop中,開發(fā)人員必須將資料處理作法拆解成可分散運(yùn)算的Map和Reduce程序,因?yàn)樗伎歼壿嫼统R姷某绦蜷_發(fā)邏輯不同,所以開發(fā)難度狠高。Mahout則提供了一個常用的MapReduce函式庫,常見的數(shù)值分析方法、叢集分類和篩選方式,都已經(jīng)有對應(yīng)的MapReduce函數(shù)可呼叫,開發(fā)人員就不必再重復(fù)開發(fā)一次。