我有一個數據科學背景,所以我使用Hadoop的目標是將大量數據存儲在HDFS
中,並使用羣集執行一些(並行)分析(例如某些機器學習算法)部分這些數據集。爲了更具體些,請考慮以下情況:對於存儲在HDFS
中的一些大型數據集,我想對此數據集的100個隨機樣本運行一個簡單的算法併合並這些結果。Tasktracker如何獲得必要的數據
正如我所理解的那樣,爲了達到這個目的,我可以編寫一個Map
函數,告訴我的羣集節點上的Tasktrackers
對部分數據執行分析。此外,我應該寫一個Reduce
函數來「結合」結果。
現在爲技術方面;據我瞭解,我的羣集中的每臺機器都包含一個DataNode
和一個TaskTracker
。我想象某臺機器上的TaskTracker
可能需要數據進行計算,而這在該特定機器上的DataNode
上不存在。所以出現的主要問題是:TaskTracker
如何獲得其所需的數據?它是否將其鄰居DataNode
上的數據與來自其他DataNodes
的數據結合起來,還是將它的鄰居DataNode
與其他所有DataNodes
一樣視爲在集羣中?所有需要的數據首先轉移到TaskTracker
?
請大家澄清一下這些問題,因爲它可以幫助我理解Hadoop的基本原理。我應該完全誤解了Hadoop的工作流程,請讓我知道,因爲它也會幫助我很多。
的確想引用'DataNode'。 答案是非常有幫助的。簡而言之:如果某個'TaskTracker'需要,將所需數據移至相應的'DataNode',對吧? – BDP1
請檢查鏈接,它會給你關於流量的想法。 –
通常,根據輸入分割的數量,映射器的數量會產生,因此,映射任務被賦予tasktracker,該tasktracker將特定塊作爲其本地塊,如果數據不存在,那麼它將被傳送。 –