MapReduce源代码研究1
来源:互联网 发布:淘宝充值平台官网 编辑:程序博客网 时间:2024/04/29 02:05
今天自己研究hadoop MapReduce 代码,写出来方面以后查阅吧。我研究源代码从main()方法的waitForCompletion()开始研究。
waitForCompletion()主要作用是Submit the job to the cluster and wait for it to finish.job的运行状态有如下几种方式:
- NEW
- INITED,
- RUNNING,
- SUCCEEDED,
- FAILED,
- KILLED,
- ERROR
判断完job状态后将提交任务给集群。 submit()负责提交任务给集群,我们主要详细分析submit()方法实现过程。
- 判断job状态;
- 使用新的API兼容前面的MapReduce API;
- 链接集群 使用connect()方法;
- 生成一个submitter对象,负责提交job任务;
- 调用submitter的内部方法submitJobInternal提交任务;
- 调用submitter的内部方法submitJobInternal提交任务;
- submitJobInternal主要实现了如下功能:
- 检查输入输出规格;
- 计算输入分块信息;
- 设置分发任务的用户信息;
- 拷贝job的jar、配置信息到mapreduce的目录(在hdfs上面);
- 提交任务给job 给jobtracker并监控他们的状态;
- 提交任务是使用的submitClient,中的submitJob,需要三个参数:jobiD,submitJobDir,Credentials(安全认证方法);调用YARNRunner类下的submitJob()函数,提交Job,传出相应的所需参数(例如 JobID等)。
- ClientProtocol 是客户端与jobtracker的通信协议;
- 提交任务完成
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); } }
- 设置必要的配置信息,初始化Application上下文信息,其中上下文信息中包括MRAppMaster所需要的资源,执行MRAppMaster的命令得等。
- 然后调用ResourceMgrDelegate的submitApplication()方法,同时传入Application上下文信息,提交Job到ResourceManager,函数执行最后返回已生成的ApplicationId(实际生成JobID的时候ApplicationId就已经生成)。
- 最后返回Job此时的状态,函数退出
需要继续了解split和RPC通信协议。
0 0
- MapReduce源代码研究1
- MapReduce研究
- MapReduce研究
- MapReduce研究
- 【java源代码】Java MapReduce
- MapReduce研究探讨体会
- MapReduce研究(转载)
- MapReduce编程学习(1)--简要分析并附源代码
- hadoop研究:mapreduce研究前的准备工作
- hadoop研究:mapreduce研究前的准备工作
- MapReduce 运行过程源代码分析
- Hadoop MapReduce过程 源代码解析
- MapReduce作业内调度研究
- Jive源代码研究
- MINA研究-源代码
- mina框架源代码研究
- Openfire源代码研究
- symbian源代码研究
- linux下打开文档中文乱码的问题
- 代码优化重构(很经典)
- 图的数据结构
- hdu1166 hdu1394 hdu2795
- Java 8?还记得那年大明湖畔的Java 7吗?
- MapReduce源代码研究1
- OC -- ALAsset和ALAssetRepresentation相册详解
- Android 中 ScrollView滚动不到最底端的解决方法
- undefined reference to 'pthread_create'
- Linux环境变量
- 背景图铺满屏幕
- sqlite3 查询数据库表结构
- windows程序设计:第一章:起步
- 网络121第8周实验——数据库编程(MySQL)