一涩澡、HDFS HA架構(gòu)圖梳理
Hadoop 2.x版本中拧晕,HDFS架構(gòu)引入雙NameNode解決了單點(diǎn)故障問(wèn)題
二十酣、YARN HA架構(gòu)圖梳理
三、總結(jié)HDFS YARN HA架構(gòu)區(qū)別
1 ZKFC
- HDFS中ZKFC作為單獨(dú)的進(jìn)程
- Yarn中ZKFC是RM中的線(xiàn)程
2 從節(jié)點(diǎn)
- HDFS中的DataNode 會(huì)向兩個(gè)NameNode同時(shí)發(fā)送心跳蚊丐。
- Yarn中NodeManager只會(huì)向activeRM上報(bào)資源
四、HDFS dfs -ls 結(jié)果是哪個(gè)目錄
結(jié)果查出來(lái)是本地目錄
五艳吠、雙寫(xiě)的理解
在生產(chǎn)中麦备,有兩種雙寫(xiě):
1.結(jié)果雙寫(xiě)
spark處理好的數(shù)據(jù),全部存儲(chǔ)在HBase中昭娩,兩個(gè)月的數(shù)據(jù)存放在ES集群上方便快速查詢(xún)凛篙。
2.數(shù)據(jù)同步雙寫(xiě)
架構(gòu)分為A線(xiàn)和B線(xiàn),防止延遲
六栏渺、小文件的理解呛梆。什么是小文件、危害磕诊,如何避免(產(chǎn)生前削彬,產(chǎn)生后)
1全庸、小文件問(wèn)題
????????Hdoop是存儲(chǔ)TB甚至更大級(jí)別的數(shù)據(jù)集的。一個(gè)大的文件存放在HDFS上會(huì)拆分為多個(gè)block融痛,每個(gè)block又會(huì)有多個(gè)副本(默認(rèn)3個(gè))存放在不同的服務(wù)器上壶笼。block存放在DataNode上面,元數(shù)據(jù)信息存放在NameNode上面雁刷,加載在內(nèi)存中覆劈。比如不管是存放一個(gè)大小為1TB的文件還是一個(gè)大小為1KB的文件,都會(huì)各自有一個(gè)元數(shù)據(jù)信息沛励。這種小文件很多的話(huà)责语,對(duì)NN的壓力就會(huì)非常大,就會(huì)有宕機(jī)的風(fēng)險(xiǎn)目派。
2坤候、什么是小文件
????????實(shí)際上并沒(méi)有一個(gè)標(biāo)準(zhǔn)的答案∑蟛洌籠統(tǒng)地說(shuō)小文件就是文件size小于HDFS上block大小的文件白筹。
3、小文件的危害
1)HDFS不適合大量小文件的存儲(chǔ)谅摄,因namenode將文件系統(tǒng)的元數(shù)據(jù)存放在內(nèi)存中徒河,因此存儲(chǔ)的文件數(shù)目受限于 namenode的內(nèi)存大小。HDFS中每個(gè)文件送漠、目錄顽照、數(shù)據(jù)塊占用150Bytes。如果存放的文件數(shù)目過(guò)多的話(huà)會(huì)占用很大的內(nèi)存甚至撐爆內(nèi)存
2)HDFS適用于高吞吐量闽寡,而不適合低時(shí)間延遲的訪(fǎng)問(wèn)代兵。如果同時(shí)存入大量的小文件會(huì)花費(fèi)很長(zhǎng)的時(shí)間
3)流式讀取的方式,不適合多用戶(hù)寫(xiě)入爷狈,以及任意位置寫(xiě)入奢人。如果訪(fǎng)問(wèn)小文件,則必須從一個(gè)datanode跳轉(zhuǎn)到另外一個(gè)datanode淆院,這樣大大降低了讀取性能何乎。
4、小文件是如何產(chǎn)生的
1)集群上的數(shù)據(jù)是通過(guò)某種手段采集過(guò)來(lái)的土辩。如使用Flume支救,使用不當(dāng)?shù)脑?huà)采集到HDFS的數(shù)據(jù)會(huì)有很多小文件
2)使用計(jì)算框架MR/Hive/Spark時(shí),進(jìn)行ETL會(huì)產(chǎn)生很多小文件拷淘,統(tǒng)計(jì)分析時(shí)采用數(shù)據(jù)倉(cāng)庫(kù)各墨,分好幾層,每個(gè)層里面又是一堆小文件
5启涯、如何避免小文件
沒(méi)有一個(gè)標(biāo)準(zhǔn)答案贬堵,都是根據(jù)實(shí)際情況作出處理
七恃轩、主從架構(gòu)的HBase讀寫(xiě)經(jīng)過(guò)master進(jìn)程嗎?
不經(jīng)過(guò)
1黎做、讀請(qǐng)求過(guò)程:
1)客戶(hù)端通過(guò)zookeeper以及root表和meta表找到目標(biāo)數(shù)據(jù)所在的regionserver
2)聯(lián)系regionserver查詢(xún)目標(biāo)數(shù)據(jù)
3)regionserver定位到目標(biāo)數(shù)據(jù)所在的region叉跛,發(fā)出查詢(xún)請(qǐng)求
4)region先在memstore中查找,命中則返回
5)如果在memstore中找不到蒸殿,則在storefile中掃描(可能會(huì)掃描到很多的storefile—-bloomfilter)
2筷厘、寫(xiě)請(qǐng)求過(guò)程:
1)client向region server提交寫(xiě)請(qǐng)求
2)region server找到目標(biāo)region
3)region檢查數(shù)據(jù)是否與schema一致
4)如果客戶(hù)端沒(méi)有指定版本,則獲取當(dāng)前系統(tǒng)時(shí)間作為數(shù)據(jù)版本
5)將更新寫(xiě)入WAL log
6)將更新寫(xiě)入Memstore
7)判斷Memstore的是否需要flush為Store文件宏所。