2012-12-07 74 views
1

當JobTracker將映射任務分配給TaskTracker時,是否需要與NameNode進行通信?或者它可以從InputSplit本身獲取信息? 當我查看代碼時,我看到InputSplits與BlockLocations打包在一起。 JobTracker會使用這些信息還是需要使用Namenode?Hadoop - 文件到塊映射

回答

0

客戶端計算拆分信息並將它們與拆分信息一起寫入HDFS。

您可以看看Hadoop 1.x JobSplit.SplitMetaInfo有序列化實現,也序列化的位置。

jobtracker只是選擇這些序列化並對它們進行調度,其中位置只是提示如果插槽可用時更快執行的提示。

+0

謝謝托馬斯。所以,這只是一個提示?讓我們看看這個場景。比方說,JobTracker識別要運行的數據是否位於TaskTracker的本地驅動器上,是否會通知TaskTracker?或者TaskTracker會聯繫NameNode來識別這個? – Suresh

+0

沒有這樣的交流。 Jobtracker內部的調度程序將查看「SplitMetaInfo」,如果該位置有可用的槽,它將向tasktracker發送指令以運行具有該輸入的任務。 –

+0

如果數據在機器中沒有(無DataLocal),它的責任是找到數據所在的機器? TaskTracker是否需要與NameNode對話,還是可以使用元數據(包含塊位置)並直接與其他機器通信? – Suresh

0

JobTracker確實聯繫NameNode以獲取塊位置。如果作業處理的塊數量非常大,此過程可能會花費一些時間。

+0

謝謝唐納德。我的困惑與Job Tracker爲什麼要做到這一點有關,因爲InputSplit確實具有關於可以從中獲取數據的可能位置和主機的元數據。謝謝。 – Suresh

+0

InputSplit實際上並不知道。它需要去NameNode找出。 –