上图首先描述了在TaskTracker端Task(MapTask.ReduceTask)的执行过程,MapTask(org.apache.hadoop.mapred)首先被TaskRunner调用,然后在MapTask内部首先进行一些初始化工作,然后调用run()方法,判断如果使用了新版API就调用RunNewMapper()开始执行Map操作. 1)runNewMapper()分析 1.首先创建一个Mapper对象 // make a mapper org.apache.hadoop.mapr…
总结:主要是创建Context对象,并且将默认context配置,host级别配置,context配置的值设置进去,设置docBase,如果是war包就解压到webapp的目录中,重新设置docBase为war包解压后的目录.如果配置文件中没有指定docBase,那么就以webapps为基路径+context的baseName作为docBase HostConfig.deployApps() //在监听到start事件类型,也就是StandardHost调用startInternal prote…
HostConfig.deployApps() //在监听到start事件类型,也就是StandardHost调用startInternal protected void deployApps() { File appBase = host.getAppBaseFile(); //这个值是在触发before_start时间时生成的,默认是tomcat安装目录+engine名+host名 File configBase = host.getConfigBaseFile(); //获取host上配置…
HostConfig.deployApps() //在监听到start事件类型,也就是StandardHost调用startInternal protected void deployApps() { File appBase = host.getAppBaseFile(); //这个值是在触发before_start时间时生成的,默认是tomcat安装目录+engine名+host名 File configBase = host.getConfigBaseFile(); //获取host上配置…
如上次分析,其实map函数中的context.write()调用过程如下所示: 梳理下调用过程,context的write方法其实是调用了TaskInputOutputContext类的write方法,而在这个write方法内部又调用了output字段的write方法,这个output字段是NewOutputCollector类的一个对象,自然就回到了NewOutputCollector(reduce数量不是0)这个类的write方法,而这个方法内部又调用了本类的一个字段collector的co…
Map<Key,Value> 排序默认是按照KEY值的升序来进行. 针对按照Value来进行排序有两种方法: 第一种 使用TreeMap  代码如下 public class test{ public static void main(String[] args) { HashMap<String, Double> map = new HashMap<String, Double>(); valueComparator vComparator = new valueCo…
TaskTracker执行map或reduce任务的过程(二) 上次说到,当MapLauncher或ReduceLancher(用于执行任务的线程,它们扩展自TaskLauncher),从它们所维护的LinkedList也即队列中获取到TaskInProgress,并且TaskTracker有空闲的slot时,该线程就调用了TaskTracker的startNewTask(tip)方法,如下所示: public void run() { while (!Thread.interrupted())…
TaskTracker获取并执行map或reduce任务的过程(一) 我们知道TaskTracker在默认情况下,每个3秒就行JobTracker发送一个心跳包,也就是在这个心跳包中包含对任务的请求.JobTracker返回给TaskTracker的心跳包中包含有各种action(任务),如果有满足在此TaskTracker上执行的任务的话,该任务也就包含在心跳包的响应中.在TaskTracker端有线程专门等待map或reduce任务,并从队列中取出执行. 1. TaskTracker发送心跳…
前言 Context也就是上下文对象,是Android较为常用的类,但是对于Context,很多人都停留在会用的阶段,这个系列会带大家从源码角度来分析Context,从而更加深入的理解它. 1.Context概述 Context意为上下文或者场景,是一个应用程序环境信息的接口.在开发中我们经常会使用Context,它的使用场景总的来说分为两大类,它们分别是: 使用Context调用方法,比如:启动Activity.访问资源.调用系统级服务等. 调用方法时传入Context,比如:弹出Toast.…
前言 上一篇文章我们学习了Context关联类和Application Context的创建过程,这一篇我们接着来学习Activity和Service的Context创建过程.需要注意的是,本篇的知识点会和深入理解四大组件系列的部分文章的知识点相重合. 1.Activity的Context创建过程 当我们在Activity中调用startActivity方法时,其实调用的是Context的startActivity方法,如果想要在Activity中使用Context提供的方法,务必要先创建Con…