Hadoop歷史、HDFS特點及對大數(shù)據(jù)時代的意義
如今Apache Hadoop已成為大數(shù)據(jù)行業(yè)發(fā)展背后的驅(qū)動力。Hive和Pig等技術(shù)也經(jīng)常被提到,但是他們都有什么功能,為什么會需要奇怪的名字(如Oozie,ZooKeeper、Flume)。
Hadoop帶來了廉價的處理大數(shù)據(jù)(大數(shù)據(jù)的數(shù)據(jù)容量通常是10-100GB或更多,同時數(shù)據(jù)種類多種多樣,包括結(jié)構(gòu)化、非結(jié)構(gòu)化等)的能力。但這與之前有什么不同?
現(xiàn)今企業(yè)數(shù)據(jù)倉庫和關(guān)系型數(shù)據(jù)庫擅長處理結(jié)構(gòu)化數(shù)據(jù),并且可以存儲大量的數(shù)據(jù)。但成本上有些昂貴。這種對數(shù)據(jù)的要求限制了可處理的數(shù)據(jù)種類,同時這種慣性所帶的缺點還影響到數(shù)據(jù)倉庫在面對海量異構(gòu)數(shù)據(jù)時對于敏捷的探索。這通常意味著有價值的數(shù)據(jù)源在組織內(nèi)從未被挖掘。這就是Hadoop與傳統(tǒng)數(shù)據(jù)處理方式最大的不同。
本文就重點探討了Hadoop系統(tǒng)的組成部分,并解釋各個組成部分的功能。
MapReduce——Hadoop的核心
Google的網(wǎng)絡(luò)搜索引擎在得益于算法發(fā)揮作用的同時,MapReduce在后臺發(fā)揮了極大的作用。MapReduce框架成為當(dāng)今大數(shù)據(jù)處理背后的最具影響力的“發(fā)動機”。除了Hadoop,你還會在MapReduce上發(fā)現(xiàn)MPP(Sybase IQ推出了列示數(shù)據(jù)庫)和NoSQL(如Vertica和MongoDB)。
MapReduce的重要創(chuàng)新是當(dāng)處理一個大數(shù)據(jù)集查詢時會將其任務(wù)分解并在運行的多個節(jié)點中處理。當(dāng)數(shù)據(jù)量很大時就無法在一臺服務(wù)器上解決問題,此時分布式計算優(yōu)勢就體現(xiàn)出來。將這種技術(shù)與Linux服務(wù)器結(jié)合可獲得性價比極高的替代大規(guī)模計算陣列的方法。Yahoo在2006年看到了Hadoop未來的潛力,并邀請Hadoop創(chuàng)始人Doug Cutting著手發(fā)展Hadoop技術(shù),在2008年Hadoop已經(jīng)形成一定的規(guī)模。Hadoop項目再從初期發(fā)展的成熟的過程中同時吸納了一些其他的組件,以便進一步提高自身的易用性和功能。
HDFS和MapReduce
以上我們討論了MapReduce將任務(wù)分發(fā)到多個服務(wù)器上處理大數(shù)據(jù)的能力。而對于分布式計算,每個服務(wù)器必須具備對數(shù)據(jù)的訪問能力,這就是HDFS(Hadoop Distributed File System)所起到的作用。
HDFS與MapReduce的結(jié)合是強大的。在處理大數(shù)據(jù)的過程中,當(dāng)Hadoop集群中的服務(wù)器出現(xiàn)錯誤時,整個計算過程并不會終止。同時HFDS可保障在整個集群中發(fā)生故障錯誤時的數(shù)據(jù)冗余。當(dāng)計算完成時將結(jié)果寫入HFDS的一個節(jié)點之中。HDFS對存儲的數(shù)據(jù)格式并無苛刻的要求,數(shù)據(jù)可以是非結(jié)構(gòu)化或其它類別。相反關(guān)系數(shù)據(jù)庫在存儲數(shù)據(jù)之前需要將數(shù)據(jù)結(jié)構(gòu)化并定義架構(gòu)。
開發(fā)人員編寫代碼責(zé)任是使數(shù)據(jù)有意義。Hadoop MapReduce級的編程利用Java APIs,并可手動加載數(shù)據(jù)文件到HDFS之中。
Pig和Hive
對于開發(fā)人員,直接使用Java APIs可能是乏味或容易出錯的,同時也限制了Java程序員在Hadoop上編程的運用靈活性。于是Hadoop提供了兩個解決方案,使得Hadoop編程變得更加容易。
•Pig是一種編程語言,它簡化了Hadoop常見的工作任務(wù)。Pig可加載數(shù)據(jù)、表達轉(zhuǎn)換數(shù)據(jù)以及存儲最終結(jié)果。Pig內(nèi)置的操作使得半結(jié)構(gòu)化數(shù)據(jù)變得有意義(如日志文件)。同時Pig可擴展使用Java中添加的自定義數(shù)據(jù)類型并支持數(shù)據(jù)轉(zhuǎn)換。
•Hive在Hadoop中扮演數(shù)據(jù)倉庫的角色。Hive添加數(shù)據(jù)的結(jié)構(gòu)在HDFS(hive superimposes structure on data in HDFS),并允許使用類似于SQL語法進行數(shù)據(jù)查詢。與Pig一樣,Hive的核心功能是可擴展的。
Pig和Hive總是令人困惑的。Hive更適合于數(shù)據(jù)倉庫的任務(wù),Hive主要用于靜態(tài)的結(jié)構(gòu)以及需要經(jīng)常分析的工作。Hive與SQL相似促使其成為Hadoop與其他BI工具結(jié)合的理想交集。Pig賦予開發(fā)人員在大數(shù)據(jù)集領(lǐng)域更多的靈活性,并允許開發(fā)簡潔的腳本用于轉(zhuǎn)換數(shù)據(jù)流以便嵌入到較大的應(yīng)用程序。Pig相比Hive相對輕量,它主要的優(yōu)勢是相比于直接使用Hadoop Java APIs可大幅削減代碼量。正因為如此,Pig仍然是吸引大量的軟件開發(fā)人員。
改善數(shù)據(jù)訪問:HBase、Sqoop以及Flume
Hadoop核心還是一套批處理系統(tǒng),數(shù)據(jù)加載進HDFS、處理然后檢索。對于計算這或多或少有些倒退,但通常互動和隨機存取數(shù)據(jù)是有必要的。HBase作為面向列的數(shù)據(jù)庫運行在HDFS之上。HBase以Google BigTable為藍本。項目的目標就是快速在主機內(nèi)數(shù)十億行數(shù)據(jù)中定位所需的數(shù)據(jù)并訪問它。HBase利用MapReduce來處理內(nèi)部的海量數(shù)據(jù)。同時Hive和Pig都可以與HBase組合使用,Hive和Pig還為HBase提供了高層語言支持,使得在HBase上進行數(shù)據(jù)統(tǒng)計處理變的非常簡單。
但為了授權(quán)隨機存儲數(shù)據(jù),HBase也做出了一些限制:例如Hive與HBase的性能比原生在HDFS之上的Hive要慢4-5倍。同時HBase大約可存儲PB級的數(shù)據(jù),與之相比HDFS的容量限制達到30PB。HBase不適合用于ad-hoc分析,HBase更適合整合大數(shù)據(jù)作為大型應(yīng)用的一部分,包括日志、計算以及時間序列數(shù)據(jù)。
獲取數(shù)據(jù)與輸出數(shù)據(jù)
Sqoop和Flume可改進數(shù)據(jù)的互操作性和其余部分。Sqoop功能主要是從關(guān)系數(shù)據(jù)庫導(dǎo)入數(shù)據(jù)到Hadoop,并可直接導(dǎo)入到HFDS或Hive。而Flume設(shè)計旨在直接將流數(shù)據(jù)或日志數(shù)據(jù)導(dǎo)入HDFS。
Hive具備的友好SQL查詢是與繁多數(shù)據(jù)庫的理想結(jié)合點,數(shù)據(jù)庫工具通過JDBC或ODBC數(shù)據(jù)庫驅(qū)動程序連接。
負責(zé)協(xié)調(diào)工作流程的ZooKeeper和Oozie
隨著越來越多的項目加入Hadoop大家庭并成為集群系統(tǒng)運作的一部分,大數(shù)據(jù)處理系統(tǒng)需要負責(zé)協(xié)調(diào)工作的的成員。隨著計算節(jié)點的增多,集群成員需要彼此同步并了解去哪里訪問服務(wù)和如何配置,ZooKeeper正是為此而生的。
而在Hadoop執(zhí)行的任務(wù)有時候需要將多個Map/Reduce作業(yè)連接到一起,它們之間或許批次依賴。Oozie組件提供管理工作流程和依賴的功能,并無需開發(fā)人員編寫定制的解決方案。
Ambari是最新加入Hadoop的項目,Ambari項目旨在將監(jiān)控和管理等核心功能加入Hadoop項目。Ambari可幫助系統(tǒng)管理員部署和配置Hadoop,升級集群以及監(jiān)控服務(wù)。還可通過API集成與其他的系統(tǒng)管理工具。
Apache Whirr是一套運行于云服務(wù)的類庫(包括Hadoop),可提供高度的互補性。Whirr現(xiàn)今相對中立,當(dāng)前支持Amazon EC2和Rackspace服務(wù)。
機器學(xué)習(xí):Mahout
各類組織需求的不同導(dǎo)致相關(guān)的數(shù)據(jù)形形色色,對這些數(shù)據(jù)的分析也需要多樣化的方法。Mahout提供一些可擴展的機器學(xué)習(xí)領(lǐng)域經(jīng)典算法的實現(xiàn),旨在幫助開發(fā)人員更加方便快捷地創(chuàng)建智能應(yīng)用程序。Mahout包含許多實現(xiàn),包括集群、分類、推薦過濾、頻繁子項挖掘。
使用Hadoop
通常情況下,Hadoop應(yīng)用于分布式環(huán)境。就像之前Linux的狀況一樣,廠商集成和測試Apache Hadoop生態(tài)系統(tǒng)的組件,并添加自己的工具和管理功能。(李智/編譯)