복붙노트

[HADOOP] 웹 응용 프로그램에서 맵리 듀스 작업을 실행

HADOOP

웹 응용 프로그램에서 맵리 듀스 작업을 실행

비슷한 질문을 참조 : 다른 자바 프로그램에서 하둡 작업을 실행 과 간단한 자바 프로그램에서 맵리 듀스 작업을 호출

나도 하둡 원격 시스템에서 맵리 듀스 작업 jar 파일을 가지고, 나는 버튼 클릭 이벤트와, jar 파일을 불러와 작업을 실행합니다, 웹 응용 프로그램을 만드는거야. 이 웹 응용 프로그램은 별도의 시스템에서 실행되고 있습니다.

난 제공되는 단어 수 예를 들어 작업 만, 여전히 오류 메시지가 NoClassDefFoundError를 마주, 위의 글의 모두에서 제안을 시도했지만 작동 가져올 수 없습니다.

내가 부족 코드의 라인이 있습니까?

아래는 내가 가지고있는 코드는 다음과 같습니다

public void buttonClick(ClickEvent event) {
        UserGroupInformation ugi;
        try {
            ugi = UserGroupInformation.createProxyUser("hadoopUser", UserGroupInformation.getLoginUser());
            ugi.doAs(new PrivilegedExceptionAction<Object>(){
                public Object run() throws Exception {
                    runHadoopJob();
                    return null;
                }
            });
        } catch (IOException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }   
    }

private boolean runHadoopJob(){
try {       
            Configuration conf = new Configuration();
            conf.set("fs.default.name", "hdfs://192.168.4.248:9000");
            conf.set("mapred.job.tracker", "192.168.4.248:9001");
            Job job = new Job(conf, "WordCount");
            job.setMapperClass(TokenizerMapper.class);
            job.setReducerClass(IntSumReducer.class);
            job.setJarByClass(TokenizerMapper.class);
            job.setOutputKeyClass(Text.class);
            job.setOutputValueClass(IntWritable.class);
            FileInputFormat.addInputPath(job, new Path("/flume/events/160114/*"));
            Path out = new Path("output");
            FileSystem fs = FileSystem.get(conf);
            fs.delete(out, true);
            FileOutputFormat.setOutputPath(job, out);
            job.waitForCompletion(true);
            System.out.println("Job Finished");
        } catch (Exception e) {
            e.printStackTrace();
        }
return true;
}

하둡 내 hadoopUser가 속한 사용자 그룹이 내 하둡 코어 site.xml 파일에 다음을 추가

<property>
           <name>hadoop.proxyuser.kohtianan.groups</name>
           <value>hadoop</value>
           <description></description>
         </property>
         <property>
           <name>hadoop.proxyuser.kohtianan.hosts</name>
           <value>*</value>
           <description></description>
         </property>

해결법

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

    1.. * 항아리와 잭슨 코어-ASL - -.지도-감소 프로그램 클래스 경로에 존재하는 * jar 파일지도-감소 프로그램을 실행하려면, 당신은 잭슨 - 매퍼 - ASL이 필요합니다. 실제 jar 파일 이름은 사용중인 하둡 배포판과 버전에 따라 달라집니다.

    . * 항아리와 잭슨 코어-ASL - -.지도-감소 프로그램 클래스 경로에 존재하는 * jar 파일지도-감소 프로그램을 실행하려면, 당신은 잭슨 - 매퍼 - ASL이 필요합니다. 실제 jar 파일 이름은 사용중인 하둡 배포판과 버전에 따라 달라집니다.

    이 파일은 $ HADOOP_HOME / lib 폴더 아래에 존재한다. 이 문제를 해결하는 두 가지 방법 :

    이 오류는 사용자 kohtianan는 하둡 DFS에 액세스 할 수 없음을 나타냅니다. 당신이 할 수있는 일은 단지 (HDFS 수퍼 유저에서) HDFS에 디렉토리를 만들고 kohtianan하는 그 디렉토리의 소유자를 변경할 수있다. 이 문제를 해결해야한다.

  2. from https://stackoverflow.com/questions/21180120/run-mapreduce-job-from-a-web-application by cc-by-sa and MIT license