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處理,直接產生一系列輸出檔案,而不是在原來的輸入檔案上做原位更新,因為直接輸出新檔案比原位更新一箇舊檔案高效的多
二. 系統結構
![3027201-0d5cd042a32a020f.png](https://i.iter01.com/images/9e371f98fdf49735cff98e32706937d21e945c08381fad9eb4b26233f67841e8.png)
Namenode執行檔案系統的名字空間操作,比如開啟、關閉、重新命名檔案或目錄,它也負責確定資料塊到具體Datanode節點的對映。
Datanode負責處理檔案系統客戶端的讀寫請求,在Namenode的統一排程下進行資料塊的建立、刪除和複製。
三. 後設資料
後設資料一般有三種型別,都會被儲存在NameNode記憶體中
- 檔案和目錄自身的屬性資訊,例如檔名、目錄名、父目錄資訊、檔案大小、建立時間、修改時間等
- 檔案到檔案塊的對映,如:那個檔案由幾個檔案塊(Block)組成,副本個數
- 檔案塊的位置資訊,組成Block的檔案塊持久化在那幾個DataNode中
四. 後設資料檔案
- fsimage:後設資料映象檔案。
fsimage是HDFS檔案系統存於硬碟中的後設資料檢查點,裡面記錄了自最後一次檢查點之前HDFS檔案系統中所有目錄和檔案的序列化資訊 - edits:日誌檔案。
edits儲存了自最後一次檢查點之後所有針對HDFS檔案系統的操作,比如:增加檔案、重新命名檔案、刪除目錄等等 - fstime:儲存最近一次Checkpoint的時間。
- version:標誌性檔案,最後被建立,它的存在表明前三個檔案的建立成功。
在NameNode啟動時候,會先將fsimage中的檔案系統後設資料資訊載入到記憶體,然後根據eidts中的記錄將記憶體中的後設資料同步至最新狀態;所以,這兩個檔案一旦損壞或丟失,將導致整個HDFS檔案系統不可用。
五. Secondary NameNode
![3027201-183c8c5e54b24424.png](https://i.iter01.com/images/4b3b0b6391131ec7226da81f24c445e00479bebe51faa42f809b6c0d846cdebd.png)
解決的問題
- 只有在NameNode重啟時,edit logs才會合併到fsimage檔案中,從而得到一個檔案系統的最新快照。但是在叢集中NameNode是很少重啟的,這也意味著當NameNode執行了很長時間後,edit logs檔案會變得很大。
- NameNode的重啟會花費很長時間,因為有很多改動要合併到fsimage檔案上。
- NameNode單點,機器完全掛了,資料會丟失。
為了避免edits日誌過大,SecondaryNameNode設定一個檢查點,會週期性的將fsimage和edits的合併,然後將最新的fsimage推送給NameNode,新的edit變更會寫到edit.new裡面,在進行後續切換。
六.讀資料過程
![3027201-8288651add78a08a.png](https://i.iter01.com/images/c38140b7960f50cc3b430bc6e5f501bddbea11162ba25c25f8ee7bef29b42ba2.png)
![3027201-044f625a430075f1.png](https://i.iter01.com/images/47a88604e8514765a3405e64692810a7acd732052bd2b99feb5ed01d14d01069.png)
七.寫資料過程
![3027201-dde9cd7751ad8cf8.png](https://i.iter01.com/images/917f327deb012d66894a0749074f77b8efa00bdfd45151298045f4cb154b805a.png)
![3027201-b9a5c0bb3d2c4f8c.png](https://i.iter01.com/images/ff6e696213a742906a4140c91165e34b85b1e6b8be073daa5b882f1eb3c88e7b.png)
![3027201-12f2bb8694eaf451.png](https://i.iter01.com/images/7ad76180d90348267c379dda957163343a34454be9887f8262803e4893262f9e.png)
Map-Reduce
一. 介紹:
MapReduce能做:
日誌分析
商業智慧分析
客戶營銷
大規模索引
…MapReduce不能:
線上應用
複雜依賴邏輯(迴圈、遞迴?)
二. 流程
舉個例子:
一個非常大的資料檔案,需要計算檔案中每個單詞出現頻率
![3027201-9c006be11d2cecab.png](https://i.iter01.com/images/e8bbdec303fa9b7665dd430c5062cf324931758753daedd77ba89853df4aed6b.png)
![3027201-39a503de52539c8c.png](https://i.iter01.com/images/8e22873b28c821c43150957da299fa9de7be35525c832f6a8f812e17557b1ef8.png)
![3027201-7f42e40f9e7a3999.png](https://i.iter01.com/images/6fb3652c245f52877eafe0e158a3d1a0c6af206512363a8aeb5ef5611e5542a1.png)
應用
![3027201-572bcfe970b9432f.png](https://i.iter01.com/images/3d172d2fa83cb4b3be2f6ac7ce5f7e4e0cf79a8e31b24c7b07d021c4165512d0.png)
相關文章
- Alluxio+HDFS+MapReduce整合及測試UX
- HDFS應用場景、原理、基本架構及使用方法概述架構
- MapReduce如何作為Yarn應用程式執行?Yarn
- HDFS架構及原理架構
- MapReduce入門及核心流程案例
- MapReduce原理及簡單實現
- 小白學習大資料測試之hadoop hdfs和MapReduce小實戰大資料Hadoop
- 初識MapReduce的應用場景(附JAVA和Python程式碼)JavaPython
- HDFS 命令:用於管理HDFS的Hadoop Shell命令大全Hadoop
- Router-Based HDFS Federation 在滴滴大資料的應用大資料
- React元件及應用React元件
- LNMP部署及應用LNMP
- HDFS之垃圾回收箱配置及使用
- Hadoop之MapReduce2基礎梳理及案例Hadoop
- Sqlite 介紹及應用SQLite
- Android Protobuf應用及原理Android
- 系統安全及應用
- 反射機制及應用反射
- HDFS原始碼解析:教你用HDFS客戶端寫資料原始碼客戶端
- 通過MapReduce降低服務響應時間
- Redux 原始碼剖析及應用Redux原始碼
- 華為防火牆及應用防火牆
- ThreadLocal應用及原始碼分析thread原始碼
- Redis HyperLogLog介紹及應用Redis
- 閉包的原理及應用
- zigzag走線原理及應用
- Logistic 迴歸-原理及應用
- MapReduce理解
- Elasticsearch在Hdfs上build的實現及優化ElasticsearchUI優化
- HDFS系列之DataNode磁碟管理解析及實踐!
- 【轉】Docker部署Tomcat及Web應用DockerTomcatWeb
- PIG安裝配置及案例應用
- WebSocket 簡介及應用例項Web
- 2、安裝及管理應用程式
- mongodb分片(sharding)搭建、應用及管理MongoDB
- ZooKeeper核心原理及應用場景
- Go語言反射(reflect)及應用Go反射
- NeurophStudio安裝及基礎應用
- JWT實現過程及應用JWT