Posted on 2013-03-02 17:28
鑫龍 閱讀(4020)
評論(0) 編輯 收藏 引用 所屬分類:
Hadoop
jar -cvf xxx.jar .
hadopp jar xxx.jar clalss-name [input] [output]
----------------------------------------------------------------------
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();
}