`
cloudeagle
  • 浏览: 104346 次
  • 性别: Icon_minigender_1
  • 来自: 合肥
社区版块
存档分类
最新评论

hadoop jar xxxx.jar的流程

 
阅读更多


转自:http://hi.baidu.com/dt_zhangwei/item/a58239fb46f3f110d7ff8cbf

搞清楚 hadoop jar xxxx.jar 执行的流程: jar文件是如何分发的


JobClient(不一定是hadoop集群的节点)利用bin/hadoop脚本运行jar包,以hadoop-0.20.2-examples.jar为例子:
hadoop jar hadoop-0.20.2-examples.jar [class name]的实质是:
1.利用hadoop这个脚本启动一个jvm进程;
2.jvm进程去运行org.apache.hadoop.util.RunJar这个java类;
3.org.apache.hadoop.util.RunJar解压hadoop-0.20.2-examples.jar到hadoop.tmp.dir/hadoop-unjar*/目录下;
4.org.apache.hadoop.util.RunJar动态的加载并运行Main-Class或指定的Class;
5.Main-Class或指定的Class中设定Job的各项属性
6.提交job到JobTracker上并监视运行情况。

注意:以上都是在jobClient上执行的。

运行jar文件的时候,jar会被解压到hadoop.tmp.dir/hadoop-unjar*/目录下(如:/home/hadoop/hadoop-fs/dfs/temp/hadoop- unjar693919842639653083,注意:这个目录是JobClient的目录,不是JobTracker的目录)。解压后的文件为:
drwxr-xr-x 2 hadoop hadoop 4096 Jul 30 15:40 META-INF
drwxr-xr-x 3 hadoop hadoop 4096 Jul 30 15:40 org
有图有真相:


提交job的实质是:
生成${job-id}/job.xml文件到hdfs://${mapred.system.dir}/(比如hdfs://bcn152:9990/home/hadoop/hadoop-fs/dfs/temp/mapred/system/job_201007301137_0012/job.xml),job的描述包括jar文件的路径map|reduce类路径等等.
上传${job-id}/job.jar文件到hdfs://${mapred.system.dir}/(比如hdfs://bcn152:9990/home/hadoop/hadoop-fs/dfs/temp/mapred/system/job_201007301137_0012/job.jar)
有图有真相:


生成job之后,通过static JobClient.runJob()就会向jobTracker提交job:
JobClient jc = new JobClient(job);
RunningJob rj = jc.submitJob(job);
之后JobTracker就会调度此job,

提交job之后,使用下面的代码获取job的进度:
try {
if (!jc.monitorAndPrintJob(job, rj)) {
throw new IOException("Job failed!");
}
} catch (InterruptedException ie) {
Thread.currentThread().interrupt();
}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics