- 上一个博客我们说到了创建一个新的job对象了,我们从那里接着开始
- 在这里创建了这个类并且赋值了好多属性,这下面还有很多
- 不说了直接看run()方法吧
- 这里创建一个outputCommiter
- 一开始我的F盘是这样的
- 这里配置好了这个类,获取outputFormat
-之后就是会去读取切片的元数据信息,然后获取reduce数量,之后会设置作业进度,然后获取可运行的maptask
运行maptask
在这里跑任务,并且监控
我们来看maptaskRunable的run方法
这里设置了一堆属性在里面
这里map.run 开始跑任务了
做完了验证,开始初始化方法,初始化方法里面创建了两个对象,jobContext,taskContext,之后获取了任务的状态、是不是使用新的API、获取了输出路径(mapreduce.output.fileoutputformat.outputdir),使用outputFormat获取了一个commiter对象
然后启动task任务,然后获取了一个进程树对象,然后走完这个方法回到run方法中继续
额这算是前期准备吧,创建context,创建mapper ,创建input format ,获取分片信息
获取output 创建一个mapcontext ,最下 面的方法是用来获取我们自定义的mapper类的
这里调用了TrackIngRecordReader的初始化方法,这里在前面有一步确定了里面的属性real为linerecordReader,这里的初始化方法是调用的lineRecordReaderde的初始化方法,这个方法其实就是使用这个reader怎么读文件,lineRecordReader的读的方法是,一行行的去读,其实重写inputformat和reader方法主要工作还是在这个初始化方法的重写
接下来就是老熟人了
没错,就是你自定义的mapper,然后我们进入父类的run方法,
nextKeyValue,getCurrentKey,getCurrentValue会一直向下调用,最后调用的LineRecordReader的,map也一样,会调用的我们自己的map方法
这个分区的规则也可以自己规定的,只要继承了partitioner,实现抽象方法就行了
然后默认的是这样的,直接就一个匿名内部类
collect,前面做了好多的校验
然后就一直重复中上面从while(context.nextKeyValue)开始到最后的代码,直到处理完一整个分片文件
这里应该是到map阶段结束了,下篇详解collect阶段