hadoop解決什麼問題
1.海量數據如何存儲(hdfs)
2.海量數據如何計算(mapreduce)node
兩個核心 namenode與datanode
namenode:安全
1.管理各個datanode 2.管理文件信息,文件名、文件多大、文件被切塊、存貯位置信息,即管理元數據信息。 3.基於RPC心跳機制控制集羣中各個節點(datanode)的狀態。 4.namenode存在單點故障問題,能夠啓用一個備用namenode用來保證元數據信息安全。 5.datanode掛掉後,數據丟失,所以須要控制datanode 的備份,默認3份,本機一份。
datanode:存儲數據的節點,數據存放具備備份。網絡
1.保存具體的block數據 2.負責數據的讀寫操做和複製操做 3.DataNode啓動會想NameNode報告當前存儲的block信息, 4.DataNode之間會進行通訊(RPC),保證數據的冗餘性
SecondaryNameNode不是熱備,它的職責是合併NameNode 的edit log,到 fsimage這個文件中。
tip:hdfs不適合存儲海量小文件 app
緣由:20k放在128M的block裏,他只佔用了20K,可是須要一個裝128M的袋子裝,這個袋子不能再裝其餘東西了。假設我有1000w * 1Kb,則namenode須要這麼多元數據信息,致使NameNode 癱瘓。
hdfs是磁盤,也就是涉及兩個問題:寫與讀。
讀流程:
寫流程:
框架
解決海量數據的計算問題,多機器協做計算。
簡單的wordcount怎麼作?
函數
map階段:數據處理,輸出<key,value>,發到對應的reduce裏,每一個block能夠起一個map進程
oop
reduce階段:不一樣map按照某種規則(哈希)發到這個reduce去處理
map輸出的同一個key必定在一個reduce裏,不一樣key可能在同一個reduce,也可能不一樣reduce,跟你reduce數量有關。
spa
map到reduce的過程成爲shuffle過程,舉個數錢的例子 mapper將相同的key發到指定的reduce中。
combiner3d
Combiner在map階段進行一次reduce,減小reduce端的壓力
Mapreduce中的Combiner就是爲了不map任務和reduce任務之間的數據傳輸而設置的,Hadoop容許用戶針對map task的輸出指定一個合併函數。即爲了減小傳輸到Reduce中的數據量。它主要是爲了削減Mapper的輸出從而減小網絡帶寬和Reducer之上的負載。特別值得注意的一點,一個combiner只是處理一個結點中的的輸出,而不能享受像reduce同樣的輸入(通過了shuffle階段的數據),這點很是關鍵。code
hadoop的核心是mapreduce框架,shuffle又是mapreduce的核心!!!