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

   

本文版權歸mephisto和博客園共有,歡迎轉載,但須保留此段聲明,並給出原文連接,謝謝合做。html

文章是哥(mephisto)寫的,SourceLinknode

閱讀目錄

本文版權歸mephisto和博客園共有,歡迎轉載,但須保留此段聲明,並給出原文連接,謝謝合做。算法

文章是哥(mephisto)寫的,SourceLink數據庫

 

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

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

Hadoop

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

      用戶能夠在不瞭解分佈式底層細節的狀況下,開發分佈式程序。充分利用集羣的威力進行高速運算和存儲。api

      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

相關文章
相關標籤/搜索