小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

Hadoop學(xué)習(xí)之路(九)HDFS深入理解

 HK123COM 2019-02-14

目錄

 

正文

 HDFS的優(yōu)點(diǎn)和缺點(diǎn)

HDFS的優(yōu)點(diǎn)

1、可構(gòu)建在廉價(jià)機(jī)器上

    通過多副本提高可靠性,提供了容錯(cuò)和恢復(fù)機(jī)制

    服務(wù)器節(jié)點(diǎn)的宕機(jī)是常態(tài)   必須理性對(duì)象

 

2、高容錯(cuò)性

    數(shù)據(jù)自動(dòng)保存多個(gè)副本,副本丟失后,自動(dòng)恢復(fù)

    HDFS的核心設(shè)計(jì)思想:  分散均勻存儲(chǔ) + 備份冗余存儲(chǔ)

3、適合批處理

    移動(dòng)計(jì)算而非數(shù)據(jù),數(shù)據(jù)位置暴露給計(jì)算框架

    海量數(shù)據(jù)的計(jì)算 任務(wù) 最終是一定要被切分成很多的小任務(wù)進(jìn)行

 

4、適合大數(shù)據(jù)處理

    GB、TB、甚至 PB 級(jí)數(shù)據(jù),百萬規(guī)模以上的文件數(shù)量,10K+節(jié)點(diǎn)規(guī)模

5、流式文件訪問

     一次性寫入,多次讀取,保證數(shù)據(jù)一致性

HDFS的缺點(diǎn)

不適合以下操作

1、低延遲數(shù)據(jù)訪問

    比如毫秒級(jí) 低延遲與高吞吐率

2、小文件存取

    占用 NameNode 大量?jī)?nèi)存 150b* 1000W = 15E,1.5G 尋道時(shí)間超過讀取時(shí)間

3、并發(fā)寫入、文件隨機(jī)修改

    一個(gè)文件只能有一個(gè)寫者 僅支持 append

拋出問題:HDFS文件系統(tǒng)為什么不適用于存儲(chǔ)小文件?

這是和HDFS系統(tǒng)底層設(shè)計(jì)實(shí)現(xiàn)有關(guān)系的,HDFS本身的設(shè)計(jì)就是用來解決海量大文件數(shù)據(jù)的存儲(chǔ).,他天生喜歡大數(shù)據(jù)的處理,大文件存儲(chǔ)在HDFS中,會(huì)被切分成很多的小數(shù)據(jù)塊,任何一個(gè)文件不管有多小,都是一個(gè)獨(dú)立的數(shù)據(jù)塊,而這些數(shù)據(jù)塊的信息則是保存在元數(shù)據(jù)中的,在之前的博客HDFS基礎(chǔ)里面介紹過在HDFS集群的namenode中會(huì)存儲(chǔ)元數(shù)據(jù)的信息,這里再說一下,元數(shù)據(jù)的信息主要包括以下3部分:

  1)抽象目錄樹

  2)文件和數(shù)據(jù)塊的映射關(guān)系,一個(gè)數(shù)據(jù)塊的元數(shù)據(jù)大小大約是150byte

  3)數(shù)據(jù)塊的多個(gè)副本存儲(chǔ)地

而元數(shù)據(jù)的存儲(chǔ)在磁盤(1和2)和內(nèi)存中(1、2和3),而服務(wù)器中的內(nèi)存是有上限的,舉個(gè)例子:

有100個(gè)1M的文件存儲(chǔ)進(jìn)入HDFS系統(tǒng),那么數(shù)據(jù)塊的個(gè)數(shù)就是100個(gè),元數(shù)據(jù)的大小就是100*150byte,消耗了15000byte的內(nèi)存,但是只存儲(chǔ)了100M的數(shù)據(jù)。

有1個(gè)100M的文件存儲(chǔ)進(jìn)入HDFS系統(tǒng),那么數(shù)據(jù)塊的個(gè)數(shù)就是1個(gè),元數(shù)據(jù)的大小就是150byte,消耗量150byte的內(nèi)存,存儲(chǔ)量100M的數(shù)據(jù)。

所以說HDFS文件系統(tǒng)不適用于存儲(chǔ)小文件。

HDFS的輔助功能

HDFS作為一個(gè)文件系統(tǒng)。有兩個(gè)最主要的功能:上傳和下載。而為了保障這兩個(gè)功能的完美和高效實(shí)現(xiàn),HDFS提供了很多的輔助功能

1.心跳機(jī)制

普通話講解

1、 Hadoop 是 Master/Slave 結(jié)構(gòu),Master 中有 NameNode 和 ResourceManager,Slave 中有 Datanode 和 NodeManager 

2、 Master 啟動(dòng)的時(shí)候會(huì)啟動(dòng)一個(gè) IPC(Inter-Process Comunication,進(jìn)程間通信)server 服 務(wù),等待 slave 的鏈接

