Posted on 2013-03-02 17:28
鑫龍 閱讀(4020)
評(píng)論(0) 編輯 收藏 引用 所屬分類:
Hadoop
jar -cvf xxx.jar .
hadopp jar xxx.jar clalss-name [input] [output]
----------------------------------------------------------------------
hadoop jar hadoop-0.20.2-examples.jar [class name]的實(shí)質(zhì)是:
1.利用hadoop這個(gè)腳本啟動(dòng)一個(gè)jvm進(jìn)程;
2.jvm進(jìn)程去運(yùn)行org.apache.hadoop.util.RunJar這個(gè)java類;
3.org.apache.hadoop.util.RunJar解壓hadoop-0.20.2-examples.jar到hadoop.tmp.dir/hadoop-unjar*/目錄下;
4.org.apache.hadoop.util.RunJar動(dòng)態(tài)的加載并運(yùn)行Main-Class或指定的Class;
5.Main-Class或指定的Class中設(shè)定Job的各項(xiàng)屬性
6.提交job到JobTracker上并監(jiān)視運(yùn)行情況。
注意:以上都是在jobClient上執(zhí)行的。
運(yùn)行jar文件的時(shí)候,jar會(huì)被解壓到hadoop.tmp.dir/hadoop-unjar*/目錄下(如:/home/hadoop/hadoop-fs/dfs/temp/hadoop-unjar693919842639653083, 注意:這個(gè)目錄是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的實(shí)質(zhì)是:
生成${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之后,通過(guò)static JobClient.runJob()就會(huì)向jobTracker提交job:
JobClient jc = new JobClient(job);
RunningJob rj = jc.submitJob(job);
之后JobTracker就會(huì)調(diào)度此job,
提交job之后,使用下面的代碼獲取job的進(jìn)度:
try {
if (!jc.monitorAndPrintJob(job, rj)) {
throw new IOException("Job failed!");
}
} catch (InterruptedException ie) {
Thread.currentThread().interrupt();
}