HDFS/MapReduce及應用

weixin_34185364發表於2017-04-11

Hadoop家族

  1. HDFS
    海量分散式檔案系統
  2. Map-Reduce
    資料計算
  3. RPC
    序列化,動態代理與反射
  4. Hive
    用SQL的形式來運算元據
  5. HBase
    實時(KV)儲存
  6. Flume
    實時日誌收集系統
  7. zookeeper
  8. Mahout
    大資料的資料探勘,實現幾種常見的機器學習演算法,開發人員就能更快捷的使用。

Hadoop歷史

  1. 2003 Google發表有關MapReduce論文
  2. 2005 Nutch遷移到MapReduce實現
  3. 2006.1 Doug Cutting(Lucene創始人)加入Yahoo!
  4. 2006.2 Yahoo從Nutch中剝離出
    MapReduce並開始使用Hadoop
  5. 2007.1 Yahoo組建1000+節點的Hadoop叢集
  6. 2008.1 Hadoop成為Apache TLP
  7. 2008.4 Hadoop打破世界紀錄,成為最快排序
    1TB資料的系統

HDFS

一. 設計目標

  1. 硬體錯誤
    硬體錯誤是常態而不是異常。HDFS可能由成百上千的伺服器所構成,每個伺服器上儲存著檔案系統的部分資料。我們面對的現實是構成系統的元件數目是巨大的,而且任一元件都有可能失效,這意味著總是有一部分HDFS的元件是不工作的。因此錯誤檢測和快速、自動的恢復是HDFS最核心的架構目標。

  2. 流式資料訪問
    流式資料,特點就是,像流水一樣,不是一次過來而是一點一點“流”過來。而你處理流式資料也是一點一點處理。如果是全部收到資料以後再處理,那麼延遲會很大,而且在很多場合會消耗大量記憶體。

  3. 大規模資料集

  4. 簡單的一致性模型
    早期版本的HDFS不支援任何的檔案更新操作,一旦一個檔案建立、寫完資料、並關閉之後,這個檔案就再也不能被改變了。為什麼這麼設計?是為了與MapReduce完美配合,MapReduce的工作模式是接受一系列輸入檔案,經過map和reduce處理,直接產生一系列輸出檔案,而不是在原來的輸入檔案上做原位更新,因為直接輸出新檔案比原位更新一箇舊檔案高效的多

二. 系統結構


3027201-0d5cd042a32a020f.png

Namenode執行檔案系統的名字空間操作,比如開啟、關閉、重新命名檔案或目錄,它也負責確定資料塊到具體Datanode節點的對映。
Datanode負責處理檔案系統客戶端的讀寫請求,在Namenode的統一排程下進行資料塊的建立、刪除和複製。

三. 後設資料
後設資料一般有三種型別,都會被儲存在NameNode記憶體中

  1. 檔案和目錄自身的屬性資訊,例如檔名、目錄名、父目錄資訊、檔案大小、建立時間、修改時間等
  2. 檔案到檔案塊的對映,如:那個檔案由幾個檔案塊(Block)組成,副本個數
  3. 檔案塊的位置資訊,組成Block的檔案塊持久化在那幾個DataNode中

四. 後設資料檔案

  1. fsimage:後設資料映象檔案。
    fsimage是HDFS檔案系統存於硬碟中的後設資料檢查點,裡面記錄了自最後一次檢查點之前HDFS檔案系統中所有目錄和檔案的序列化資訊
  2. edits:日誌檔案。
    edits儲存了自最後一次檢查點之後所有針對HDFS檔案系統的操作,比如:增加檔案、重新命名檔案、刪除目錄等等
  3. fstime:儲存最近一次Checkpoint的時間。
  4. version:標誌性檔案,最後被建立,它的存在表明前三個檔案的建立成功。

在NameNode啟動時候,會先將fsimage中的檔案系統後設資料資訊載入到記憶體,然後根據eidts中的記錄將記憶體中的後設資料同步至最新狀態;所以,這兩個檔案一旦損壞或丟失,將導致整個HDFS檔案系統不可用。

五. Secondary NameNode

3027201-183c8c5e54b24424.png

解決的問題

  1. 只有在NameNode重啟時,edit logs才會合併到fsimage檔案中,從而得到一個檔案系統的最新快照。但是在叢集中NameNode是很少重啟的,這也意味著當NameNode執行了很長時間後,edit logs檔案會變得很大。
  2. NameNode的重啟會花費很長時間,因為有很多改動要合併到fsimage檔案上。
  3. NameNode單點,機器完全掛了,資料會丟失。
    為了避免edits日誌過大,SecondaryNameNode設定一個檢查點,會週期性的將fsimage和edits的合併,然後將最新的fsimage推送給NameNode,新的edit變更會寫到edit.new裡面,在進行後續切換。

六.讀資料過程

3027201-8288651add78a08a.png
3027201-044f625a430075f1.png

七.寫資料過程


3027201-dde9cd7751ad8cf8.png
3027201-b9a5c0bb3d2c4f8c.png
3027201-12f2bb8694eaf451.png

Map-Reduce

一. 介紹:

  1. MapReduce能做:
    日誌分析
    商業智慧分析
    客戶營銷
    大規模索引

  2. MapReduce不能:
    線上應用
    複雜依賴邏輯(迴圈、遞迴?)

二. 流程
舉個例子:
一個非常大的資料檔案,需要計算檔案中每個單詞出現頻率

3027201-9c006be11d2cecab.png
3027201-39a503de52539c8c.png
3027201-7f42e40f9e7a3999.png

應用

3027201-572bcfe970b9432f.png

相關文章