hadoop中的一些重要知識點

2021-09-01 12:50:00 字數 2776 閱讀 1473

2、resourcemanger(rm)為該程式分配第乙個container,並與對應的nodemanger通訊,要求它在這個container中啟動應用程式am。

3、am首先向rm註冊,這樣使用者可以直接通過rm檢視應用程式的執行狀態,然後將為各個任務申請資源,並監控它的執行狀態,直到執行結束,重複4--7的步驟。

4、am採用輪詢的方式通過rpc協議向rm申請和領取資源。

5、一旦am申請到資源後,便與對應的nm通訊,要求它啟動任務。

6、nm為任務設定好執行環境(包括環境變數、jar包、二進位制程式等)後,將任務啟動命令寫到乙個指令碼中,並通過執行該指令碼啟動任務。

7、各個任務通過某個rpc協議向am匯報自己的狀態和進度,以讓am隨時掌握各個任務的執行狀態,從而可以在任務失敗的時候重新啟動任務。

8、應用程式執行完成後,am向rm登出並關閉自己。

(1)作業提交

第 0 步:client 呼叫 job.waitforcompletion 方法,向整個集群提交 mapreduce 作業。

第 1 步:client 向 rm 申請乙個作業 id。

第 2 步:rm 給 client 返回該 job 資源的提交路徑和作業 id。

第 3 步:client 提交 jar 包、切片資訊和配置檔案到指定的資源提交路徑。

(2)作業初始化

第 5 步:當 rm 收到 client 的請求後,將該 job 新增到容量排程器中。

第 6 步:某乙個空閒的 nm 領取到該 job。

(3)任務分配

第 10 步 :rm 將執行 maptask 任務分配給另外兩個 nodemanager,另兩個 nodemanager

分別領取任務並建立容器。

(4)任務執行

第 11 步:mr 向兩個接收到任務的 nodemanager 傳送程式啟動指令碼,這兩個nodemanager 分別啟動 maptask,maptask 對資料分割槽排序。

第 13 步:reduce task 向 maptask 獲取相應分割槽的資料。

第 14 步:程式執行完畢後,mr 會向 rm 申請登出自己。

(5)進度和狀態更新

yarn 中的任務將其進度和狀態(包括 counter)返回給應用管理器, 客戶端每秒(通過

mapreduce.client.progressmonitor.pollinterval 設定)向應用管理器請求進度更新, 展示給使用者。

(6)作業完成

除了向應用管理器請求作業進度外, 客戶端每 5 分鐘都會通過呼叫 waitforcompletion()

來檢查作業是否完成。時間間隔可以通過 mapreduce.client.completion.pollinterval 來設定。作

業完成之後, 應用管理器和 container 會清理工作狀態。作業的資訊會被作業歷史伺服器儲存

以備之後使用者核查。

####resourcemanager包括兩個元件:

####1、排程器:負責排程任務執行的順序,僅是排程的作用,不參與任何任務的執行

(1)fifo先進先出排程器:先來的任務先執行,只有乙個佇列

(2)capacity容量(計算能力)排程器:有多個佇列,為每個佇列分配不同的資源,每個佇列遵循fifo(hadoop 2中預設的排程模型)

(3)fair公平排程器:所有任務平分共享資源

12)之後會啟動乙個yarnchild程序用於執行maptask程式

14)啟動相應的maptask任務

16)資源**和銷毀

####一、map端的shuffle

map端會處理輸入資料並產生中間結果,這個中間結果會寫到本地磁碟,而不是hdfs。每個map的輸出會先寫到記憶體緩衝區中,當寫入的資料達到設定的閾值時,系統將會啟動乙個執行緒將緩衝區的資料寫到磁碟,這個過程叫做spill。

在spill寫入之前,會先進行二次排序,首先根據資料所屬的partition進行排序,然後每個partition中的資料再按key來排序。partition的目是將記錄劃分到不同的reducer上去,以期望能夠達到負載均衡,以後的reducer就會根據partition來讀取自己對應的資料。接著執行combiner(如果設定了的話),combiner的本質也是乙個reducer,其目的是對將要寫入到磁碟上的檔案先進行一次處理,這樣,寫入到磁碟的資料量就會減少。最後將資料寫到本地磁碟產生spill檔案(spill檔案儲存在指定的目錄中,map任務結束後就會被刪除)。

最後,每個map任務可能產生多個spill檔案,在每個map任務完成前,會通過多路歸併演算法將這些spill檔案歸併成乙個檔案。至此,map的shuffle過程就結束了。

####二、reduce端的shuffle

reduce端的shuffle主要包括三個階段,copy、sort(merge)和reduce。

首先要將map端產生的輸出檔案拷貝到reduce端,但每個reducer如何知道自己應該處理哪些資料呢?因為map端進行partition的時候,實際上就相當於指定了每個reducer要處理的資料(partition就對應了reducer),所以reducer在拷貝資料的時候只需拷貝與自己對應的partition中的資料即可。每個reducer會處理乙個或者多個partition,但需要先將自己對應的partition中的資料從每個map的輸出結果中拷貝過來。

接下來就是sort階段,也成為merge階段,因為這個階段的主要工作是執行了歸併排序。從map端拷貝到reduce端的資料都是有序的,所以很適合歸併排序。最終在reduce端生成乙個較大的檔案作為reduce的輸入。

最後就是reduce過程了,在這個過程中產生了最終的輸出結果,並將其寫到hdfs上。

個人總結:

一些知識點

字串拼接 1.a join b a為元素之間的分隔符,b為待分割的序列 可用於輸出時的資料處理,元素間有空格,末尾沒有 2 s s s str1,str2,str3 前半部分為字串,後半部分為索引。用於引入,s是物件 3.format str1,str2,str3 與f 括號裡為已有變數 關於for...

一些知識點

1.vector是在堆上還是棧上?在堆上.2.我們發現指標有一些 似是而非 的特徵 1 指標消亡了,並不表示它所指的記憶體會被自動釋放。比如函式中的指標是區域性變數,如果它指向了堆上,而自己出了函式後消亡了,但它所指向的記憶體還是存在的,導致了記憶體洩漏.2 記憶體被釋放了,並不表示指標會消亡或者成...

一些知識點

1 sln 解決方案檔案 csproj 專案檔案 cs 原始檔 解決方案包含多個專案,每個專案都是乙個程式。config 配置檔案 3 const int a 1 const 定義乙個量為常量,運算中用到當常量使用,不可以再重新賦值。4 型別轉換。1 隱式轉換。從值型別轉換成引用型別。從引用型別轉換...