1.Hadoop組成
Hadoop主要由三大模塊組成:
1.1 HDFS
存儲(chǔ)模塊
* 分布式文件存儲(chǔ)系統(tǒng)
* 提供了高可靠性省店、高擴(kuò)展性和高吞吐率的數(shù)據(jù)存儲(chǔ)服務(wù)
* hdfs典型結(jié)構(gòu):物理結(jié)構(gòu)+邏輯結(jié)構(gòu)
1.2. YARN
資源調(diào)配模塊(引擎)(分布式資源管理框架)
* 負(fù)責(zé)集群資源的管理和調(diào)度
1.3. MapReduce
計(jì)算引擎
* 分布式計(jì)算框架(計(jì)算向數(shù)據(jù)移動(dòng)-->移動(dòng)計(jì)算而非移動(dòng)數(shù)據(jù))
* 具有易于編程鲁纠、高容錯(cuò)性和高擴(kuò)展性的優(yōu)點(diǎn)
2.HDFS存儲(chǔ)模型
* 文件線性切割成Block:偏移量(offset)
* Block分散存儲(chǔ)在集群節(jié)點(diǎn)中
* 單一文件Block大小一致,文件與文件可以不一致
* Block可以設(shè)置副本數(shù)呻拌,副本分散在不同的節(jié)點(diǎn)中
* 副本數(shù)不要超過節(jié)點(diǎn)數(shù)量
* 文件上傳可以設(shè)置Block大小和副本數(shù)
* 已上傳的文件Block副本數(shù)可以調(diào)整,大小不變
* 只支持一次寫入多次讀取,同一時(shí)刻只有一個(gè)寫入者
* 只能追加,不能修改
3.HDFS架構(gòu)模型
* 文件的元數(shù)據(jù)(metadata)和文件數(shù)據(jù)是分開存儲(chǔ)
* (主)NameNode存儲(chǔ)文件元數(shù)據(jù)进陡,單節(jié)點(diǎn)(posix)
* (從)DataNode存儲(chǔ)文件數(shù)據(jù)
* DataNode與NameNode保持心跳,由dataNode提交Block列表
* HdfsClient(用戶)與NameNode交互元數(shù)據(jù)信息
* HdfsClient(用戶)與DataNode交互文件數(shù)據(jù)信息
HDFS架構(gòu).png
HDFS設(shè)計(jì)思想.png
4.NameNode
4.1 基于內(nèi)存存儲(chǔ)
- 只存在內(nèi)存中(除了初始化和持久化的時(shí)候跟硬盤打交道微服,其余時(shí)候全部在內(nèi)存中操作)
- 持久化操作(假設(shè)內(nèi)存只有1G,現(xiàn)在數(shù)據(jù)有1.2G缨历,則需要做持久化)
* 不存儲(chǔ)Block位置信息(由DataNode上報(bào)給NameNode)-不存儲(chǔ)到fsimage中
* NameNOde的metadata信息在啟動(dòng)后加載到內(nèi)存
* Metadata信息存儲(chǔ)到fsimage文件中
* edits記錄對(duì)metadata的操作日志(類似redis)
4.2 NameNode主要功能
接受客戶端的讀寫要求
收集DataNode匯報(bào)的Block列表信息
4.3 NameNode保存Metadata主要信息
文件Owership和pemissions
文件大小和時(shí)間
Block列表(offset等)
Block每個(gè)副本的位置(由DataNode上報(bào))
5. DataNode
本地磁盤目錄存儲(chǔ)數(shù)據(jù)(Block)以蕴,文件形式
同時(shí)存儲(chǔ)Block的元數(shù)據(jù)信息
啟動(dòng)datanode時(shí),會(huì)向namenode匯報(bào)block信息
通過向NameNode發(fā)送心跳信息保持與其聯(lián)系(每3秒一次)辛孵,如果NameNode 10分鐘沒有收到DataNode的心跳丛肮,則認(rèn)為其已經(jīng)lost,則將其block信息copy到其他DataNode上
6.HDFS優(yōu)點(diǎn)
高容錯(cuò)性
* 數(shù)據(jù)自動(dòng)保存多個(gè)副本
* 副本丟失后魄缚,自動(dòng)恢復(fù)
適合批處理
* 移動(dòng)計(jì)算非數(shù)據(jù)(把計(jì)算的邏輯在有數(shù)據(jù)的地方進(jìn)行計(jì)算)
* 數(shù)據(jù)位置暴露給計(jì)算框架
適合大數(shù)據(jù)處理
* GB TB 甚至PB級(jí)數(shù)據(jù)
* 百萬規(guī)模以上的
可構(gòu)建在廉價(jià)的機(jī)器上
7.HDFS缺點(diǎn)
無法進(jìn)行低延遲數(shù)據(jù)訪問
* 比如毫秒級(jí)
* 低延遲與高吞吐率
小文件存取
* 占用NameNode大量?jī)?nèi)存
* 尋道時(shí)間超過讀取時(shí)間
并發(fā)寫入宝与、文件隨機(jī)修改
* 一個(gè)文件只能有一個(gè)寫者
* 僅支持append
8.Block副本的放置策略
第一個(gè)副本:放置在上傳文件的datanode上焚廊,如果是集群外提交,則隨機(jī)挑選一臺(tái)磁盤不太滿习劫,cpu不太忙的節(jié)點(diǎn)
第二個(gè)副本:放置在第一個(gè)副本不同的機(jī)架的節(jié)點(diǎn)上
第三個(gè)副本:與第二個(gè)副本相同的機(jī)架的節(jié)點(diǎn)
更多副本:隨機(jī)節(jié)點(diǎn)
Block副本的放置策略.png
11.總結(jié)
HDFS就是一個(gè)分余展的大硬盤:分--分塊 余--可以冗余咆瘟,展--動(dòng)態(tài)擴(kuò)展
云計(jì)算:分布式計(jì)算,分布在不懂服務(wù)器中的計(jì)算
設(shè)計(jì)原則:移動(dòng)計(jì)算诽里,而不是移動(dòng)數(shù)據(jù)
在生產(chǎn)環(huán)境中袒餐,nameNode和resourceManager一般情況是在不同機(jī)器上,而nodeManageer和datanode一般情況是在同一臺(tái)機(jī)器上(至少離得近)