大綱:
一. 大數(shù)據(jù)啟蒙認(rèn)識(shí)
二. HDFS
三. Hadoop1.0的非HA模式(SecondaryNameNode)
四. Hadoop2.0或者3.0的HA模式
今天的筆記是關(guān)于第二點(diǎn)Hadoop1.0的非HA模式(SecondaryNameNode)
Hadoop中的HDFS模塊(SecondaryNameNode)
首先必須要了解的HDFS(文件系統(tǒng))理論知識(shí)點(diǎn)如下:
- 存儲(chǔ)模型
- 架構(gòu)設(shè)計(jì)
- 角色功能
- 元數(shù)據(jù)持久化
- 安全模式
- 副本放置策略
- 讀寫流程
- 安全策略
存儲(chǔ)模型的特點(diǎn)
- 文件線性按字節(jié)切割成塊(block),具有offset,id
- 文件與文件的block大小可以不一樣
- 一個(gè)文件除最后一個(gè)block,其他block大小一致
- block的大小依據(jù)硬件的I/O特性調(diào)整
- block被分散存放在集群的節(jié)點(diǎn)中,具有l(wèi)ocation
- Block具有副本(replication),沒有主從概念,副本不能出現(xiàn)在同一個(gè)節(jié)點(diǎn)
- 副本是滿足可靠性和性能的關(guān)鍵
- 文件上傳可以指定block大小和副本數(shù),上傳后只能修改副本數(shù)
- 一次寫入多次讀取,不支持修改
- 支持追加數(shù)據(jù)
問題一:Hadoop 為什么要設(shè)置HDFS文件系統(tǒng)?
為了實(shí)現(xiàn)Hadoop的功能,必須要一個(gè)具有以下特點(diǎn)的文件系統(tǒng):
- 超大文件的分布式存儲(chǔ)
- 文件的高并發(fā)訪問
- 高可擴(kuò)展性
- 高可靠性
- 高容錯(cuò)
- 高安全性
- 高獲得性
也正是基于這些特點(diǎn),所以建立了HDFS文件系統(tǒng),這也是為什么我們需要它。
問題二:為什么HDFS的block相較于傳統(tǒng)文件系統(tǒng)來說大很多?
因?yàn)镠DFS的的一個(gè)設(shè)計(jì)目標(biāo)就是能夠快速讀取。而對(duì)于磁盤來說,讀取一個(gè)數(shù)據(jù)塊涉及到三種時(shí)間開銷,尋道時(shí)間、旋轉(zhuǎn)時(shí)間和傳輸時(shí)間。傳輸時(shí)間是磁盤本身的特性,不可能通過人工手段來改變,但是對(duì)于尋道時(shí)間和旋轉(zhuǎn)時(shí)間,則可以通過增大一次讀取的數(shù)據(jù)量來減少尋道和旋轉(zhuǎn)的次數(shù)。這樣的話,就可以將讀取數(shù)據(jù)的速率設(shè)計(jì)為接近真實(shí)的磁盤傳輸速率。
舉個(gè)例子,假設(shè)某磁盤的尋道時(shí)間和旋轉(zhuǎn)時(shí)間之和為10ms,傳輸速率為100MB/s。那么,如果想設(shè)計(jì)一種讀取方式讓尋道時(shí)間與旋轉(zhuǎn)時(shí)間總和 不高于總讀取時(shí)間的1%的話,則需要將block的大小設(shè)置為100MB。
當(dāng)然,這個(gè)觀點(diǎn)不可能長(zhǎng)期成立。在MapReduce中,一個(gè)Map任務(wù)一般一次只處理一個(gè)block。那么,當(dāng)Map任務(wù)的數(shù)量少于集群中節(jié)點(diǎn)的個(gè)數(shù)時(shí),完成此job所需時(shí)間就會(huì)慢于其他情況。
問題三: 為什么HDFS中塊(block)不能設(shè)置太大,也不能設(shè)置太???
- size設(shè)置過大:
如果設(shè)置的過大,將會(huì)導(dǎo)致數(shù)據(jù)傳輸時(shí)間明顯大于尋址時(shí)間,導(dǎo)致程序處理這塊的時(shí)間,變得很慢。 - size設(shè)置過?。?
- size過小勢(shì)必導(dǎo)致block的數(shù)量變多,當(dāng)數(shù)量多到一定程度的時(shí)候,會(huì)讓namenode的開銷變大
- 尋址時(shí)間也會(huì)變多
問題四:應(yīng)該怎么設(shè)置block的size?
總的來說磁盤傳輸速率決定了block size的設(shè)置。
- HDFS中平均尋址時(shí)間大約10ms
- 經(jīng)過實(shí)測(cè),尋址時(shí)間為了磁盤傳輸時(shí)間的1%,為最佳狀態(tài)。因此得到如下公式:
最佳傳輸時(shí)間:10ms / 0.01 = 1s
- 目前磁盤傳輸速率普遍為100M/S
block size=100M/S * 最佳傳輸時(shí)間 = 100M
注意 實(shí)際生產(chǎn)過程中,磁盤傳輸速率為200MB/s時(shí),一般設(shè)定block大小為256MB,以此類推。
問題五:完整的文件被切分成分片之后,出現(xiàn)丟失的時(shí)候,該怎么辦?
HDFS的解決方案是: 分片冗余,本地校驗(yàn),需要數(shù)據(jù)塊存儲(chǔ)模式


數(shù)據(jù)冗余式存儲(chǔ),直接將多份的分片文件交給分片后的存儲(chǔ)服務(wù)器去校驗(yàn)。
冗余后的分片文件還有個(gè)額外功能,只要冗余的分片文件中有一份是完整的,經(jīng)過多次協(xié)同調(diào)整后,其他分片文件也將完整。
經(jīng)過協(xié)調(diào)校驗(yàn),無論是傳輸錯(cuò)誤,I/O錯(cuò)誤,還是個(gè)別服務(wù)器宕機(jī),整個(gè)系統(tǒng)里的文件是完整的。
參考:
http://www.itdecent.cn/p/49eee8e5309a?utm_campaign
https://blog.csdn.net/s5660gt/article/details/83655584
https://blog.csdn.net/wx1528159409/article/details/84260023
https://www.cnblogs.com/sddai/p/8647795.html
https://www.cnblogs.com/guarderming/p/11088518.html