關(guān)于Hadoop你需要知道的幾件事情
在當今的技術(shù)領(lǐng)域,大數(shù)據(jù)是個熱門的IT流行詞語。為了減輕處理大量數(shù)據(jù)時的復雜度,Apache開發(fā)了Hadoop——一個可靠的、可擴展的分布式計算框架。Hadoop特別適合大數(shù)據(jù)處理任務(wù),并且它可以利用其分布式的文件系統(tǒng),可靠并且低成本的將數(shù)據(jù)塊復制到集群中的節(jié)點上去,從而使數(shù)據(jù)能在本地機器上進行處理。Anoop Kumar從十個方面講解了利用Hadoop處理大數(shù)據(jù)所需要的技巧。
對于從HDFS中導入/導出數(shù)據(jù)方面,Anoop指出,在Hadoop的世界中,數(shù)據(jù)可以從多種不同的來源中被導入到Hadoop分布式文件系統(tǒng)中(HDFS)。在向HDFS中導入數(shù)據(jù)后,將通過用MapReduce或者其他語言比如Hive、Pig等來對數(shù)據(jù)進行某一層次的處理。
Hadoop系統(tǒng)不僅提供了處理大量數(shù)據(jù)的靈活性,并且同時也可以對數(shù)據(jù)進行過濾和聚合等處理,并且被處理轉(zhuǎn)換過的數(shù)據(jù)可以導出到外部數(shù)據(jù)庫或者其他使用Sqoop的數(shù)據(jù)庫中。從MySQL、SQL Server或者MongoDB等其他數(shù)據(jù)庫中導出數(shù)據(jù)也是一個強大的功能。這樣的益處是可以更好的控制數(shù)據(jù)。
第二個方面是HDFS中的數(shù)據(jù)壓縮,Hadoop中的數(shù)據(jù)存儲在HDFS上,并且支持數(shù)據(jù)的壓縮與解壓縮。數(shù)據(jù)壓縮可以通過一些壓縮算法來實現(xiàn),例如bzip2、gzip、LZO等。不同的算法可以根據(jù)其功能在不同的情況下使用,比如壓縮/解壓縮的速度或者文件分割的能力等。
在Hadoop的轉(zhuǎn)換方面,Hadoop是一個用于提取和轉(zhuǎn)換大量數(shù)據(jù)的理想環(huán)境。同時,Hadoop提供了一個可擴展、可靠的并且分布式的處理環(huán)境。通過使用MapReduce、Hive和Pig等,可以用很多種方式來提取并轉(zhuǎn)換數(shù)據(jù)。
一旦輸入數(shù)據(jù)被導入或放置到HDFS中,之后Hadoop集群可以被用于并行轉(zhuǎn)換大型數(shù)據(jù)集。正如剛才提到的,數(shù)據(jù)轉(zhuǎn)換可以通過可用工具來實現(xiàn)。例如,如果你想把數(shù)據(jù)轉(zhuǎn)換為一個被制表符分開的文件,那么MapReduce則是***的工具之一。同理,Hive和Python可以被用于清理和轉(zhuǎn)換地理事件的數(shù)據(jù)資料。
對于如何實現(xiàn)通用的任務(wù),Anoop介紹說,有很多通用的任務(wù)需要在數(shù)據(jù)的日常處理中被完成,并且其使用頻率是很高的。一些如Hive、Pig和MapReduce等可用的語言可以協(xié)助你完成這些任務(wù),并使你的生活更加輕松。
有時候一個任務(wù)可以通過多種方式來實現(xiàn)。在這種情況下開發(fā)人員或者架構(gòu)師得做出正確的決定,從而實施最正確的方案。例如,Hive和Pig提供了數(shù)據(jù)流和查詢之間的一個抽象層,并且提供了它們編譯產(chǎn)生的MapReduc工作流。MapReduce的功能可以用于擴展查詢。Hive可以用HiveQL(像SQL一樣的說明性語言)來建立并且分析數(shù)據(jù)。并且,可以通過在Pig Latin中寫入操作來利用Pig語言。
在Hadoop組合大量數(shù)據(jù),一般情況下,為了得到最終的結(jié)果,數(shù)據(jù)需要加入多個數(shù)據(jù)集一起被處理和聯(lián)合。Hadoop中有很多方法可以加入多個數(shù)據(jù)集。MapReduce提供了Map端和Reduce端的數(shù)據(jù)連接。這些連接是非平凡的連接,并且可能會是非常昂貴的操作。Pig和Hive也具有同等的能力來申請連接到多個數(shù)據(jù)集。Pig提供了復制連接,合并連接和傾斜連接(skewed join),并且Hive提供了map端的連接和完整外部連接來分析數(shù)據(jù)。一個重要的事實是,通過使用各種工具,比如MapReduce、Pig和Hive等,數(shù)據(jù)可以基于它們的內(nèi)置功能和實際需求來使用它們。
如何在Hadoop分析大量數(shù)據(jù),Anoop指出,通常,在大數(shù)據(jù)/Hadoop的世界,一些問題可能并不復雜,并且解決方案也是直截了當?shù)?,但面臨的挑戰(zhàn)是數(shù)據(jù)量。在這種情況下需要不同的解決辦法來解決問題。一些分析任務(wù)是從日志文件中統(tǒng)計明確的ID的數(shù)目、在特定的日期范圍內(nèi)改造存儲的數(shù)據(jù)、以及網(wǎng)友排名等。所有這些任務(wù)都可以通過Hadoop中的多種工具和技術(shù)如MapReduce、Hive、Pig、Giraph和Mahout等來解決。這些工具在自定義例程的幫助下可以靈活地擴展它們的能力。
例如,圖和機器學習的問題可以通過使用一個Giraph框架被解決,而不是通過MapReduce任務(wù)解決,這樣可以避免寫復雜的算法。Giraph框架在解決圖和機器學習問題時比MapReduce任務(wù)更加有用,因為一些問題可能需要運用迭代的步驟來解決。
Hadoop世界中的調(diào)試,調(diào)試在任何一個開發(fā)過程中都永遠是個重要的過程。Hadoop環(huán)境中對于調(diào)試的需求和對Hadoop本身的需求一樣重要。有一種說法是格式錯誤和意外的輸入是很常見的,這將造成一切事務(wù)在一個較高的規(guī)模上中斷。這也是處理大規(guī)模非結(jié)構(gòu)化數(shù)據(jù)中的一個不幸的缺點。
雖然,單個任務(wù)被隔離并且給予了不同組的輸入,但當跟蹤各種事件時,它需要理解每個任務(wù)的狀態(tài)。這可以通過多種可用的工具和技術(shù)來支持調(diào)試Hadoop任務(wù)的過程,從而實現(xiàn)目標。例如,為了避免任何工作失敗,有一種方法可以跳過壞記錄,并且可以使用MapReduce中的計數(shù)器來跟蹤不良記錄等。
易于控制的Hadoop系統(tǒng),產(chǎn)品開發(fā)是一項重要的活動,系統(tǒng)維護也是同樣重要的,它有助于決定產(chǎn)品的未來。在Hadoop中,環(huán)境設(shè)置、維護和環(huán)境監(jiān)測、以及處理和調(diào)整MapReduce任務(wù)都非常需要從Hadoop系統(tǒng)中受益。為此Hadoop提供了很大的靈活性來控制整個系統(tǒng),Hadoop的可在三種不同的模式中進行配置:即獨立模式、偽分布式模式和完全分布式模式。
在Ganglia框架的幫助下,整個系統(tǒng)可以被監(jiān)測并且能對節(jié)點的健康狀態(tài)進行跟蹤。另外,參數(shù)配置功能提供了對MapReduce的任務(wù)控制。Hadoop系統(tǒng)有很好的靈活性可以輕松搞定整個系統(tǒng)的級別控制。
可擴展的持久性。有很多選擇可以處理海量的結(jié)構(gòu)化和非結(jié)構(gòu)化的數(shù)據(jù),但是儲存海量數(shù)據(jù)的可擴展性仍然是數(shù)據(jù)世界中的主要問題之一。Hadoop系統(tǒng)打算用Accumulo來緩解這個問題。Accumulo是被谷歌的BigTable的設(shè)計所啟發(fā)的,并且建立在Hadoop、Zookeeper 和Thrift的基礎(chǔ)之上,同時它給Hadoop提供可擴展的、分布式的、且基于單元持久性的數(shù)據(jù)備份。Acumulo帶來了一些BigTable設(shè)計之上的改進,以一種基于單元的訪問控制和服務(wù)器端的編程機制來幫助在數(shù)據(jù)管理過程中修改不同點的鍵/值對。
Hadoop中的數(shù)據(jù)讀取和寫入發(fā)生在HDFS上。HDFS即Hadoop的分布式文件系統(tǒng),并且是具有容錯性的分布式文件系統(tǒng)。它在對進行文件流讀取的大型文件進行了優(yōu)化,而且和I/O吞吐量相比,更傾向于低延遲。有很多可以高效的從HDFS中讀取和寫入文件的方法,比如說API文件系統(tǒng)、MapReduce以及高級串行化庫等。