溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

HDFS應(yīng)該了解的問題有哪些

發(fā)布時(shí)間:2021-12-09 11:54:33 來源:億速云 閱讀:154 作者:小新 欄目:大數(shù)據(jù)

這篇文章主要為大家展示了“HDFS應(yīng)該了解的問題有哪些”,內(nèi)容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“HDFS應(yīng)該了解的問題有哪些”這篇文章吧。

1.Namenode的安全模式 ?

安全模式是Namenode的一種狀態(tài)(Namenode主要有active/standby/safemode三種模式)。

2.哪些情況下,Namenode會進(jìn)入安全模式 ?

a. Namenode發(fā)現(xiàn)集群中的block丟失率達(dá)到一定比例時(shí)(默認(rèn)0.01%),Namenode就會進(jìn)入安全模式,在安全模式下,客戶端不能對任何數(shù)據(jù)進(jìn)行操作,只能查看元數(shù)據(jù)信息

b. 在hdfs集群正常冷啟動時(shí),Namenode也會在safemode狀態(tài)下維持相當(dāng)長的一段時(shí)間,此時(shí)你不需要去理會,等待它自動退出安全模式即可
3.為什么,在HDFS集群冷啟動時(shí),Namenode會在安全模式下維持相當(dāng)長的一段時(shí)間 ?

Namenode的內(nèi)存元數(shù)據(jù)中,包含文件路徑、副本數(shù)、blockid,及每一個(gè)block所在Datanode的信息,而fsimage中,不包含block所在的Datanode信息。那么,當(dāng)Namenode冷啟動時(shí),此時(shí)內(nèi)存中的元數(shù)據(jù)只能從fsimage中加載而來,從而就沒有block所在的Datanode信息 ——> 就會導(dǎo)致Namenode認(rèn)為所有的block都已經(jīng)丟失 ——> 進(jìn)入安全模式 ——> 所在的Datanode信息啟動后,會定期向Namenode匯報(bào)自身所持有的block信息 ——> 隨著Datanode陸續(xù)啟動,從而陸續(xù)匯報(bào)block信息,Namenode就會將內(nèi)存元數(shù)據(jù)中的block所在Datanode信息補(bǔ)全更新 ——> 找到了所有block的位置,從而自動退出安全模式

4.如何退出安全模式 ?  

1)找到問題所在,進(jìn)行修復(fù)(比如修復(fù)宕機(jī)的所在Datanode信息補(bǔ)全更新)

2)可以手動強(qiáng)行退出安全模式:hdfs namenode --safemode leave 【不推薦,畢竟沒有真正解決問題】  
5.Namenode服務(wù)器的磁盤故障導(dǎo)致namenode宕機(jī),如何挽救集群及數(shù)據(jù)
1)HA機(jī)制:高可用hadoop2.0  
 2)配置hdfs-site.xml指定然后重啟Namenode運(yùn)行時(shí)數(shù)據(jù)存放多個(gè)磁盤位置  
 3)然后重啟Namenode和SecondaryNamenode的工作目錄存儲結(jié)構(gòu)完全相同,當(dāng)然后重啟Namenode故障退出需要重新恢復(fù)時(shí),可以從SecondaryNamenode的工作目錄存儲結(jié)構(gòu)完全相同,當(dāng)?shù)墓ぷ髂夸浿械膎amesecondary文件夾及其中文件拷貝到然后重啟Namenode所在節(jié)點(diǎn)工作目錄中(但只能恢復(fù)大部分?jǐn)?shù)據(jù)SecondaryNamenode最后一次合并之后的更新操作的元數(shù)據(jù)將會丟失),將namesecondary重命名為name然后重啟Namenode  
6.Namenode是否可以有多個(gè)?Namenode跟集群數(shù)據(jù)存儲能力有關(guān)系嗎?  

1)非HA的模式下Namenode只能有一個(gè),HA模式下可以有兩個(gè)(一主active一備standby),HDFS聯(lián)邦機(jī)制可以有多個(gè)Namenode

2)關(guān)系不大,存儲數(shù)據(jù)由Datanode完成。但是藥盡量避免存儲大量小文件,因?yàn)闀馁M(fèi)Namenode內(nèi)存
7.fsimage是否存放了block所在服務(wù)器信息 ?

1)在edits中保存著每個(gè)文件的操作詳細(xì)信息

2)在fsimage中保存著文件的名字、id、分塊、大小等信息,但是不保存Datanode 的IP

3)在hdfs啟動時(shí)處于安全模式,Datanode 向Namenode匯報(bào)自己的IP和持有的block信息

安全模式結(jié)束,文件塊和Datanode 的IP關(guān)聯(lián)上

驗(yàn)證過程:

1) 啟動Namenode,離開safemode,cat某個(gè)文件,看log,沒有顯示文件關(guān)聯(lián)的Datanode

2) 啟動Datanode,cat文件,內(nèi)容顯示

3) 停止Datanode ,cat文件,看log,看不到文件,但顯示了文件塊關(guān)聯(lián)的Datanode

8.Datanode動態(tài)上下線?

在實(shí)際生產(chǎn)環(huán)境中,在hdfs-site.xml文件中還會配置如下兩個(gè)參數(shù):

dfs.hosts:白名單;dfs.hosts.exclude:黑名單

<property>

<name>dfs.hosts</name>

