hadoop臨時文件 jar包_hadoop之Mapper/reducer源碼分析之二

若當前JobClient (0.22 hadoop) 運行在YARN.則job提交任務運行在YARNRunner

Hadoop Yarn 框架原理及運作機制

26ba9d71df83d83ed2c6e0e560d63518.png

主要步驟

  • 作業提交
  • 作業初始化
  • 資源申請與任務分配
  • 任務執行

具體步驟

在運行作業之前,Resource Manager和Node Manager都已經啟動,所以在上圖中,Resource Manager進程和Node Manager進程不需要啟動

  • 1. 客戶端進程通過runJob(實際中一般使用waitForCompletion提交作業)在客戶端提交Map Reduce作業(在Yarn中,作業一般稱為Application應用程序)
  • 2. 客戶端向Resource Manager申請應用程序ID(application id),作為本次作業的唯一標識
  • 3. 客戶端程序將作業相關的文件(通常是指作業本身的jar包以及這個jar包依賴的第三方的jar),保存到HDFS上。也就是說Yarn based MR通過HDFS共享程序的jar包,供Task進程讀取
  • 4. 客戶端通過runJob向ResourceManager提交應用程序
  • 5.a/5.b. Resource Manager收到來自客戶端的提交作業請求后,將請求轉發給作業調度組件(Scheduler),Scheduler分配一個Container,然后Resource Manager在這個Container中啟動Application Master進程,并交由Node Manager對Application Master進程進行管理
  • 6. Application Master初始化作業(應用程序),初始化動作包括創建監聽對象以監聽作業的執行情況,包括監聽任務匯報的任務執行進度以及是否完成(不同的計算框架為集成到YARN資源調度框架中,都要提供不同的ApplicationMaster,比如Spark、Storm框架為了運行在Yarn之上,它們都提供了ApplicationMaster)
  • 7. Application Master根據作業代碼中指定的數據地址(數據源一般來自HDFS)進行數據分片,以確定Mapper任務數,具體每個Mapper任務發往哪個計算節點,Hadoop會考慮數據本地性,本地數據本地性、本機架數據本地性以及最后跨機架數據本地性)。同時還會計算Reduce任務數,Reduce任務數是在程序代碼中指定的,通過job.setNumReduceTask顯式指定的
  • 8.如下幾點是Application Master向Resource Manager申請資源的細節
  • 8.1 Application Master根據數據分片確定的Mapper任務數以及Reducer任務數向Resource Manager申請計算資源(計算資源主要指的是內存和CPU,在Hadoop Yarn中,使用Container這個概念來描述計算單位,即計算資源是以Container為單位的,一個Container包含一定數量的內存和CPU內核數)。
  • 8.2 Application Master是通過向Resource Manager發送Heart Beat心跳包進行資源申請的,申請時,請求中還會攜帶任務的數據本地性等信息,使得Resource Manager在分配資源時,不同的Task能夠分配到的計算資源盡可能滿足數據本地性
  • 8.3 Application Master向Resource Manager資源申請時,還會攜帶內存數量信息,默認情況下,Map任務和Reduce任務都會分陪1G內存,這個值是可以通過參數mapreduce.map.memory.mb and mapreduce.reduce.memory.mb進行修改。

5. YARNRunner

