[HADOOP] 실행시 Hadoop 오류 : 키의 유형이 일치하지 않습니다. 예상되는 org.apache.hadoop.io.Text, 수신 된 org.apache.hadoop.io.LongWritable
HADOOP실행시 Hadoop 오류 : 키의 유형이 일치하지 않습니다. 예상되는 org.apache.hadoop.io.Text, 수신 된 org.apache.hadoop.io.LongWritable
Hadoop에서 PageRank 알고리즘을 구현 중이며 제목에서 코드를 실행하는 동안 folowing 오류가 발생했다고합니다.
지도에서 키에 유형 불일치 : 예상 org.apache.hadoop.io.Text, 수신 한 org.apache.hadoop.io.LongWritable
입력 파일에는 그래프 노드 ID를 키로 저장하고 값에 대한 정보를 값으로 저장합니다. 입력 파일의 형식은 다음과 같습니다.
1 \ t 3.4,2,5,6,67
4 \ t 4.2,77,2,7,83
... ...
오류가 무엇인지 이해하려고 시도합니다. 아래 코드에서 볼 수 있듯이 LongWritable을 주요 변수 유형으로 사용하려고 시도합니다. 이것은 내가 가지고있는 것을 의미한다.
지도
줄이기
그러나 나는 또한 시험했다 :
지도 <텍스트, 텍스트, 텍스트, 텍스트>
<텍스트, 텍스트, 텍스트, 텍스트>
그리고 또한:
지도
줄이기
나는 항상 같은 오류를 생각해 낸다. 나는 오류에서 기대하고 받아 들여진 것을 이해하는데 어려움을 겪고 있다고 생각한다. 내지도 기능이 내 입력 파일에서 LongWritable을 예상하고 Text가 있다는 것을 의미합니까? 내가 사용하는 입력 파일의 형식이나 변수 유형에 문제가 있습니까?
전체 코드는 다음과 같습니다. 변경해야 할 부분과 위치는 무엇입니까?
import java.io.IOException;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.lang.Object.*;
import org.apache.commons.cli.ParseException;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.configuration.Configuration;
import org.apache.hadoop.security.Credentials;
import org.apache.log4j.*;
import org.apache.commons.logging.*;
import org.apache.hadoop.mapred.*;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.io.DoubleWritable;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.JobContext;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.input.SequenceFileInputFormat;
import org.apache.hadoop.mapreduce.lib.input.TextInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat;
import org.apache.hadoop.mapreduce.lib.output.SequenceFileOutputFormat;
import org.apache.hadoop.util.GenericOptionsParser;
public class Pagerank
{
public static class PRMap extends Mapper<LongWritable, LongWritable, LongWritable, LongWritable>
{
public void map(LongWritable lineNum, LongWritable line, OutputCollector<LongWritable, LongWritable> outputCollector, Reporter reporter) throws IOException, InterruptedException
{
if (line.toString().length() == 0) {
return;
}
Text key = new Text();
Text value = new Text();
LongWritable valuel = new LongWritable();
StringTokenizer spline = new StringTokenizer(line.toString(),"\t");
key.set(spline.nextToken());
value.set(spline.nextToken());
valuel.set(Long.parseLong(value.toString()));
outputCollector.collect(lineNum,valuel);
String info = value.toString();
String splitter[] = info.split(",");
if(splitter.length >= 3)
{
float f = Float.parseFloat(splitter[0]);
float pagerank = f / (splitter.length - 2);
for(int i=2;i<splitter.length;i++)
{
LongWritable key2 = new LongWritable();
LongWritable value2 = new LongWritable();
long l;
l = Long.parseLong(splitter[i]);
key2.set(l);
//key2.set(splitter[i]);
value2.set((long)f);
outputCollector.collect(key2, value2);
}
}
}
}
public static class PRReduce extends Reducer<LongWritable,LongWritable,LongWritable,LongWritable>
{
private Text result = new Text();
public void reduce(LongWritable key, Iterator<LongWritable> values,OutputCollector<LongWritable, LongWritable> results, Reporter reporter) throws IOException, InterruptedException
{
float pagerank = 0;
String allinone = ",";
while(values.hasNext())
{
LongWritable temp = values.next();
String converted = temp.toString();
String[] splitted = converted.split(",");
if(splitted.length > 1)
{
for(int i=1;i<splitted.length;i++)
{
allinone = allinone.concat(splitted[i]);
if(i != splitted.length - 1)
allinone = allinone.concat(",");
}
}
else
{
float f = Float.parseFloat(splitted[0]);
pagerank = pagerank + f;
}
}
String last = Float.toString(pagerank);
last = last.concat(allinone);
LongWritable value = new LongWritable();
value.set(Long.parseLong(last));
results.collect(key, value);
}
}
public static void main(String[] args) throws Exception
{
org.apache.hadoop.conf.Configuration conf = new org.apache.hadoop.conf.Configuration();
String[] otherArgs = new GenericOptionsParser(conf, args).getRemainingArgs();
if (otherArgs.length != 2) {
System.err.println("Usage: wordcount <in> <out>");
System.exit(2);
}
Job job = new Job(conf, "pagerank_itr0");
job.setJarByClass(Pagerank.class);
job.setMapperClass(Pagerank.PRMap.class);
job.setReducerClass(Pagerank.PRReduce.class);
job.setOutputKeyClass(LongWritable.class);
job.setOutputValueClass(LongWritable.class);
FileInputFormat.addInputPath(job, new Path(otherArgs[0]));
FileOutputFormat.setOutputPath(job, new Path(otherArgs[1]));
job.waitForCompletion(true);
}
}
해결법
-
==============================
1.작업 구성에서 매퍼 출력 클래스를 설정하지 않습니다. 다음 메소드를 사용하여 작업에서 키 및 값 클래스를 설정하십시오.
작업 구성에서 매퍼 출력 클래스를 설정하지 않습니다. 다음 메소드를 사용하여 작업에서 키 및 값 클래스를 설정하십시오.
from https://stackoverflow.com/questions/14793828/hadoop-error-in-execution-type-mismatch-in-key-from-map-expected-org-apache-h by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] 쉘 스크립트를 사용하여 hadoop에서 마지막 5 분 동안 생성 된 파일 얻기 (0) | 2019.06.30 |
---|---|
[HADOOP] 피벗 및 합계를 높이십시오. (0) | 2019.06.30 |
[HADOOP] Mahout rowSimilarity (0) | 2019.06.30 |
[HADOOP] Hadoop 및 Python : 정렬 비활성화 (0) | 2019.06.30 |
[HADOOP] 파이썬 pyhs2를 사용하여 하이브에 연결하는 방법은 무엇입니까? (0) | 2019.06.30 |