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