1. 程式人生 > >hadoop隨手筆記(3)

hadoop隨手筆記(3)

(1)FairScheduler排程器

當只有一個job在叢集中執行時,這個job可以使用整個叢集的資源,但是當有其他的jobs提交到叢集上的時候,那麼在有其他的jobs提交到叢集上的時候,那麼在那個時刻空閒的記憶體slot就可以被分配給心提交上來的jobs,所以在一定時間內,每個job都得到了比較平均的cpu使用時間。

(2)TaskTracker的數量和DataNode的數量相同,TaskTracker會定期向JobTracker傳送心跳,從而將自己執行的Task的最新狀態通知給JobTracker,同時也接收JobTracker返回的指令,從而執行進一步的操作。TaskTracker不僅要和JobTracker通訊,也會與其他的TaskTracker進行通訊,比如執行Reducer任務的TaskTracker會通過HTTP協議和執行完的mapper任務的TaskTracker進行通訊來獲得mapper任務的輸出。

(3)MapTask產生的部分輸出會儲存到一個記憶體buffer中,這個buffer預設的大小為100M,它所對應的配置項為io.sort.mb,可以在提交job的時候修改這個配置項的值,當資料量很大的時候我們可以將這個值調大來減少將資料spill寫入到磁碟的次數,從而減少了MapTask與磁碟的互動次數,如果MapTask的效能瓶頸在磁碟上,這樣可以大大提高MapTask的處理效能。當快取中儲存的值達到設定的值是,MapTask會單獨啟動一個執行緒將記憶體的buffer寫到磁碟上,形成單獨的一個spill檔案,但是在寫入磁碟如果buffer被填滿,那麼MapTask將會被堵塞。在MapTask正常退出之前,這些spill檔案會合併成一個已經分割槽而且已經排好序的更大的輸出檔案,其中Combine過程是對MapTask輸出的結果進行合併從而減少輸出資料所佔的磁碟空間,可以降低Mapper輸出資料傳遞給Reduce時的網路開銷。


(4)ReduceTask執行過程


當job中的第一個Mapper任務執行完成後,所有的Reduce任務就會被啟動,然後嘗試從Mapper的輸出中獲取自己需要的那部分資料,就是Copy過程,也就是shuffle過程,由於Mapp而任務會很多,所以會使用並行的執行緒來完成資料的copy,預設情況是5.將資料從Mappe熱點主機copy到Reduce的本地或者記憶體當中,預設情況下reduce回直接開始從磁碟讀取資料。

(5)在hadoop中Eileen方便叢集中各個元件之間的通訊,採用了RPC通訊協議,考慮到通訊效率以及自身的負載情況,在內部實現了一個基於IPC模型的RPC,IPC模型中所有方法要求引數和返回值必須是java的基本型別。