2013-02-15 53 views
0

我已經編寫了一個使用Hadoop的Java程序。我使用「java -jar prog.jar」從命令行執行我的程序,我可以看到它在獨立模式下運行。我可以告訴,因爲JobTracker和TaskTracker守護進程不需要運行我的程序來成功執行。如果我使用「hadoop jar prog.jar」(關閉map/reduce守護進程)執行我的程序,那麼它自然不起作用。Hadoop Java程序總是以獨立模式運行

我想我的java程序在僞分佈式模式下執行,但我有一種感覺,它無法找到配置文件。我嘗試執行它爲「java -cp /usr/hadoop-1.1.1/conf -jar prog.jar」,以便將它指向配置文件所在的位置,但仍然沒有骰子。

我有一種感覺,類路徑是錯誤的或什麼的。我是一個noob,所以任何幫助表示讚賞。謝謝,

MJ

這裏是與配置對象我的工作開始的代碼片段。

Configuration config = new Configuration();  
    Job job = new Job(config); 
    job.setJobName("Test"); 
    job.setJarByClass(MyMapper.class);  

    job.setMapperClass(MyMapper.class); 
    job.setReducerClass(MyReducer.class); 

    job.setOutputKeyClass(Text.class); 
    job.setOutputValueClass(IntWritable.class); 

    job.setMapOutputKeyClass(LongWritable.class); 
    job.setMapOutputValueClass(Text.class); 

    job.setInputFormatClass(MyInputFormat.class); 

    FileInputFormat.addInputPath(job, new Path("hdfs://hadoop0.hq.net:54310/" + saFileName)); 
    FileOutputFormat.setOutputPath(job, new Path("hdfs://hadoop0.hq.net:54310/" + saFileName + "-output")); 

    job.waitForCompletion(true); 

回答

2

我使用「Java的罐子prog.jar」在命令行中執行我的計劃,我可以看到它在單機模式下運行。

這是不正確的。 java -jar命令用於運行獨立的Java應用程序。要運行Hadoop作業,您需要使用前面提到的hadoop jar命令。

在運行任何任務之前,您需要在環境中設置Hadoop。如果您還沒有準備好,您可以按照this postoffical documents中的步驟操作。 您可以通過運行一些提供Hadoop發行版實例驗證安裝:

bin/hadoop jar hadoop-examples-*.jar grep input output 'dfs[a-z.]+' 

如果上述命令成功運行,那麼你可以嘗試自己的任務。

編輯: 您可以使用Runtime.exec調用hadoop jar如下:

Process p = Runtime.getRuntime().exec(cmd); 
BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream())); 
String line = input.readLine(); 
while (line != null) { 
    // process output of the task 
    // ... 
} 
input.close(); 
// wait for the task complete 
p.waitFor(); 
int ret = p.exitValue(); 
// process the task result 
// ... 
+0

我發現,如果我添加的配置文件手動像config.addResource(新路徑(「核心-site.xml中」)) ;那麼它工作正常。 – 2013-02-15 15:59:01

+0

'bin/hadoop'腳本會爲你設置環境(類路徑,配置文件路徑等)。 'bin/hadoop jar'調用'core/org/apache/hadoop/util/RunJar.java',它調用你的主類。如果您使用'bin/hadoop jar'命令,則不需要手動添加資源,我認爲這將是一種首選方法。 – ericson 2013-02-18 15:17:45

+0

我想要做的是創建一個具有可通過其啓動作業的Web界面的Java服務。作業完成後,我的服務會將結果發回。由於某種原因,bin/hadoop jar對我來說似乎並不合適。 – 2013-02-18 16:49:35

相關問題