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





