3、 Slave 啟動(dòng)時(shí),會(huì)主動(dòng)鏈接 master 的 ipc server 服務(wù),并且每隔 3 秒鏈接一次 master,這 個(gè)間隔時(shí)間是可以調(diào)整的,參數(shù)為 dfs.heartbeat.interval,這個(gè)每隔一段時(shí)間去連接一次 的機(jī)制,我們形象的稱為心跳。Slave 通過心跳匯報(bào)自己的信息給 master,master 也通 過心跳給 slave 下達(dá)命令,

4、 NameNode 通過心跳得知 Datanode 的狀態(tài) ,ResourceManager 通過心跳得知 NodeManager 的狀態(tài)

5、 如果 master 長(zhǎng)時(shí)間都沒有收到 slave 的心跳,就認(rèn)為該 slave 掛掉了。!?。。?!

大白話講解

1、DataNode啟動(dòng)的時(shí)候會(huì)向NameNode匯報(bào)信息,就像釘釘上班打卡一樣,你打卡之后,你領(lǐng)導(dǎo)才知道你今天來上班了,同樣的道理,DataNode也需要向NameNode進(jìn)行匯報(bào),只不過每次匯報(bào)的時(shí)間間隔有點(diǎn)短而已,默認(rèn)是3秒中,DataNode向NameNode匯報(bào)的信息有2點(diǎn),一個(gè)是自身DataNode的狀態(tài)信息,另一個(gè)是自身DataNode所持有的所有的數(shù)據(jù)塊的信息。而DataNode是不會(huì)知道他保存的所有的數(shù)據(jù)塊副本到底是屬于哪個(gè)文件,這些都是存儲(chǔ)在NameNode的元數(shù)據(jù)中。

2、按照規(guī)定,每個(gè)DataNode都是需要向NameNode進(jìn)行匯報(bào)。那么如果從某個(gè)時(shí)刻開始,某個(gè)DataNode再也不向NameNode進(jìn)行匯報(bào)了。 有可能宕機(jī)了。因?yàn)橹灰ㄟ^網(wǎng)絡(luò)傳輸數(shù)據(jù),就一定存在一種可能: 丟失 或者 延遲。

3、HDFS的標(biāo)準(zhǔn): NameNode如果連續(xù)10次沒有收到DataNode的匯報(bào)。 那么NameNode就會(huì)認(rèn)為該DataNode存在宕機(jī)的可能。

4、DataNode啟動(dòng)好了之后,會(huì)專門啟動(dòng)一個(gè)線程,去負(fù)責(zé)給NameNode發(fā)送心跳數(shù)據(jù)包,如果說整個(gè)DataNode沒有任何問題,但是僅僅只是當(dāng)前負(fù)責(zé)發(fā)送信條數(shù)據(jù)包的線程掛了。NameNode會(huì)發(fā)送命令向這個(gè)DataNode進(jìn)行確認(rèn)。查看這個(gè)發(fā)送心跳數(shù)據(jù)包的服務(wù)是否還能正常運(yùn)行,而為了保險(xiǎn)起見,NameNode會(huì)向DataNode確認(rèn)2遍,每5分鐘確認(rèn)一次。如果2次都沒有返回 結(jié)果,那么NameNode就會(huì)認(rèn)為DataNode已經(jīng)GameOver了?。?!

最終NameNode判斷一個(gè)DataNode死亡的時(shí)間計(jì)算公式:

timeout = 10 * 心跳間隔時(shí)間  + 2 * 檢查一次消耗的時(shí)間

 心跳間隔時(shí)間:dfs.heartbeat.interval 心跳時(shí)間:3s
檢查一次消耗的時(shí)間:heartbeat.recheck.interval checktime : 5min

最終結(jié)果默認(rèn)是630s。

2.安全模式

1、HDFS的啟動(dòng)和關(guān)閉都是先啟動(dòng)NameNode,在啟動(dòng)DataNode,最后在啟動(dòng)secondarynamenode。

2、決定HDFS集群的啟動(dòng)時(shí)長(zhǎng)會(huì)有兩個(gè)因素:

  1)磁盤元數(shù)據(jù)的大小

  2)datanode的節(jié)點(diǎn)個(gè)數(shù)

 當(dāng)元數(shù)據(jù)很大,或者 節(jié)點(diǎn)個(gè)數(shù)很多的時(shí)候,那么HDFS的啟動(dòng),需要一段很長(zhǎng)的時(shí)間,那么在還沒有完全啟動(dòng)的時(shí)候HDFS能否對(duì)外提供服務(wù)?

在HDFS的啟動(dòng)命令start-dfs.sh執(zhí)行的時(shí)候,HDFS會(huì)自動(dòng)進(jìn)入安全模式