#完整的文件路徑:列出了允許連入NameNode的datanode清單(IP或者機(jī)器名)

<value>$HADOOP_HOME/conf/hdfs_include</value>

</property>

<property>

<name>dfs.hosts.exclude</name>

#文件完整路徑:列出了禁止連入NameNode的datanode清單(IP或者機(jī)器名)

<value>$HADOOP_HOME/conf/hdfs_exclude</value>

</property>

1) 上線datanode

a) 保證上線的datanode的ip配置在白名單并且不出現(xiàn)在黑名單中

b) 配置成功上線的datanode后,通過命令hadoop-daemon.sh datanode start啟動

c) 刷新節(jié)點(diǎn)狀態(tài):/bin/hadoop dfsadmin -refreshNodes(這個(gè)命令可以動態(tài)刷新dfs.hosts和dfs.hosts.exclude配置,無需重啟NameNode)

d) 手動進(jìn)行數(shù)據(jù)均衡:start-balance.sh

2) 下線datanode

a) 保證下線的datanode的ip配置在黑名單并且不出現(xiàn)在白名單中

b) 關(guān)閉下線的節(jié)點(diǎn)

c) 刷新節(jié)點(diǎn)狀態(tài):/bin/hadoop dfsadmin -refreshNodes

d) 機(jī)器下線完畢后,將它們從hdfs_exclude文件中移除

9.關(guān)于Datanode的幾個(gè)問題 ?

1)Datanode在什么情況下不會備份?

在強(qiáng)制關(guān)閉或者非正常斷電時(shí)不會備份
2)3個(gè)Datanode中有一個(gè)Datanode出現(xiàn)錯(cuò)誤會怎樣?
這個(gè)Datanode的數(shù)據(jù)會在其他的Datanode上重新做備份  
10.HDFS HA機(jī)制下的腦裂現(xiàn)象以及避免方法 ?  
當(dāng)standby Namenode的ZKFailoverController收到active Namenode端故障通知時(shí),不會立即將自己的狀態(tài)切換為active,因?yàn)榇藭r(shí)active Namenode可能處于“假死”狀態(tài),如果即刻切換為active狀態(tài),有可能造成腦裂現(xiàn)象。
為了防止腦裂,建議寫個(gè)腳本確保發(fā)出故障通知的active Namenode一定被kill掉,具體可以按照以下幾個(gè)步驟完成kill操作:
1.執(zhí)行殺掉active Namenode的shell腳本,等待ssh kill返回命令
2.如果響應(yīng)成功,就把原standby Namenode的狀態(tài)切換為active;如果響應(yīng)失敗或者超時(shí)(可以配置一個(gè)超時(shí)時(shí)間)
3.只要shell腳本的調(diào)用返回值為true,則切換自己端的Namenode狀態(tài)為active
筆者強(qiáng)調(diào):Namenode主備切換、健康狀態(tài)監(jiān)控等需要通過ZKFailoverController等組件實(shí)現(xiàn),但最終會借助于zookeeper集群

11.HDFS為什么不適合存儲小文件 ?

一般一個(gè)block對應(yīng)的元數(shù)據(jù)大小為150byte左右,大量小文件會使內(nèi)存中的元數(shù)據(jù)變大導(dǎo)致占用大量Namenode內(nèi)存、尋址時(shí)間長

12.大量小文件的處理方式
1)打成HAR files  
 命令:hadoop archive -archiveName xxx.har -p /src /dest  
 查看內(nèi)容:hadoop fs -lsr har:///dest/xxx.har  

該命令底層實(shí)際上是運(yùn)行了一個(gè)MapReduce任務(wù)來將小文件打包成HAR。但是通過HAR來讀取一個(gè)文件并不會比直接從HDFS中讀取文件高效,因?yàn)閷γ恳粋€(gè)HAR文件的訪問都需要進(jìn)行index文件和文件本身數(shù)據(jù)的讀取。并且雖然HAR文件可以被用來作為MapReduce任務(wù)的input,但是并不能將HAR文件中打包的文件當(dāng)作一個(gè)HDFS文件處理

2)編寫MR程序,將小文件序列化到一個(gè)Sequence File中

將小文件以文件名作為key,以文件內(nèi)容作為value,編寫一個(gè)程序?qū)⑺鼈冃蛄谢紿DFS上的一個(gè)Sequence File中,然后來處理這個(gè)Sequence File。相對打成HAR文件,具有兩個(gè)優(yōu)勢:
(1)Sequence File是可拆分的,因此MapReduce可以將它們分成塊并獨(dú)立地對每個(gè)塊進(jìn)行操作
(2)它們同時(shí)支持壓縮,不像HAR。在大多數(shù)情況下,塊壓縮是最好的選擇,因?yàn)樗鼘嚎s幾個(gè)記錄為一個(gè)塊,而不是一個(gè)記錄壓縮一個(gè)塊

筆者強(qiáng)調(diào)hdfs小文件問題要結(jié)合具體的處理引擎以及業(yè)務(wù)情況等,比如離線處理下、流式處理下小文件問題如何解決,之后筆者會開單篇詳述

13.查看HDFS集群工作狀態(tài)命令 ?

hdfs dfsadmin -report:快速定位各個(gè)節(jié)點(diǎn)情況,如每個(gè)節(jié)點(diǎn)的硬盤使用情況

以上是“HDFS應(yīng)該了解的問題有哪些”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI