從零自學Hadoop(01):認識Hadoop

sinodzh發表於2015-09-24

   

本文版權歸mephisto和部落格園共有,歡迎轉載,但須保留此段宣告,並給出原文連結,謝謝合作。

文章是哥(mephisto)寫的,SourceLink

閱讀目錄

本文版權歸mephisto和部落格園共有,歡迎轉載,但須保留此段宣告,並給出原文連結,謝謝合作。

文章是哥(mephisto)寫的,SourceLink

 

  我是一個工作比較多年數的.net程式猿,最開始做過ERP,這幾年一直做監控、應急行業。從產品的體系架構到程式碼編寫,通通參與。認識到作為一個完整的監控生態環境,對採集的資料的處理也很重要。採集的資料只有挖掘了才可能提供有價值的建議或利益輸出。認識到單獨的windows平臺的不足,也想推廣多平臺的混搭,但由於沒玩過Linux,還是有點前怕狼後怕虎的,怕力不從心。一個搞技術的怕一個事物的時候,他可能就沒法在這個事物上進步了,為了豐富自己的技術路線,決定從零自學Hadoop。確實難度比較大,但有了目標,一步步執行起來就是了。而且,不管結果怎麼樣,還是可以從中學習到很多優秀平臺的技術知識。能學到東西,我已經很滿足了。

  下面的介紹,只是個搬運工,但也得給這個系列起個頭,大家勉強將就的看下吧。

Hadoop

    Hadoop是一個由Apache基金會所開發的分散式系統基礎架構。

      使用者可以在不瞭解分散式底層細節的情況下,開發分散式程式。充分利用叢集的威力進行高速運算和儲存。

      Hadoop實現了一個分散式檔案系統(Hadoop Distributed File System),簡稱HDFS。HDFS有高容錯性的特點,並且設計用來部署在低廉的(low-cost)硬體上;而且它提供高吞吐量(high throughput)來訪問應用程式的資料,適合那些有著超大資料集(large data set)的應用程式。HDFS放寬了(relax)POSIX的要求,可以以流的形式訪問(streaming access)檔案系統中的資料。

      Hadoop的框架最核心的設計就是:HDFS和MapReduce。HDFS為海量的資料提供了儲存,則MapReduce為海量的資料提供了計算。

專案起源

  Hadoop由 Apache Software Foundation 公司於 2005 年秋天作為Lucene的子專案Nutch的一部分正式引入。它受到最先由 Google Lab 開發的 Map/Reduce 和 Google File System(GFS) 的啟發。

  2006 年 3 月份,Map/Reduce 和 Nutch Distributed File System (NDFS) 分別被納入稱為 Hadoop 的專案中。

  Hadoop原本來自於谷歌一款名為MapReduce的程式設計模型包。谷歌的MapReduce框架可以把一個應用程式分解為許多平行計算指令,跨大量的計算節點執行非常巨大的資料集。使用該框架的一個典型例子就是在網路資料上執行的搜尋演算法。Hadoop最初只與網頁索引有關,迅速發展成為分析大資料的領先平臺。

 

優點

  Hadoop是一個能夠對大量資料進行分散式處理軟體框架。 Hadoop 以一種可靠、高效、可伸縮的方式進行資料處理。

  Hadoop 是可靠的,因為它假設計算元素和儲存會失敗,因此它維護多個工作資料副本,確保能夠針對失敗的節點重新分佈處理

  Hadoop 是高效的,因為它以並行的方式工作,通過並行處理加快處理速度。

  Hadoop 還是可伸縮的,能夠處理 PB 級資料。

  此外,Hadoop 依賴於社群服務,因此它的成本比較低,任何人都可以使用。

  Hadoop是一個能夠讓使用者輕鬆架構和使用的分散式計算平臺。使用者可以輕鬆地在Hadoop上開發和執行處理海量資料的應用程式。它主要有以下幾個優點:

    1. 高可靠性。Hadoop按位儲存和處理資料的能力值得人們信賴。

    2. 高擴充套件性。Hadoop是在可用的計算機集簇間分配資料並完成計算任務的,這些集簇可以方便地擴充套件到數以千計的節點中。

    3. 高效性。Hadoop能夠在節點之間動態地移動資料,並保證各個節點的動態平衡,因此處理速度非常快。

    4. 高容錯性。Hadoop能夠自動儲存資料的多個副本,並且能夠自動將失敗的任務重新分配。

    5. 低成本。與一體機、商用資料倉儲以及QlikView、Yonghong Z-Suite等資料集市相比,hadoop是開源的,專案的軟體成本因此會大大降低。

  Hadoop帶有用Java語言編寫的框架,因此執行在 Linux 生產平臺上是非常理想的。Hadoop 上的應用程式也可以使用其他語言編寫,比如 C++

  hadoop大資料處理的意義

  Hadoop得以在大資料處理應用中廣泛應用得益於其自身在資料提取、變形和載入(ETL)方面上的天然優勢。Hadoop的分散式架構,將大資料處理引擎儘可能的靠近儲存,對例如像ETL這樣的批處理操作相對合適,因為類似這樣操作的批處理結果可以直接走向儲存。Hadoop的MapReduce功能實現了將單個任務打碎,並將碎片任務(Map)傳送到多個節點上,之後再以單個資料集的形式載入(Reduce)到資料倉儲裡。

 

核心架構

  Hadoop 由許多元素構成。其最底部是 Hadoop Distributed File System(HDFS),它儲存 Hadoop 叢集中所有儲存節點上的檔案。HDFS(對於本文)的上一層是MapReduce 引擎,該引擎由 JobTrackers 和 TaskTrackers 組成。通過對Hadoop分散式計算平臺最核心的分散式檔案系統HDFS、MapReduce處理過程,以及資料倉儲工具Hive和分散式資料庫Hbase的介紹,基本涵蓋了Hadoop分散式平臺的所有技術核心。

