2015-12-15 48 views
1

我有一個數據科學背景,所以我使用Hadoop的目標是將大量數據存儲在HDFS中,並使用羣集執行一些(並行)分析(例如某些機器學習算法)部分這些數據集。爲了更具體些,請考慮以下情況:對於存儲在HDFS中的一些大型數據集,我想對此數據集的100個隨機樣本運行一個簡單的算法併合並這些結果。Tasktracker如何獲得必要的數據

正如我所理解的那樣,爲了達到這個目的,我可以編寫一個Map函數,告訴我的羣集節點上的Tasktrackers對部分數據執行分析。此外,我應該寫一個Reduce函數來「結合」結果。

現在爲技術方面;據我瞭解,我的羣集中的每臺機器都包含一個DataNode和一個TaskTracker。我想象某臺機器上的TaskTracker可能需要數據進行計算,而這在該特定機器上的DataNode上不存在。所以出現的主要問題是:TaskTracker如何獲得其所需的數據?它是否將其鄰居DataNode上的數據與來自其他DataNodes的數據結合起來,還是將它的鄰居DataNode與其他所有DataNodes一樣視爲在集羣中?所有需要的數據首先轉移到TaskTracker

請大家澄清一下這些問題,因爲它可以幫助我理解Hadoop的基本原理。我應該完全誤解了Hadoop的工作流程,請讓我知道,因爲它也會幫助我很多。

回答

1

如果DataNode上不存在數據,那麼按照hadoop它可以詢問NameNode,它將獲得保存數據塊的節點列表,並且DataNode將從各個DataNode複製該數據。

請查看鏈接和圖像,以幫助您理解HDFS和Hadoop系統中的流程。

hadoop-flow

下面的鏈接是有流量的很好的解釋。 我希望這會有所幫助。

https://drive.google.com/file/d/0B-zw6KHOtbT4MmRkZWJjYzEtYjI3Ni00NTFjLWE0OGItYTU5OGMxYjc0N2M1/view?pli=1

+0

的確想引用'DataNode'。 答案是非常有幫助的。簡而言之:如果某個'TaskTracker'需要,將所需數據移至相應的'DataNode',對吧? – BDP1

+0

請檢查鏈接,它會給你關於流量的想法。 –

+0

通常,根據輸入分割的數量,映射器的數量會產生,因此,映射任務被賦予tasktracker,該tasktracker將特定塊作爲其本地塊,如果數據不存在,那麼它將被傳送。 –