2013-02-15 4 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"로 설정 파일을 찾았지만 여전히 주사위가 없다는 것을 지적하기 위해이 파일을 실행 해 보았습니다.

classpath가 잘못되었거나 잘못된 것처럼 느껴집니다. 나는 어떤 no appreciated이라도 고맙다. 감사합니다,

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

나는 "자바 -jar prog.jar"를 사용하여 명령 줄에서 내 프로그램을 실행하고 나는 그것이 독립 실행 형 모드로 실행되는 것을 볼 수 있습니다.

이것은 사실이 아닙니다. java -jar 명령은 독립형 Java 응용 프로그램을 실행하는 데 사용됩니다. Hadoop 작업을 실행하려면 언급 한대로 hadoop jar 명령을 사용해야합니다.

작업을 실행하기 전에 환경에서 Hadoop을 설정해야합니다. 준비가되지 않았다면 this post 또는 offical documents의 단계를 따르십시오. 당신은 하둡 배포판과 함께 제공되는 예제의 일부를 실행하여 설정을 확인할 수 있습니다

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

을 위의 명령이 성공적으로 실행되면, 당신은 다음 자신의 작업을 시도 할 수 있습니다.

편집 : 당신은 다음과 같이 hadoop jar를 호출 Runtime.exec를 사용할 수 있습니다

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")) ; 다음 그것은 잘 작동합니다. –

+0

'bin/hadoop' 스크립트는 환경을 설정합니다 (classpath, config 파일 경로 등). 'bin/hadoop jar'는 메인 클래스를 호출하는'core/org/apache/hadoop/util/RunJar.java'를 호출합니다. 'bin/hadoop jar' 명령을 사용한다면 리소스를 수동으로 추가 할 필요가 없습니다. 선호하는 방법이라고 생각합니다. – ericson

+0

내가하려는 것은 작업을 시작할 수있는 웹 인터페이스가있는 Java 서비스를 만드는 것입니다. 작업이 완료되면 서비스에서 결과를 다시 보냅니다. bin/hadoop jar는 나에게 적절하지 않은 것처럼 보였다. –

관련 문제