HDFS

  對外部客戶機而言,HDFS就像一個傳統的分級檔案系統。可以建立、刪除、移動或重新命名檔案,等等。但是 HDFS 的架構是基於一組特定的節點構建的(參見圖 1),這是由它自身的特點決定的。這些節點包括 NameNode(僅一個),它在 HDFS 內部提供後設資料服務;DataNode,它為 HDFS 提供儲存塊。由於僅存在一個 NameNode,因此這是 HDFS 的一個缺點(單點失敗)。

  儲存在 HDFS 中的檔案被分成塊,然後將這些塊複製到多個計算機中(DataNode)。這與傳統的 RAID 架構大不相同。塊的大小(通常為 64MB)和複製的塊數量在建立檔案時由客戶機決定。NameNode 可以控制所有檔案操作。HDFS 內部的所有通訊都基於標準的 TCP/IP 協議。

NameNode

  NameNode 是一個通常在 HDFS 例項中的單獨機器上執行的軟體。它負責管理檔案系統名稱空間和控制外部客戶機的訪問。NameNode 決定是否將檔案對映到 DataNode 上的複製塊上。對於最常見的 3 個複製塊,第一個複製塊儲存在同一機架的不同節點上,最後一個複製塊儲存在不同機架的某個節點上。注意,這裡需要您瞭解叢集架構。

  實際的 I/O事務並沒有經過 NameNode,只有表示 DataNode 和塊的檔案對映的後設資料經過 NameNode。當外部客戶機傳送請求要求建立檔案時,NameNode 會以塊標識和該塊的第一個副本的 DataNode IP 地址作為響應。這個 NameNode 還會通知其他將要接收該塊的副本的 DataNode。

  NameNode 在一個稱為 FsImage 的檔案中儲存所有關於檔案系統名稱空間的資訊。這個檔案和一個包含所有事務的記錄檔案(這裡是 EditLog)將儲存在 NameNode 的本地檔案系統上。FsImage 和 EditLog 檔案也需要複製副本,以防檔案損壞或 NameNode 系統丟失。

  NameNode本身不可避免地具有SPOF(Single Point Of Failure)單點失效的風險,主備模式並不能解決這個問題,通過Hadoop Non-stop namenode才能實現100% uptime可用時間。

DataNode

  DataNode 也是一個通常在 HDFS例項中的單獨機器上執行的軟體。Hadoop 叢集包含一個 NameNode 和大量 DataNode。DataNode 通常以機架的形式組織,機架通過一個交換機將所有系統連線起來。Hadoop 的一個假設是:機架內部節點之間的傳輸速度快於機架間節點的傳輸速度。

  DataNode 響應來自 HDFS 客戶機的讀寫請求。它們還響應來自 NameNode 的建立、刪除和複製塊的命令。NameNode 依賴來自每個 DataNode 的定期心跳(heartbeat)訊息。每條訊息都包含一個塊報告,NameNode 可以根據這個報告驗證塊對映和其他檔案系統後設資料。如果 DataNode 不能傳送心跳訊息,NameNode 將採取修復措施,重新複製在該節點上丟失的塊。

 

開源實現

  Hadoop是專案的總稱。主要是由HDFS和MapReduce組成。

  HDFS是Google File System(GFS)的開源實現。

  MapReduce是Google MapReduce的開源實現。

  這個分散式框架很有創造性,而且有極大的擴充套件性,使得Google在系統吞吐量上有很大的競爭力。因此Apache基金會用Java實現了一個開源版本,支援Fedora、Ubuntu等Linux平臺。雅虎和矽谷風險投資公司Benchmark Capital 聯合成立一家名為Hortonworks的新公司,接管被廣泛應用的資料分析軟體Hadoop的開發工作。

  Hadoop實現了HDFS檔案系統和MapRecue。使用者只要繼承MapReduceBase,提供分別實現Map和Reduce的兩個類,並註冊Job即可自動分散式執行。

 

子專案

  Hadoop Common: 在0.20及以前的版本中,包含HDFS、MapReduce和其他專案公共內容,從0.21開始HDFS和MapReduce被分離為獨立的子專案,其餘內容為Hadoop Common

  HDFS: Hadoop分散式檔案系統(Distributed File System) - HDFS (Hadoop Distributed File System)

  MapReduce平行計算框架,0.20前使用 org.apache.hadoop.mapred 舊介面,0.20版本開始引入org.apache.hadoop.mapreduce的新API

  HBase: 類似Google BigTable的分散式NoSQL列資料庫。(HBaseAvro已經於2010年5月成為頂級 Apache 專案)

  Hive:資料倉儲工具,由Facebook貢獻。

  Zookeeper:分散式鎖設施,提供類似Google Chubby的功能,由Facebook貢獻。

  Avro:新的資料序列化格式與傳輸工具,將逐步取代Hadoop原有的IPC機制。

  Pig: 大資料分析平臺,為使用者提供多種介面。

  Ambari:Hadoop管理工具,可以快捷的監控、部署、管理叢集。

  Sqoop:於在HADOOP與傳統的資料庫間進行資料的傳遞。

 

HDFS流程圖

  

---------------------------------------------------------------------------------------

系列索引

  【源】從零自學Hadoop系列索引

 

 

 

 

本文版權歸mephisto和部落格園共有,歡迎轉載,但須保留此段宣告,並給出原文連結,謝謝合作。

文章是哥(mephisto)寫的,SourceLink

 

相關文章