Hadoop的產生背景
- hadoop的背景
- 資料處理步驟:
通過運用Python網頁爬蟲或者Hadoop的Flume框架實時收集資料>資料儲存>運用Hadoop、Hive、Spark查詢關鍵字進行資料統計>統計之後的資料由HDFS匯入到MySQL中進行儲存>運用SpringMVC建立與MySQL聯絡,對資料進行Web前端展示(主要是HighChart軟體)。 - 對於儲存:Google採用多臺機器,使用分散式的概念去儲存
對於計算:用多臺機器去處理
MapReduce核心思想:將資料分開處理,結果合在一起儲存(”分而治之”思想)。MapReduce分為Map和Reduce,每個Map處理的資料是獨立的,Reduce就是合(結果合在一起儲存) - 關於儲存:HDFS誕生>分散式檔案系統
資料儲存在HDFS上,然後MapReduce進行處理HDFS上的資料。
分散式儲存:分散式資料庫:HBase(google稱其為:BigTable、GFS)。 - 分散式儲存系統起源於谷歌的三篇論文(谷歌的三駕馬車:MapReduce、BigTable、GFS)
後來逐漸演變為現在的Hadoop生態系統的主要框架:
GFS ->HDFS
MapReduce->MapReduce
BigTable->HBase - Hadoop的四大核心模組
Hadoop common:支援其他模組的工具類,為Hadoop模組提供基礎設施
Hadoop HDFS:分散式檔案系統,提供儲存
Hadoop YARN:任務排程和叢集資源管理
Hadoop MapReduce:分散式離線計算框架
Hadoop之父Doug Cutting,Lucene、Nutch 、Hadoop等專案的發起人。
- 資料處理步驟:
- Hadoop的特性
可靠、可擴充套件、分散式計算框架
- 儲存的可靠性:
如果儲存資料的機器損壞了。HDFS提供了一個策略,給資料提供一個副本數(預設3個),這是 犧牲了硬碟作為代價,但是划算的。
HDFS儲存形式:以塊儲存,塊損壞了,同樣提供了一個策略,對於每個儲存檔案產生一個校驗碼,之後定期對它產生一個校驗碼,進行匹配,如果不匹配,說明塊已經損壞 - 計算的可靠性:
- 可擴充套件性:可以新增任意多臺機器,增加配置
- 儲存的可靠性:
Hadoop的架構分析
HDFS的架構分析
1)設計理念:一次寫入,多次讀取
2)分散式應用都有主從的架構:
主節點:NameNode
從節點:datanode
3)HDFS儲存的是檔案,檔案的屬性有哪些
名稱
位置
副本數
擁有者、許可權
儲存的塊
各個塊具體儲存在那個datanode上
。。。。
以上資訊稱之為:元資料(名稱空間)
元資料(名稱空間)儲存在namenode上
檔案具體內容儲存在datanode上
4)HDFS以塊的形式儲存(預設是128M),塊block,1系列中塊的預設大小為64MB,2系列中塊的預設大小為128MB
500M檔案,塊的大小是256M,第一個塊的大小是256M,另一個是244M
5)對於HDFS檔案系統來說
read讀
write寫
讀取流程:/user/beifeng/mapreduce/input/wc.input
首先知道這個檔案的位置,需要先去找namenode
“就近原則”
客戶端>namenode
客戶端>datanode
寫入的過程:/user/beifeng/mapreduce/output/part-00000
客戶端>namenode
客戶端>datanode
資料流沒有經過namenode,是客戶端直接和DataNode進行資料互動。YARN的架構分析
是分散式框架,也是主從結構
主節點:ResourceManager管理整個叢集資源
從節點:NodeManger
客戶端提交應用到ResourceManager上,來申請所需要的資源,分配到各個NodeManger節點上。
YARN的排程過程:
客戶端提交MapReduce任務(包括很多job)到ResourceManager節點上,申請分配資源,具體執行在NodeManager上。每個job都有一個ApplicationMaster應用管理者,對任務進行管理、監控和排程。
一個Map是在單獨的資源裡面執行的,不會被其他的任務搶走資源。
為了實現這樣的目的,提出了一個概念:將任務放在某一個空間中,這個空間就屬於某個任務,這個概念叫做:Container(容器)。
Map和Reduce所需資源都會放在一個容器中,任務在容器中執行。
小結YARN:通過每個應用的應用管理者去申請資源,然後封裝在容器中,告訴資源管理者,在容器中啟動任務。- MapReduce計算框架
將計算過程分為兩個階段,Map和Reduce,Map可以理解為一個對映。
Map階段並行處理輸入資料到Reduce彙總階段中間有一個過程,叫shuffle(有順序有規則的打亂)
簡單理解:map輸出到reduce輸入的階段就是shuffle。
- Hadoop 2.x產生
- Hadoop1.x出現的問題:
HDFS存在的問題:
Namenode單點故障,難以應用於線上場景。
Namenode壓力過大,且記憶體受限,影響系統擴充套件性。
Mapreduce存在問題:
Jobtracker單點故障
Jobtracker壓力過大,影響拓展性,難以支援Mapreduce之外的計算框架,如果storm,spark,Tez等。
Hadoop2由Mapreduce,HDFS和yarn三分部構成
HDFS:NN Federation HA
Mapreduce:在yarn上執行的MR
Yarn:資源管理系統 - 解決HDFS1的單點故障和記憶體受限問題:
a:解決單點故障
HDFS HA:通過主備Namenode切換來解決,如果主Namenode發生故障,則就切換到備Namenode上。(有了這樣的優點以後,系統升級也變得更加方便)。
詳細過程:主Namenode對外提供服務,被Namenode同步Namenode元資料,以待切換。所有datanode塊同時向兩個Namenode彙報資料塊資訊。
切換Namenode有兩種選擇,一種是手動切換,一種是自動切換。手動切換:主要使用命令來實現切換,主要適用於系統升級的場合。自動切換:是基於zookeeper實現的,zookeeper failover controller監控Namenode健康狀態,並向zookeeper註冊Namenode,Namenode掛掉後,ZKFC為Namenode競爭鎖,獲得ZKFC的Namenode成為active namenode。
b:解決記憶體受限問題
HDFS Federation(聯邦),水平拓展,支援多個Namenode,每個Namenode分管一部分目錄。所有Namenode共享所有Datanode儲存資料。
注意:僅僅是架構上面發生了變換,其他使用方式不變,Mapreduce的改變就是YARN的改變。