Hadoop 學習筆記(一) 緩存
最近在學習Hadoop分佈式系統,在這裏與你們分享一下:什麼是Hadoop分佈式系統? 服務器
從命名名稱上看,首先能夠認爲他是一個工具,可能有人認爲是廢話,可是這個理念對我來講很重要,由於他是我認真學習下去的一個重要的理由,既然是工具我相信就能把他掌握。MapReduce工做原理(如圖) 架構
MapReduce的工做原理大體分爲以下4個階段:
客戶端:提交MapReduce做業。
Jobtracker:協調做業程序。Jobtracker是一個Java程序,他的主類是JobTracker.
Tasktracker:運行做業分配後的任務,他也是一個Java應用程序,他的主類是TaskTracker.
分佈式文件系統:通常爲HDFS,用來實現實體間的共享做業文件。
做業提交
JobClient的RunJob()方法用於建立JobClient實例,並調用submitJob()方法的便捷方式,調用runJob()方法對做業進行輪詢,若是發現做業有變化,他自動將做業提交到控制檯。若是提交成功他會把做業計數提交到控制檯,若是失敗的話他會將錯誤記錄提交到控制檯。
做業初始化
當JobTracker經過調用其submitJob()獲得做業後,會放進內部的做業隊列當中,交由做業調度器(job scheduler)進行調度,並對其進行初始化。初始化包括,建立一個正在運行的業務對象,任務和記錄,這樣就方便程序跟蹤任務的運行狀態和進程。
做業的分配
tasktarcker運行一個簡單的循環,按期發送‘心跳’給JobTracker,他會告訴JobTracker,tasktracker是否還活着,同時也充當二者之間溝通的橋樑。
任務執行
tasktracker已經被分配了一個任務,下一步就是運行了,首先,他會經過共享文件系統把做業Jar文件複製到tasktracker所在的文件系統,從而實現做業的JAR文件的本地化,tasktracker,將應用程序,從分佈式緩存複製到本地磁盤中並進行解壓,而後建立任務實例,並運行。
進度和狀態
MapReduce做業是常時間批量做業,運行時間從幾秒到幾小時甚至更長,這麼長的時間用戶確定須要掌握做業的進展狀況,一個做業和他的每一個任務都有一個狀態,包括做業或任務的狀態如:運行狀態,成功狀態,失敗狀態,map和reduce的進度,做業計數器的值,狀態消息,或描述等等。這些狀態都是隨着做業時間的改變而不斷變化。
做業完成
當JobTracker收到做業最後一個任務已經完成的通知後,便把做業狀態改成成功,而後JobClient查詢狀態時,便知道執行的任務已經執行成功了。因而JobClient端會打印給客戶消息告知客戶,而後從runJob()方法返回。
併發