為了確保用戶的操作是可以高效的執(zhí)行成功的,在HDFS發(fā)現(xiàn)自身不完整的時(shí)候,會(huì)進(jìn)入安全模式。保護(hù)自己。

 

在正常啟動(dòng)之后,如果HDFS發(fā)現(xiàn)所有的數(shù)據(jù)都是齊全的,那么HDFS會(huì)啟動(dòng)的退出安全模式

3、對(duì)安全模式進(jìn)行測(cè)試

安全模式常用操作命令:

復(fù)制代碼
hdfs dfsadmin -safemode leave //強(qiáng)制 NameNode 退出安全模式

hdfs dfsadmin -safemode enter //進(jìn)入安全模式

hdfs dfsadmin -safemode get //查看安全模式狀態(tài)

hdfs dfsadmin -safemode wait //等待,一直到安全模式結(jié)束
復(fù)制代碼

手工進(jìn)入安全模式進(jìn)行測(cè)試

1、測(cè)試創(chuàng)建文件夾

[hadoop@hadoop1 ~]$ hdfs dfsadmin -safemode enter
Safe mode is ON
[hadoop@hadoop1 ~]$ hadoop fs -mkdir -p /xx/yy/zz
mkdir: Cannot create directory /xx/yy/zz. Name node is in safe mode.
[hadoop@hadoop1 ~]$ 

2、測(cè)試下載文件

復(fù)制代碼
[hadoop@hadoop1 ~]$ ls
apps  data
[hadoop@hadoop1 ~]$ hdfs dfsadmin -safemode get
Safe mode is ON
[hadoop@hadoop1 ~]$ hadoop fs -get /aa/1.txt ~/1.txt
[hadoop@hadoop1 ~]$ ls
1.txt  apps  data
[hadoop@hadoop1 ~]$ 
復(fù)制代碼

3、測(cè)試上傳

[hadoop@hadoop1 ~]$ hadoop fs -put 1.txt /a/xx.txt
put: Cannot create file/a/xx.txt._COPYING_. Name node is in safe mode.
[hadoop@hadoop1 ~]$ 

4、得出結(jié)論,在安全模式下:

如果一個(gè)操作涉及到元數(shù)據(jù)的修改的話。都不能進(jìn)行操作

如果一個(gè)操作僅僅只是查詢。那是被允許的。

所謂的安全模式,僅僅只是保護(hù)namenode,而不是保護(hù)datanode

3.副本存放策略

第一副本:放置在上傳文件的DataNode上;如果是集群外提交,則隨機(jī)挑選一臺(tái)磁盤不太慢、CPU不太忙的節(jié)點(diǎn)上;
第二副本:放置在于第一個(gè)副本不同的機(jī)架的節(jié)點(diǎn)上;
第三副本:與第二個(gè)副本相同機(jī)架的不同節(jié)點(diǎn)上;
如果還有更多的副本:隨機(jī)放在節(jié)點(diǎn)中;

4.負(fù)載均衡

負(fù)載均衡理想狀態(tài):節(jié)點(diǎn)均衡、機(jī)架均衡和磁盤均衡。

Hadoop的HDFS集群非常容易出現(xiàn)機(jī)器與機(jī)器之間磁盤利用率不平衡的情況,例如:當(dāng)集群內(nèi)新增、刪除節(jié)點(diǎn),或者某個(gè)節(jié)點(diǎn)機(jī)器內(nèi)硬盤存儲(chǔ)達(dá)到飽和值。當(dāng)數(shù)據(jù)不平衡時(shí),Map任務(wù)可能會(huì)分配到?jīng)]有存儲(chǔ)數(shù)據(jù)的機(jī)器,這將導(dǎo)致網(wǎng)絡(luò)帶寬的消耗,也無法很好的進(jìn)行本地計(jì)算。
當(dāng)HDFS負(fù)載不均衡時(shí),需要對(duì)HDFS進(jìn)行數(shù)據(jù)的負(fù)載均衡調(diào)整,即對(duì)各節(jié)點(diǎn)機(jī)器上數(shù)據(jù)的存儲(chǔ)分布進(jìn)行調(diào)整。從而,讓數(shù)據(jù)均勻的分布在各個(gè)DataNode上,均衡IO性能,防止熱點(diǎn)的發(fā)生。進(jìn)行數(shù)據(jù)的負(fù)載均衡調(diào)整,必須要滿足如下原則:

  • 數(shù)據(jù)平衡不能導(dǎo)致數(shù)據(jù)塊減少,數(shù)據(jù)塊備份丟失
  • 管理員可以中止數(shù)據(jù)平衡進(jìn)程
  • 每次移動(dòng)的數(shù)據(jù)量以及占用的網(wǎng)絡(luò)資源,必須是可控的
  • 數(shù)據(jù)均衡過程,不能影響namenode的正常工作

負(fù)載均衡的原理

