[HADOOP] 하둡 새로운 API에 대한 클래스 캐스트 예외
HADOOP하둡 새로운 API에 대한 클래스 캐스트 예외
내가지도 프레임 워크를 줄이고 사용하여 몇 가지 간단한 코드로 기침을 시도했다. 이전에 나는 mapred 패키지를 사용하여 구현했고 나는 KeyvalueTextInputFormat로 입력 형식 클래스를 지정 할 수 있었다 그러나 새로운 API를 사용 맵리 듀스에서이 클래스가 존재하지 않습니다. 나는 TextInputFormat.class를 사용하여 시도하지만 난 여전히 다음과 같은 예외가
- job_local_0001
java.lang.ClassCastException: org.apache.hadoop.io.LongWritable cannot be cast to org.apache.hadoop.io.Text
at com.hp.hpl.mapReduceprocessing.MapReduceWrapper$HitFileProccesorMapper_internal.map(MapReduceWrapper.java:1)
at org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:144)
at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:621)
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:305)
at org.apache.hadoop.mapred.LocalJobRunner$Job.run(LocalJobRunner.java:177)
여기에 코드의 샘플 조각입니다
Configuration conf = new Configuration();
conf.set("key.value.separator.output.line", ",");
Job job = new Job(conf, "Result Aggregation");
job.setJarByClass(ProcessInputFile.class);
job.setInputFormatClass(TextInputFormat.class);
job.setOutputFormatClass(TextOutputFormat.class);
job.setMapOutputKeyClass(Text.class);
job.setMapOutputValueClass(Text.class);
job.setMapperClass(MultithreadedMapper.class);
MultithreadedMapper.setMapperClass(job, HitFileProccesorMapper_internal.class);
MultithreadedMapper.setNumberOfThreads(job, 3);
//job.setMapperClass(HitFileProccesorMapper_internal.class);
job.setReducerClass(HitFileReducer_internal.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(Text.class);
FileInputFormat.addInputPath(job, new Path(inputFileofhits.getName()));
FileOutputFormat.setOutputPath(job, new Path(ProcessInputFile.resultAggProps
.getProperty("OUTPUT_DIRECTORY")));
try {
job.waitForCompletion(true);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
내가 그 classcast 예외가 피할 수 있도록 할 수있는 구성 변경 사항이 무엇인지 알려 주시기 바랍니다.
해결법
-
==============================
1.맵리 듀스는 클래스를 키 / 값 어떤지도로 통과하거나 줄이기 위해 노력하고 무엇에 형식이 일치하지가 가지고 템플릿이된다 때 일반적으로 발생합니다.
맵리 듀스는 클래스를 키 / 값 어떤지도로 통과하거나 줄이기 위해 노력하고 무엇에 형식이 일치하지가 가지고 템플릿이된다 때 일반적으로 발생합니다.
당신은 당신이 KeyvalueTextInputFormat를 사용하고 있지만, 코드에서 당신이 TextInputFormat을 사용하는 것을 말한다. "위치, 라인"TextInputFormat는
로 기록을 제공합니다. 나는 ,?, 텍스트, 텍스트>는 매퍼의 유형이라고 생각하는거야. 따라서, 맵리 듀스는 TextInputFormat는 텍스트로 제공하고있는 LongWritable을 전송하려고하는데, 그것은 할 수없는, 그래서 그것을 밖으로 폭탄.
난 당신이 중 하나 KeyvalueTextInputFormat을 제안 또는
에 매퍼의 유형을 변경합니다.
from https://stackoverflow.com/questions/11541345/class-cast-exception-for-the-hadoop-new-api by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] 의사 분산 모드 하둡 (0) | 2019.09.23 |
---|---|
[HADOOP] HBase를 클라이언트 API는 HBase를 연결하지 (0) | 2019.09.23 |
[HADOOP] 오라클 로더를 사용하여 Oracle 테이블에 HBase와 데이터를 가져옵니다 (0) | 2019.09.23 |
[HADOOP] 1000 개 파일에서 문자열을 검색하고 각 파일 크기 1GB의입니다 (0) | 2019.09.23 |
[HADOOP] gethue / 색상 고정 표시기 이미지를 사용하여 HDFS 주소를 구성 할 수 없습니다 (0) | 2019.09.23 |