Hadoop生态系统详解
4.1 Hadoop生態(tài)系統(tǒng)
狹義的Hadoop VS 廣義的Hadoop
- 廣義的Hadoop:指的是Hadoop生態(tài)系統(tǒng),Hadoop生態(tài)系統(tǒng)是一個很龐大的概念,hadoop是其中最重要最基礎(chǔ)的一個部分,生態(tài)系統(tǒng)中每一子系統(tǒng)只解決某一個特定的問題域(甚至可能更窄),不搞統(tǒng)一型的全能系統(tǒng),而是小而精的多個小系統(tǒng);
Hive:數(shù)據(jù)倉庫
R:數(shù)據(jù)分析
Mahout:機器學(xué)習(xí)庫
pig:腳本語言,跟Hive類似
Oozie:工作流引擎,管理作業(yè)執(zhí)行順序
Zookeeper:用戶無感知,主節(jié)點掛掉選擇從節(jié)點作為主的
Flume:日志收集框架
Sqoop:數(shù)據(jù)交換框架,例如:關(guān)系型數(shù)據(jù)庫與HDFS之間的數(shù)據(jù)交換
Hbase : 海量數(shù)據(jù)中的查詢,相當(dāng)于分布式文件系統(tǒng)中的數(shù)據(jù)庫
Spark: 分布式的計算框架基于內(nèi)存
- spark core
- spark sql
- spark streaming 準(zhǔn)實時 不算是一個標(biāo)準(zhǔn)的流式計算
- spark ML spark MLlib
Kafka: 消息隊列
Storm: 分布式的流式計算框架 python操作storm
Flink: 分布式的流式計算框架
Hadoop生態(tài)系統(tǒng)的特點
-
開源、社區(qū)活躍
-
囊括了大數(shù)據(jù)處理的方方面面
-
成熟的生態(tài)圈
4.2HDFS 讀寫流程& 高可用
-
HDFS讀寫流程
-
客戶端向NameNode發(fā)出寫文件請求。
-
檢查是否已存在文件、檢查權(quán)限。若通過檢查,直接先將操作寫入EditLog,并返回輸出流對象。
(注:WAL,write ahead log,先寫Log,再寫內(nèi)存,因為EditLog記錄的是最新的HDFS客戶端執(zhí)行所有的寫操作。如果后續(xù)真實寫操作失敗了,由于在真實寫操作之前,操作就被寫入EditLog中了,故EditLog中仍會有記錄,我們不用擔(dān)心后續(xù)client讀不到相應(yīng)的數(shù)據(jù)塊,因為在第5步中DataNode收到塊后會有一返回確認(rèn)信息,若沒寫成功,發(fā)送端沒收到確認(rèn)信息,會一直重試,直到成功) -
client端按128MB的塊切分文件。
-
client將NameNode返回的分配的可寫的DataNode列表和Data數(shù)據(jù)一同發(fā)送給最近的第一個DataNode節(jié)點,此后client端和NameNode分配的多個DataNode構(gòu)成pipeline管道,client端向輸出流對象中寫數(shù)據(jù)。client每向第一個DataNode寫入一個packet,這個packet便會直接在pipeline里傳給第二個、第三個…DataNode。
(注:并不是寫好一個塊或一整個文件后才向后分發(fā)) -
每個DataNode寫完一個塊后,會返回確認(rèn)信息。
(注:并不是每寫完一個packet后就返回確認(rèn)信息,個人覺得因為packet中的每個chunk都攜帶校驗信息,沒必要每寫一個就匯報一下,這樣效率太慢。正確的做法是寫完一個block塊后,對校驗信息進行匯總分析,就能得出是否有塊寫錯的情況發(fā)生) -
寫完數(shù)據(jù),關(guān)閉輸輸出流。
-
發(fā)送完成信號給NameNode。
(注:發(fā)送完成信號的時機取決于集群是強一致性還是最終一致性,強一致性則需要所有DataNode寫完后才向NameNode匯報。最終一致性則其中任意一個DataNode寫完后就能單獨向NameNode匯報,HDFS一般情況下都是強調(diào)強一致性)
-
-
HDFS如何實現(xiàn)高可用(HA)
- 數(shù)據(jù)存儲故障容錯
- 磁盤介質(zhì)在存儲過程中受環(huán)境或者老化影響,數(shù)據(jù)可能錯亂
- 對于存儲在 DataNode 上的數(shù)據(jù)塊,計算并存儲校驗和(CheckSum)
- 讀取數(shù)據(jù)的時候, 重新計算讀取出來的數(shù)據(jù)校驗和, 校驗不正確拋出異常, 從其它DataNode上讀取備份數(shù)據(jù)
- 磁盤故障容錯
- DataNode 監(jiān)測到本機的某塊磁盤損壞
- 將該塊磁盤上存儲的所有 BlockID 報告給 NameNode
- NameNode 檢查這些數(shù)據(jù)塊在哪些DataNode上有備份,
- 通知相應(yīng)DataNode, 將數(shù)據(jù)復(fù)制到其他服務(wù)器上
- DataNode故障容錯
- 通過心跳和NameNode保持通訊
- 超時未發(fā)送心跳, NameNode會認(rèn)為這個DataNode已經(jīng)宕機
- NameNode查找這個DataNode上有哪些數(shù)據(jù)塊, 以及這些數(shù)據(jù)在其它DataNode服務(wù)器上的存儲情況
- 從其它DataNode服務(wù)器上復(fù)制數(shù)據(jù)
- NameNode故障容錯
- 主從熱備 secondary namenode
- zookeeper配合 master節(jié)點選舉
- 數(shù)據(jù)存儲故障容錯
dary namenode
- zookeeper配合 master節(jié)點選舉
總結(jié)
以上是生活随笔為你收集整理的Hadoop生态系统详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一道OJ题目:浮点数排序
- 下一篇: Docker Swarm集群仓库和可视化