數(shù)據(jù)均衡過程的核心是一個(gè)數(shù)據(jù)均衡算法,該數(shù)據(jù)均衡算法將不斷迭代數(shù)據(jù)均衡邏輯,直至集群內(nèi)數(shù)據(jù)均衡為止。該數(shù)據(jù)均衡算法每次迭代的邏輯如下:

步驟分析如下:

  1. 數(shù)據(jù)均衡服務(wù)(Rebalancing Server)首先要求 NameNode 生成 DataNode 數(shù)據(jù)分布分析報(bào)告,獲取每個(gè)DataNode磁盤使用情況
  2. Rebalancing Server匯總需要移動(dòng)的數(shù)據(jù)分布情況,計(jì)算具體數(shù)據(jù)塊遷移路線圖。數(shù)據(jù)塊遷移路線圖,確保網(wǎng)絡(luò)內(nèi)最短路徑
  3. 開始數(shù)據(jù)塊遷移任務(wù),Proxy Source Data Node復(fù)制一塊需要移動(dòng)數(shù)據(jù)塊
  4. 將復(fù)制的數(shù)據(jù)塊復(fù)制到目標(biāo)DataNode上
  5. 刪除原始數(shù)據(jù)塊
  6. 目標(biāo)DataNode向Proxy Source Data Node確認(rèn)該數(shù)據(jù)塊遷移完成
  7. Proxy Source Data Node向Rebalancing Server確認(rèn)本次數(shù)據(jù)塊遷移完成。然后繼續(xù)執(zhí)行這個(gè)過程,直至集群達(dá)到數(shù)據(jù)均衡標(biāo)準(zhǔn)

DataNode分組

在第2步中,HDFS會(huì)把當(dāng)前的DataNode節(jié)點(diǎn),根據(jù)閾值的設(shè)定情況劃分到Over、Above、Below、Under四個(gè)組中。在移動(dòng)數(shù)據(jù)塊的時(shí)候,Over組、Above組中的塊向Below組、Under組移動(dòng)。四個(gè)組定義如下:

 

  • Over組:此組中的DataNode的均滿足

DataNode_usedSpace_percent > Cluster_usedSpace_percent + threshold

  • Above組:此組中的DataNode的均滿足

Cluster_usedSpace_percent + threshold > DataNode_ usedSpace _percent >Cluster_usedSpace_percent

  • Below組:此組中的DataNode的均滿足

Cluster_usedSpace_percent > DataNode_ usedSpace_percent > Cluster_ usedSpace_percent – threshold

  • Under組:此組中的DataNode的均滿足

Cluster_usedSpace_percent – threshold > DataNode_usedSpace_percent

Hadoop HDFS 數(shù)據(jù)自動(dòng)平衡腳本使用方法

在Hadoop中,包含一個(gè)start-balancer.sh腳本,通過運(yùn)行這個(gè)工具,啟動(dòng)HDFS數(shù)據(jù)均衡服務(wù)。該工具可以做到熱插拔,即無須重啟計(jì)算機(jī)和 Hadoop 服務(wù)。HadoopHome/bin目錄下的start?balancer.sh腳本就是該任務(wù)的啟動(dòng)腳本。啟動(dòng)命令為:‘HadoopHome/bin目錄下的start?balancer.sh腳本就是該任務(wù)的啟動(dòng)腳本。啟動(dòng)命令為:‘Hadoop_home/bin/start-balancer.sh –threshold`

影響B(tài)alancer的幾個(gè)參數(shù):

  • -threshold
    • 默認(rèn)設(shè)置:10,參數(shù)取值范圍:0-100
    • 參數(shù)含義:判斷集群是否平衡的閾值。理論上,該參數(shù)設(shè)置的越小,整個(gè)集群就越平衡
  • dfs.balance.bandwidthPerSec
    • 默認(rèn)設(shè)置:1048576(1M/S)
    • 參數(shù)含義:Balancer運(yùn)行時(shí)允許占用的帶寬

示例如下:

復(fù)制代碼
#啟動(dòng)數(shù)據(jù)均衡,默認(rèn)閾值為 10%
$Hadoop_home/bin/start-balancer.sh

#啟動(dòng)數(shù)據(jù)均衡,閾值 5%
bin/start-balancer.sh –threshold 5

#停止數(shù)據(jù)均衡
$Hadoop_home/bin/stop-balancer.sh
復(fù)制代碼

在hdfs-site.xml文件中可以設(shè)置數(shù)據(jù)均衡占用的網(wǎng)絡(luò)帶寬限制

復(fù)制代碼
    <property>
    <name>dfs.balance.bandwidthPerSec</name>
    <value>1048576</value>
    <description> Specifies the maximum bandwidth that each datanode can utilize for the balancing purpose in term of the number of bytes per second. </description>
    </property>
復(fù)制代碼

 

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多