hadoop實戰4--(hdfs讀流程,hdfs寫流程,副本放置策略)

shaozi74108發表於2019-02-22
hadoop實戰4--(hdfs讀流程,hdfs寫流程,副本放置策略)
su - hadoop
jps
cd app/hadoop-2.6.0-cdh5.7.0
bin/hdfs dfs  -ls
一、本機被挖礦程式入侵處理?
1.top檢視佔用的程式

2. ps -ef | grep  7509  #檢視埠對應的指令碼

3.檢視是否有定時任務,並編輯檢視內容

可以看到定時任務中的內容,將其註釋掉
#wget -q -o


4.善後處理
因為是雲主機,開放了8088埠,故容易別侵入,因為程式使用了wget程式,故我們把雲主機上的wget程式解除安裝掉,防止再次發生。
yum  remove wget
5. 殺掉埠

kill  -9  7095

二、dfs寫流程:
1 .例如執行命令hdfs dfs -put  LICENSE.TXT  /
對我們操作者而言是無感知的。並不知道上傳到哪個節點。
2.在執行命令的瞬間,呼叫了dfs命令,dfs根據hdfs 幫助命令可以看到,是執行了一個hadoop所支援的操作檔案系統的命令。


圖解說明:
寫流程對於我們操作者而言,是無感知的
1.Client呼叫FileSystem.create(filePath)方法,
去與NN進行【RPC】通訊,check該路徑的檔案是否存在
以及有沒有許可權建立該檔案。 假如OK,就建立一個新檔案,
但是不關聯任何的block,nn根據上傳的檔案大小且塊大小且副本數,
計算多少塊,以及塊存放的dn,最終將這些資訊返回給客戶端
則為【FSDataOutputStream】。
2.Client呼叫FSDataOutputStream.write方法,將第一個塊的
第一個副本寫到第一個DN,寫完寫第二個副本,寫完寫第三個副本;
當第三個副本寫完,返回給ack packet給第二個副本的DN,然後第二個DN返回ack packet給第一個DN;
第一個DN返回ack packet給FSDataOutputStream物件,標識第一個塊,3副本寫完!
然後依次寫剩餘的塊!
(對操作者來說是透明的)
3.當向檔案寫入資料完成後,Client呼叫FSDataOutputStream.close()方法。關閉輸出流,flush換成區的資料包。
4.再呼叫FileSystem.complete(),通知NN節點寫入成功。
思考1:
當一個檔案有三個副本,三個節點,某刻損壞一個節點,此時檔案還能寫麼?
答:不能。副本數=節點數,故我們在部署的時候:副本資料<DN。
總結: 存活的DN滿足我們的副本數 就能寫
類比只有一個節點的時候,該節點掛掉,是不能寫的。
實驗: 類同當只有一個節點的時候,該節點掛掉,還可以寫麼?
1.jps
2.kill -9  datanode程式
3. hdfs dfs - put  LICENSE.txt  /ruozedata

結論:是不能寫的
思考2:
一個檔案有三個備份,放在三個節點 ,此時損壞一個幾點,該檔案是否還能讀?
答:是可以讀的,寫不是不能寫的
此時該怎麼辦?
1.手動修復
hdfs debug recoverlease  / a.txt 手工恢復這些壞塊(依據其他副本來修復)
2.自動修復
配置兩個引數
dfs.datanode.
實驗:
模擬塊損壞:
1.可以刪除目錄下的塊(mv 到其他位置。模擬損壞)
2.hdfs fsck /  #檢測塊

3.修復塊

三、hdfs讀流程

圖解說明:
FSDataIutputStream
1.Client透過FileSystem.open(filePath),
去與NN進行【RPC】通訊,返回該檔案的部分
或全部的block列表,也就是返回FSDataInputStream物件。
2.Client呼叫【FSDataInputStream】物件的read()方法,
a. 去與第一個塊的最近的DN進行read,讀取完後,會check,
假如success,會關閉與當前DN通訊。假如fail 會記錄失敗的DN+block資訊,下次就不會讀取。
那麼會去該塊的第二個DN的地址讀取。
b.然後去第二個塊的最近的DN上讀取,會check,success,會關閉與當前DN通訊。
c.假如當前block列表全部讀取完成,檔案還沒結束,那麼FileSystem會從NN獲取下一批的block列表。
(對於操作者,是透明的,感覺就是連續的資料流)
3.Client呼叫FSDataInputStream.close() 關閉輸入流
四、副本放置策略:
思考:為何一個機櫃放5個伺服器?
答:機櫃總電流大小/每個伺服器電流大小=伺服器個數

總結:client橘黃色部分是命令列,提交應該響應速度快,故第一個副本放置在“本地”,其他副本放置在別的機櫃。2,3個副本不應該放置在同一伺服器中, 叢集環境隨機放置副本。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28339956/viewspace-2636696/,如需轉載,請註明出處,否則將追究法律責任。

相關文章