복붙노트

[HADOOP] 어떻게 OutputCommitter의 설정을 설정하는 방법?

HADOOP

어떻게 OutputCommitter의 설정을 설정하는 방법?

나는 JobClient를 사용하여 작업을 제출 맵리 듀스 코드가 있습니다. 나는이 널 포인터 오류 스택가 계속

12/12/10 12:42:44 INFO mapred.LocalJobRunner: OutputCommitter set in config null    
Exception in thread "main" java.lang.NullPointerException
        at org.apache.hadoop.mapred.JobClient$NetworkedJob.<init>(JobClient.java:226)
        at org.apache.hadoop.mapred.JobClient$2.run(JobClient.java:924)
        at org.apache.hadoop.mapred.JobClient$2.run(JobClient.java:844)
        at java.security.AccessController.doPrivileged(Native Method)
        at javax.security.auth.Subject.doAs(Subject.java:396)
        at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1232)
        at org.apache.hadoop.mapred.JobClient.submitJobInternal(JobClient.java:844)
        at org.apache.hadoop.mapred.JobClient.submitJob(JobClient.java:818)
        at FTPIF.run(FTPIF.java:193)
        at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)
        at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:84)
        at FTPIF.main(FTPIF.java:273)

저를 얻는 코드의 조각이 오류입니다

JobClient j = new JobClient();
        j.init(conf);
        RunningJob check = j.submitJob(conf);

어떤 아이디어?

해결법

  1. ==============================

    1.나뿐만 아니라이 문제를 가지고있다. 그러나 j.runJob (conf의)을 사용하여; 잘 작동합니다. 또한 당신은 정적 기능 JobClient.runJob (conf의)를 사용할 수 있습니다 ;. 나는 그때 JobClient의 소스를 읽을 이유를 알고 정적 기능 runJob의 구현을 찾을 수 없습니다 :

    나뿐만 아니라이 문제를 가지고있다. 그러나 j.runJob (conf의)을 사용하여; 잘 작동합니다. 또한 당신은 정적 기능 JobClient.runJob (conf의)를 사용할 수 있습니다 ;. 나는 그때 JobClient의 소스를 읽을 이유를 알고 정적 기능 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;
    }
    

    나는 작동! 어쩌면 이것은 또한 당신에게 유용합니다.

  2. ==============================

    2.내가 널 포인터에 공격 이유를 파악하지 않았다. j.setConf (conf의)을 설정하면 작동하지 않았다. 그래서 실행중인 작업에 대한 핸들을 얻는 대신 runJob을 사용했다.

    내가 널 포인터에 공격 이유를 파악하지 않았다. j.setConf (conf의)을 설정하면 작동하지 않았다. 그래서 실행중인 작업에 대한 핸들을 얻는 대신 runJob을 사용했다.

    RunningJob job= JobClient.runJob(conf);
    
  3. from https://stackoverflow.com/questions/13796625/how-to-set-outputcommitter-config by cc-by-sa and MIT license