HDFS/MapReduce及應用
Hadoop家族
- HDFS
海量分散式檔案系統 - Map-Reduce
資料計算 - RPC
序列化,動態代理與反射 - Hive
用SQL的形式來運算元據 - HBase
實時(KV)儲存 - Flume
實時日誌收集系統 - zookeeper
- Mahout
大資料的資料探勘,實現幾種常見的機器學習演算法,開發人員就能更快捷的使用。
Hadoop歷史
- 2003 Google發表有關MapReduce論文
- 2005 Nutch遷移到MapReduce實現
- 2006.1 Doug Cutting(Lucene創始人)加入Yahoo!
- 2006.2 Yahoo從Nutch中剝離出
MapReduce並開始使用Hadoop - 2007.1 Yahoo組建1000+節點的Hadoop叢集
- 2008.1 Hadoop成為Apache TLP
- 2008.4 Hadoop打破世界紀錄,成為最快排序
1TB資料的系統
HDFS
一. 設計目標
硬體錯誤
硬體錯誤是常態而不是異常。HDFS可能由成百上千的伺服器所構成,每個伺服器上儲存著檔案系統的部分資料。我們面對的現實是構成系統的元件數目是巨大的,而且任一元件都有可能失效,這意味著總是有一部分HDFS的元件是不工作的。因此錯誤檢測和快速、自動的恢復是HDFS最核心的架構目標。流式資料訪問
流式資料,特點就是,像流水一樣,不是一次過來而是一點一點“流”過來。而你處理流式資料也是一點一點處理。如果是全部收到資料以後再處理,那麼延遲會很大,而且在很多場合會消耗大量記憶體。大規模資料集
簡單的一致性模型
早期版本的HDFS不支援任何的檔案更新操作,一旦一個檔案建立、寫完資料、並關閉之後,這個檔案就再也不能被改變了。為什麼這麼設計?是為了與MapReduce完美配合,MapReduce的工作模式是接受一系列輸入檔案,經過map和reduce處理,直接產生一系列輸出檔案,而不是在原來的輸入檔案上做原位更新,因為直接輸出新檔案比原位更新一箇舊檔案高效的多
二. 系統結構
Namenode執行檔案系統的名字空間操作,比如開啟、關閉、重新命名檔案或目錄,它也負責確定資料塊到具體Datanode節點的對映。
Datanode負責處理檔案系統客戶端的讀寫請求,在Namenode的統一排程下進行資料塊的建立、刪除和複製。
三. 後設資料
後設資料一般有三種型別,都會被儲存在NameNode記憶體中
- 檔案和目錄自身的屬性資訊,例如檔名、目錄名、父目錄資訊、檔案大小、建立時間、修改時間等
- 檔案到檔案塊的對映,如:那個檔案由幾個檔案塊(Block)組成,副本個數
- 檔案塊的位置資訊,組成Block的檔案塊持久化在那幾個DataNode中
四. 後設資料檔案
- fsimage:後設資料映象檔案。
fsimage是HDFS檔案系統存於硬碟中的後設資料檢查點,裡面記錄了自最後一次檢查點之前HDFS檔案系統中所有目錄和檔案的序列化資訊 - edits:日誌檔案。
edits儲存了自最後一次檢查點之後所有針對HDFS檔案系統的操作,比如:增加檔案、重新命名檔案、刪除目錄等等 - fstime:儲存最近一次Checkpoint的時間。
- version:標誌性檔案,最後被建立,它的存在表明前三個檔案的建立成功。
在NameNode啟動時候,會先將fsimage中的檔案系統後設資料資訊載入到記憶體,然後根據eidts中的記錄將記憶體中的後設資料同步至最新狀態;所以,這兩個檔案一旦損壞或丟失,將導致整個HDFS檔案系統不可用。
五. Secondary NameNode
解決的問題
- 只有在NameNode重啟時,edit logs才會合併到fsimage檔案中,從而得到一個檔案系統的最新快照。但是在叢集中NameNode是很少重啟的,這也意味著當NameNode執行了很長時間後,edit logs檔案會變得很大。
- NameNode的重啟會花費很長時間,因為有很多改動要合併到fsimage檔案上。
- NameNode單點,機器完全掛了,資料會丟失。
為了避免edits日誌過大,SecondaryNameNode設定一個檢查點,會週期性的將fsimage和edits的合併,然後將最新的fsimage推送給NameNode,新的edit變更會寫到edit.new裡面,在進行後續切換。
六.讀資料過程
七.寫資料過程
Map-Reduce
一. 介紹:
MapReduce能做:
日誌分析
商業智慧分析
客戶營銷
大規模索引
…MapReduce不能:
線上應用
複雜依賴邏輯(迴圈、遞迴?)
二. 流程
舉個例子:
一個非常大的資料檔案,需要計算檔案中每個單詞出現頻率
應用
相關文章
- Alluxio+HDFS+MapReduce整合及測試UX
- MapReduce應用案例--簡單排序排序
- HDFS應用場景、原理、基本架構及使用方法概述架構
- MapReduce應用案例--單表關聯
- HDFS+MapReduce+Hive+HBase十分鐘快速入門Hive
- MapReduce如何作為Yarn應用程式執行?Yarn
- HDFS架構及原理架構
- MapReduce應用案例--簡單的資料去重
- MapReduce原理及簡單實現
- MapReduce入門及核心流程案例
- Router-Based HDFS Federation 在滴滴大資料的應用大資料
- Hadoop學習之YARN及MapReduceHadoopYarn
- 雞蛋挺住體;及MapReduce矩陣分析矩陣
- HDFS 命令:用於管理HDFS的Hadoop Shell命令大全Hadoop
- 小白學習大資料測試之hadoop hdfs和MapReduce小實戰大資料Hadoop
- React元件及應用React元件
- zookeeper原理及應用
- EJB 部署及應用
- LNMP部署及應用LNMP
- Android應用及應用管理簡介Android
- 初識MapReduce的應用場景(附JAVA和Python程式碼)JavaPython
- HDFS原始碼解析:教你用HDFS客戶端寫資料原始碼客戶端
- 反射機制及應用反射
- 系統安全及應用
- xgboost原理及應用
- [轉]SSH原理及應用
- 華為防火牆及應用防火牆
- Sqlite 介紹及應用SQLite
- 閉包的原理及應用
- Android Protobuf應用及原理Android
- Redux 原始碼剖析及應用Redux原始碼
- 單調棧理解及應用
- Catalan數計算及應用
- Hadoop之MapReduce2基礎梳理及案例Hadoop
- 【轉】設定Qt應用程式圖示及應用程式名QT
- HDFS系列之DataNode磁碟管理解析及實踐!
- Elasticsearch在Hdfs上build的實現及優化ElasticsearchUI優化
- Lucene介紹及簡單應用