@Override public JobStatus submitJob(JobID jobId, String jobSubmitDir, Credentials ts) throws IOException, InterruptedException {  addHistoryToken(ts);  // Construct necessary information to start the MR AM ApplicationSubmissionContext appContext = createApplicationSubmissionContext(conf, jobSubmitDir, ts); // Submit to ResourceManager try { ApplicationId applicationId = resMgrDelegate.submitApplication(appContext); ApplicationReport appMaster = resMgrDelegate .getApplicationReport(applicationId); String diagnostics = (appMaster == null ? "application report is null" : appMaster.getDiagnostics()); if (appMaster == null || appMaster.getYarnApplicationState() == YarnApplicationState.FAILED || appMaster.getYarnApplicationState() == YarnApplicationState.KILLED) { throw new IOException("Failed to run job : " + diagnostics); } return clientCache.getClient(jobId).getJobStatus(jobId); } catch (YarnException e) { throw new IOException(e); } }

調用YarnClient的submitApplication()方法,其實現如下: 

6. YarnClientImpl

@Override public ApplicationId submitApplication(ApplicationSubmissionContext appContext) throws YarnException, IOException { ApplicationId applicationId = appContext.getApplicationId(); if (applicationId == null) { throw new ApplicationIdNotProvidedException( "ApplicationId is not provided in ApplicationSubmissionContext"); } SubmitApplicationRequest request = Records.newRecord(SubmitApplicationRequest.class); request.setApplicationSubmissionContext(appContext); // Automatically add the timeline DT into the CLC // Only when the security and the timeline service are both enabled if (isSecurityEnabled() && timelineServiceEnabled) { addTimelineDelegationToken(appContext.getAMContainerSpec()); } //TODO: YARN-1763:Handle RM failovers during the submitApplication call. rmClient.submitApplication(request); int pollCount = 0; long startTime = System.currentTimeMillis(); EnumSet waitingStates =  EnumSet.of(YarnApplicationState.NEW, YarnApplicationState.NEW_SAVING, YarnApplicationState.SUBMITTED); EnumSet failToSubmitStates =  EnumSet.of(YarnApplicationState.FAILED, YarnApplicationState.KILLED);  while (true) { try { ApplicationReport appReport = getApplicationReport(applicationId); YarnApplicationState state = appReport.getYarnApplicationState(); if (!waitingStates.contains(state)) { if(failToSubmitStates.contains(state)) { throw new YarnException("Failed to submit " + applicationId +  " to YARN : " + appReport.getDiagnostics()); } LOG.info("Submitted application " + applicationId); break; } long elapsedMillis = System.currentTimeMillis() - startTime; if (enforceAsyncAPITimeout() && elapsedMillis >= asyncApiPollTimeoutMillis) { throw new YarnException("Timed out while waiting for application " + applicationId + " to be submitted successfully"); } // Notify the client through the log every 10 poll, in case the client // is blocked here too long. if (++pollCount % 10 == 0) { LOG.info("Application submission is not finished, " + "submitted application " + applicationId + " is still in " + state); } try { Thread.sleep(submitPollIntervalMillis); } catch (InterruptedException ie) { LOG.error("Interrupted while waiting for application " + applicationId + " to be successfully submitted."); } } catch (ApplicationNotFoundException ex) { // FailOver or RM restart happens before RMStateStore saves // ApplicationState LOG.info("Re-submit application " + applicationId + "with the " + "same ApplicationSubmissionContext"); rmClient.submitApplication(request); } } return applicationId; }

7. ClientRMService

ClientRMService是resource manager的客戶端接口。這個模塊處理從客戶端到resource mananger的rpc接口。

@Override public SubmitApplicationResponse submitApplication( SubmitApplicationRequest request) throws YarnException { ApplicationSubmissionContext submissionContext = request .getApplicationSubmissionContext(); ApplicationId applicationId = submissionContext.getApplicationId(); // ApplicationSubmissionContext needs to be validated for safety - only // those fields that are independent of the RM's configuration will be // checked here, those that are dependent on RM configuration are validated // in RMAppManager. String user = null; try { // Safety user = UserGroupInformation.getCurrentUser().getShortUserName(); } catch (IOException ie) { LOG.warn("Unable to get the current user.

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/538839.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/538839.shtml
英文地址,請注明出處:http://en.pswp.cn/news/538839.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ANDROID:SHOWASACTION="NEVER"是做什么用的?

原文地址:http://www.cnblogs.com/android-joker/p/4478491.html 點擊閱讀原文 --------------------------------------------------------- 安卓開發項目文件中有一個目錄叫做menu,里面有tybmain.xml item選項里有一句 android:showAsAction "…

吳恩達ex3_Wu-Enda機器學習編程作業Python實現EX3,吳恩達,machinelearning,python,ex3nn

# -*- coding: utf-8 -*-"""Created on Wed Jul 1 20:28:57 2020author: cheetah023"""import numpy as npimport matplotlib.pyplot as pltimport scipy.io as sciimport random as ra#函數定義def sigmoid(X):return 1 /(1 np.exp(-X))def pr…

php數組驗證用戶名密碼,求個php數組驗證問題,在線等

現在有這么一個數組,是屬性表Array([0] > Array([list_attr_id] > 30[list_attr_name] > 顏色[list_attr_attr] > 黑色|白色|金色[list_attr_price] > 0|10.1|20[list_attr_shop_id] > 28)[1] > Array([list_attr_id] > 31[list_attr_name] > 規格[…

基于python的視頻監控系統_Python實現微信監控報警系統

概述: 本文主要分享一下博主在學習wxpy 的過程中開發的一個小程序。博主在最近有一個監控報警的需求需要完成,然后剛好在學習wxpy 這個東西,因此很巧妙的將工作和學習聯系在一起。 博文中主要使用到的技術設計到Python,Redis,以及…

python 編碼文件json.loads json.dumps

python 編碼文件json.loads json.dumps import yaml d {name: 張三, age: 1} print d jd json.dumps(d, ensure_asciiFalse, encodingutf-8)) ud json.loads(jd, encodingutf-8) print ud ud yaml.safe_load(jd, encodingutf-8) print udposted on 2018-04-23 15:18 秦瑞It…

getActionBar()報空指針異常

調用 getActionBar()的Activity類 public class WlanListActivity extends AppCompatActivity 在使用getActionBar("標題內容")的時候報空指針。 原因是要用AppCompatActivity類里的getSupportActionBar()

python 類中定義列表_Python3中的自定義列表類,具有

我想用python3編寫一個自定義列表類,就像在這個問題How would I create a custom list class in python?中一樣,但與該問題不同,我想實現__get__和{}方法。雖然我的類與list類似,但是這些方法背后隱藏著一些神奇的操作。所以我想…

紅黑樹與平衡二叉樹_百圖詳解紅黑樹,想不理解都難

之前在公司組內分享了紅黑樹的工作原理,今天把它整理下發出來,希望能對大家有所幫助,對自己也算是一個知識點的總結。這篇文章算是我寫博客寫公眾號以來畫圖最多的一篇文章了,沒有之一,我希望盡可能多地用圖片來形象地…

linux 父子進程結束,Linux下讓父進程結束后,子進程自動結束

在多進程編程的時候,經常會遇到這樣的情況。父進程創建了一堆子進程,當遇到錯誤或者操作失誤的時候把父進程關閉了,但是子進程還在跑,不得不一個一個地殺死子進程,或者使用ps,grep,awk,kill來配合批量殺死。之前在寫 x…

android:showAsAction 無效

我想要的效果 但actionbar上的搜索菜單不顯示 在androidstudio里,android:showAsAction"always"標紅 根據提示,需要加入 xmlns:app"http://schemas.android.com/apk/res-auto" 加入后依然無效 正確的加入方式是:

Exchange_Server_2013在Windows_2008_R2部署

Exchange Server 2013可以部署在Windows Server 2012的平臺,也可以部署在Windows Server 2008 R2的平臺。如果部署在Windows Server 2008 R2平臺要求操作系統版本為Windows Server 2008 R2 SP1的版本。如下拓撲圖:在本架構中有兩臺服務器,都安…

建立副本名稱沖突_包的建立(一)

這次的內容,涉及到 R 語言包的建立。事實上,CRAN 提供的官方參考指南,并不適合快速閱讀,且內容繁雜。比較適合作為后期提高的 教材。而 http://r-pkgs.had.co.nz/ 上 的教程則更適合作為 R 包編寫的幫助指南。這里,僅僅…

Android 多選列表

原文&#xff1a;http://blog.csdn.net/wljun739/article/details/37655209 點擊閱讀原文 ----------------------------------------------------------- 1、activity_main.xml[java] view plaincopy<LinearLayout xmlns:android"http://schemas.android.com/apk/res/…

python自帶的編輯器怎么換行_Python3基礎 print 自帶換行功能

鎮場詩&#xff1a; ———大夢誰覺&#xff0c;水月中建博客。百千磨難&#xff0c;才知世事無常。 ———今持佛語&#xff0c;技術無量愿學。愿盡所學&#xff0c;鑄一良心博客。 —————————————————————————————————————————— 1 …

查看db2數據庫名linux,【名說】DB2數據庫備份與恢復(linux環境)

lslinux 下備份db2數據庫1.SSH方式&#xff1a;登錄db2數據庫(因為是linux環境 &#xff0c; putty就不錯)2.進入備份文件夾&#xff1a;cd /home/backup/db2 list application | grep 數據庫名//(可能會有一些連接進程&#xff0c;有則全部殺掉)//殺進程&#xff1a;db2 "…

leetcode 回文數

2019獨角獸企業重金招聘Python工程師標準>>> 判斷一個整數是否是回文數。回文數是指正序&#xff08;從左向右&#xff09;和倒序&#xff08;從右向左&#xff09;讀都是一樣的整數。 示例 1: 輸入: 121 輸出: true 示例 2: 輸入: -121 輸出: false 解釋: 從左向右…

安裝ae顯示安裝程序無法初始化_adobe CC 2015/2017安裝失敗(adobe cc安裝不了的解決辦法)...

adobe CC 2015/2017安裝失敗(adobe cc安裝不了的解決辦法)書法字體2015.06.18Adobe Application ManagerAdobe Creative Cloud 2015/2017全系統軟件已經可以從官網下載了&#xff0c;相信又將有一大波設計師會更新安裝adobe CC 2015/2017軟件。本著嘗鮮的精神&#xff0c;本人也…

Hadoop控制輸出文件命名

原文地址&#xff1a;http://blog.csdn.net/zuochanxiaoheshang/article/details/8769198 點擊閱讀原文 --------------------------------------------------- Hadoop 控制輸出文件命名 在一般情況下&#xff0c;Hadoop 每一個 Reducer 產生一個輸出文件&#xff0c;文件以 …

office高級應用與python綜合案例教程_office高級應用與python綜合案例實驗指導--詳細介紹...

隨著社會經濟的發展&#xff0c;現代信息技術逐漸改變著人們的工作和生活方式。為使學生掌握辦公自動化軟件高級應用的技能&#xff0c;了解Python程序基礎知識&#xff0c;綜合運用辦公自動化軟件分析和解決實際問題&#xff0c;編者編寫了本書。 本書圍繞高等學校培養應用型人…

linux系統的安全機制有哪些內容,系統安全機制

AG351.SELINUXSElinux 是一個強制訪問控制系統,它為每個進程與文件都打上一個安全上下文標簽,而 selinux 通過這個標簽對系統訪問控制進行管理。2.針對車載產品對于啟動安全、平臺運行安全、通信安全三個主要領域有著特 殊 很 高 的 要 求 , 為 此 Quectel 結 合 了 Qualcomm 給…