job提交流程和切片划分源码解析

本文深入解析MapReduce的job提交流程,包括建立连接、数据切片、配置信息存储等步骤。在submitJobInternal方法中,检查job提交路径,创建.staging目录并存放切片信息。切片过程通过TextInputFormat进行,根据切片大小进行文件划分。对于小文件,使用CombineTextInputFormat进行虚拟存储块的划分,确保切片合理。整个过程详细阐述了MapReduce作业在Hadoop环境中的执行细节。
摘要由CSDN通过智能技术生成

MapRdeuce

job提交流程和切片划分源码解析

在这个mapreduce程序中使用的是wordcout案例

		// 提交job
		boolean result = job.waitForCompletion(true);
	源码:
	public boolean waitForCompletion(boolean verbose) throws IOException, InterruptedException, ClassNotFoundException {
   
    if (this.state == Job.JobState.DEFINE) {
         //job的目前状态信息  DEFINE
        this.submit();
    }
    return this.isSuccessful();
}

提交job时先建立连接,获取当前客户端的信息(当前是本地环境)


    this.connect();
private synchronized void connect() throws IOException, InterruptedException, ClassNotFoundException {
   
			if (this.cluster == null) {
   
				this.cluster = (Cluster)this.ugi.doAs(new PrivilegedExceptionAction<Cluster>() {
   
					public Cluster run() throws IOException, InterruptedException, ClassNotFoundException {
   
						//创建提交job的代理
						return new Cluster(Job.this.getConfiguration());
					}
				});
			}

		}
		  public Cluster(Configuration conf) throws IOException {
   
			this((InetSocketAddress)null, conf);
		}
		
		 private volatile List<ClientProtocolProvider> providerList;// null
		public Cluster(InetSocketAddress jobTrackAddr, Configuration conf) throws IOException {
   
				//判断是本地运行环境还是yarn集群运行环境
			this.initialize(jobTrackAddr, conf);
		}
			
		private void initialize(InetSocketAddress jobTrackAddr, Configuration conf) throws IOException {
   
			this.initProviderList();
			Iterator var4 = this.providerList.iterator();
				//遍历运行环境集合得到此时程序的运行环境
			while(var4.hasNext()) {
   
				ClientProtocolProvider provider = (ClientProtocolProvider)var4.next();
				ClientProtocol clientProtocol = null;

				try {
   
					if (jobTrackAddr == null) {
   
						clientProtocol = provider.create(conf);
					} else {
   
						clientProtocol = provider.create(jobTrackAddr, conf);
					}

					if (clientProtocol != null) {
   
						this.clientProtocolProvider = provider;//LocalClien or YarnClient
						this.client = clientProtocol;
						break;
					}
			}
		}
//初始化运行环境,localProviderList中存放两种运行环境 LocalClient,YarnClient
			
private void initProviderList() {
   
		if (this.providerList 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值