2017-01-28 66 views
1

我只是想更多地瞭解下面的語句。當我試圖瞭解how the HDFS writes happens to Data nodes。我得到了關於HDFS寫入的下面的解釋。將文件複製到DataNode時,Hadoop HDFS中的數據流管道

爲什麼hdfs客戶端向數據節點發送4kb而不是將整個塊64MB發送到數據節點?可以詳細解釋一下嗎?

爲了獲得更好的性能,數據節點爲數據傳輸維護一條管道。數據節點1無需等待完整的數據塊到達,然後才能開始傳輸到流中的數據節點2。實際上,給定塊的從客戶端到數據節點1的數據傳輸發生在4KB的較小塊中。當數據節點1從客戶端接收到第一個4KB塊時,它將該塊存儲在其本地存儲庫中,並立即開始將其傳送到流中的數據節點2。同樣,當數據節點2接收來自數據節點1的第一個4KB塊時,它將該塊存儲在其本地存儲庫中,並立即開始將其傳送到數據節點3.這樣,流中除最後一個之外的所有數據節點都從並將其轉移到流中的下一個數據節點,以避免每個階段的等待時間,從而提高寫入性能。

+0

可以添加您發佈的內容的來源? – mrsrinivas

+0

http://www.informit.com/articles/article.aspx?p=2460260&seqNum=2。 –

回答

3

你的問題有答案。

在這幅圖中,我們假設文件大小等於塊大小(128 MB)。所以**A, B, C .. are the chunks in block**

Data Flow Pipeline https://i.stack.imgur.com/REO6r.jpg

當數據節點1從客戶端接收所述第一4KB(A)塊,它 存儲該塊在其本地存儲庫,並立即開始 其傳送到數據節點2在流程中。同樣,當數據節點2 接收來自數據節點1第一4KB塊,它在其 本地資源庫中存儲該塊,並立即開始將其傳送到數據節點3

這裏的優點是數據節點2和3不必等到128 MB數據複製到數據節點1後再開始複製。所以,延遲,因爲複製將只是一個或2個卡盤的複製時間,因爲所有塊都並行複製到節點

+1

謝謝你讓我更好理解。 –

1

在Hadoop中,通常文件的大小很大,因此它們被配置爲在收到數據的一部分後立即傳輸數據,以便它們可以開始處理它。

讓我們用一個例子來討論它,假設有3個數據節點和一個地圖作業要執行。輸入文件所在的數據或塊位於節點1中,並且其複製位於節點2中(我們假設複製因子爲2)。但由於某種原因,或者可能是其他作業正在節點1和節點2上運行,因此它們很忙,因此現在需要在節點3上執行地圖作業,該節點沒有我們想要執行的輸入文件映射因此該輸入文件現在需要傳輸到該節點3.現在,如果節點管理器在啓動地圖作業之前等待可能有64MB的全部數據傳輸到節點3,那麼它肯定會有更多的頭部,然後傳輸4kb。由於4kb將更快地傳輸,並且一旦節點3將接收到它。它會啓動地圖作業。現在這是Hadoop的一個簡單場景。

如果您將研究Hadoop流式數據需要連續流式傳輸,那就是爲什麼4kB數據在各個數據節點之間傳輸以保持傳輸短而快速,這也是火花流式傳輸更受歡迎的主要原因之一通過Hadoop流式傳輸,因爲Hadoop不傳輸連續數據,它傳輸的數據非常小,看起來像是連續的。

如果您想了解節點管理器如何啓動任何工作,您可以訪問http://javacrunch.in/Yarn.jsp

希望這解決您的查詢。