1

MapReduce ジョブを実行しようとしていますが、そのステータスを定期的にポーリングしたいと考えています。次のようにコードで Jobclient クラスの submitJob(jobConf) メソッドを使用しようとしています

 JobConf conf = new JobConf(SampleJobClass.class)   
 JobClient j= new JobClient();
 j.setConf(conf);
 System.out.println("from conf" +j.getConf().toString());
 RunningJob submitJob=j.submitJob(conf);`

j.submitJob(conf) The error stack isの行でヌル ポインター エラーが発生し続けます。

Exception in thread "main" java.lang.NullPointerException
    at org.apache.hadoop.mapred.JobClient.submitJobInternal(JobClient.java:844)
    at org.apache.hadoop.mapred.JobClient.submitJob(JobClient.java:818)

私が間違っていることについてのアイデアはありますか?

4

2 に答える 2

0

私もこの問題を抱えています。しかし、使用j.runJob(conf);するとうまくいきます。また、静的関数を使用することもできます。JobClient.runJob(conf); 理由はわかりませんが、JobClienta のソースを読みに行き、静的関数 runJob の実装を見つけます。

public static RunningJob runJob(JobConf job) throws IOException {
JobClient jc = new JobClient(job);
RunningJob rj = jc.submitJob(job);
try {
  if (!jc.monitorAndPrintJob(job, rj)) {
    throw new IOException("Job failed!");
  }
} catch (InterruptedException ie) {
  Thread.currentThread().interrupt();
}
return rj;

したがって、submitJob 関数を次のように使用します。

JobClient jcli = new JobClient(jconf);
        RunningJob rJob = jcli.submitJob(jconf);
        while (true){
            Thread.sleep(5000);
            System.out.println(rJob);
            if (rJob.isComplete())
                break;
        }

私は働きます!!多分これもあなたに役立ちます。

于 2013-06-22T04:24:33.360 に答える
0

提供された情報に基づいて、hadoop-2.0.0-mr1-cdh4.0.0 / 4.0.1 を使用していると仮定します。
844 行目:

return ugi.doAs(new PrivilegedExceptionAction<RunningJob>() {

ugi が null であるため、NPE が発生する可能性があります。( UserGroupInformation ) これは init()メソッドで設定されますが、デフォルトのコンストラクターでは呼び出されません。したがって、次のいずれかで手動で呼び出します。

j.init(conf); 

または単に使用します:

j = new JobClient(conf);

内部でinit()を呼び出します。

一方で、コマンド ラインで Hadoop ジョブを実行してから、ジョブ情報をポーリングするクライアント コードを実行したいと思います。

InetSocketAddress jobtrackerAddr = new InetSocketAddress("myhost",8021);
Configuration conf = new Configuration();
JobClient jobClient = new JobClient(jobtrackerAddr, conf);
JobStatus[] runningJobs = jobClient.jobsToComplete();
...

(複数のクラスター情報を取得するには、以前の回答を参照してください)

于 2012-12-08T00:58:05.400 に答える