[HADOOP] 맵에서 값의 유형이 일치하지 않습니다. 예상 org.apache.hadoop.io.NullWritable, 수신 된 org.apache.hadoop.io.Text
HADOOP맵에서 값의 유형이 일치하지 않습니다. 예상 org.apache.hadoop.io.NullWritable, 수신 된 org.apache.hadoop.io.Text
내 필요에 맞게 기존 문제를 조정하려고합니다.
기본적으로 입력은 단순 텍스트입니다. 나는 그것을 처리하고 감속기에 키 / 값 쌍을 전달한다. 그리고 나는 json을 만듭니다. 그래서 열쇠가 있지만 가치는 없습니다. 그래서 매퍼 :
입력 : 텍스트 / 텍스트
출력 : 텍스트 / 텍스트
감속기 : 텍스트 / 텍스트
출력 : 텍스트 / 없음
내 서명은 다음과 같습니다.
public class AdvanceCounter {
/**
* The map class of WordCount.
*/
public static class TokenCounterMapper
extends Mapper<Object, Text, Text, Text> { // <--- See this signature
public void map(Object key, Text value, Context context) // <--- See this signature
throws IOException, InterruptedException {
context.write(key,value); //both are of type text OUTPUT TO REDUCER
}
}
public static class TokenCounterReducer
extends Reducer<Text, Text, Text, **NullWritable**> { // <--- See this signature Nullwritable here
public void reduce(Text key, Iterable<Text> values, Context context) // <--- See this signature
throws IOException, InterruptedException {
for (Text value : values) {
JSONObject jsn = new JSONObject();
//String output = "";
String[] vals = value.toString().split("\t");
String[] targetNodes = vals[0].toString().split(",",-1);
try {
jsn.put("source",vals[1]);
jsn.put("targets",targetNodes);
context.write(new Text(jsn.toString()),null); // no value
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
public static void main(String[] args) throws Exception {
Configuration conf = new Configuration();
String[] otherArgs = new GenericOptionsParser(conf, args).getRemainingArgs();
Job job = new Job(conf, "Example Hadoop 0.20.1 WordCount");
// ...
//
job.setOutputValueClass(NullWritable.class);
FileInputFormat.addInputPath(job, new Path(otherArgs[0]));
FileOutputFormat.setOutputPath(job, new Path(otherArgs[1]));
System.exit(job.waitForCompletion(true) ? 0 : 1);
}
}
하지만 실행이 오류가 점점 :
13/06/04 13:08:26 INFO mapred.JobClient: Task Id : attempt_201305241622_0053_m_000008_0, Status : FAILED
java.io.IOException: Type mismatch in value from map: expected org.apache.hadoop.io.NullWritable, recieved org.apache.hadoop.io.Text
at org.apache.hadoop.mapred.MapTask$MapOutputBuffer.collect(MapTask.java:1019)
at org.apache.hadoop.mapred.MapTask$NewOutputCollector.write(MapTask.java:691)
at org.apache.hadoop.mapreduce.TaskInputOutputContext.write(TaskInputOutputContext.java:80)
at org.sogou.Stinger$TokenCounterMapper.map(Stinger.java:72)
at org.sogou.Stinger$TokenCounterMapper.map(Stinger.java:1)
at org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:144)
at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:764)
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:370)
at org.apache.hadoop.mapred.Child$4.run(Child.java:255)
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:1093)
at org.apache.hadoop.mapred.Child.main(Child.java:249)
해결법
-
==============================
1.맵 출력 유형을 지정하지 않았으므로 맵퍼에 대해 잘못된 Text 및 NullWritable 인 감속기에 대해 설정 한 것과 동일한 결과를 얻습니다. 혼동을 피하기 위해 다음을 수행하여 맵퍼와 감속기 모두에 대해 모든 유형을 지정하는 것이 더 좋습니다.
맵 출력 유형을 지정하지 않았으므로 맵퍼에 대해 잘못된 Text 및 NullWritable 인 감속기에 대해 설정 한 것과 동일한 결과를 얻습니다. 혼동을 피하기 위해 다음을 수행하여 맵퍼와 감속기 모두에 대해 모든 유형을 지정하는 것이 더 좋습니다.
job.setMapOutputKeyClass(Text.class); job.setMapOutputValueClass(Text.class); job.setOutputKeyClass(Text.class); job.setOutputValueClass(NullWritable.class);
from https://stackoverflow.com/questions/16926783/type-mismatch-in-value-from-map-expected-org-apache-hadoop-io-nullwritable-rec by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] Hadoop MapReduce에서 여러 개의 다른 매퍼로 여러 입력을 가질 수 있습니까? (0) | 2019.06.16 |
---|---|
[HADOOP] Hadoop의 FileSystem API 호출 목록에있는 와일드 카드 (0) | 2019.06.16 |
[HADOOP] Hadoop Mapper가 "ApplicationMaster에 의해 종료 된 컨테이너"로 인해 실패했습니다. (0) | 2019.06.16 |
[HADOOP] "hadoop namenode -format"명령으로 수행 할 작업 (0) | 2019.06.16 |
[HADOOP] org.apache.hadoop.mapreduce.Job의 세 생성자는 더 이상 사용되지 않습니다. Job 클래스를 생성하는 가장 좋은 방법은 무엇입니까? (0) | 2019.06.16 |