找不到“;KeyValueInputFormat“;在Hadoop中

找不到“;KeyValueInputFormat“;在Hadoop中,hadoop,mapreduce,Hadoop,Mapreduce,我是Hadoop的新手,但我已经阅读了关于这方面的雅虎教程,并且已经编写了一些mapReduce作业。我以前的所有作品都使用TextInputFormat,但我现在需要将其更改为KeyValueInputFormat。问题是在hadoop 0.20.2中找不到KeyValueInputFormat.class 我在下面附上我的代码(这是单词计数示例,仅更改了输入格式) package org.myorg; 导入java.io.IOException; 导入java.util.*; 导入org.a

我是Hadoop的新手,但我已经阅读了关于这方面的雅虎教程,并且已经编写了一些mapReduce作业。我以前的所有作品都使用TextInputFormat,但我现在需要将其更改为KeyValueInputFormat。问题是在hadoop 0.20.2中找不到KeyValueInputFormat.class

我在下面附上我的代码(这是单词计数示例,仅更改了输入格式)

package org.myorg;
导入java.io.IOException;
导入java.util.*;
导入org.apache.hadoop.fs.Path;
导入org.apache.hadoop.conf.*;
导入org.apache.hadoop.io.*;
导入org.apache.hadoop.mapred.*;
导入org.apache.hadoop.util.*;
公共类字数{
公共静态类映射扩展MapReduceBase实现映射器{
私有最终静态IntWritable one=新的IntWritable(1);
私有文本字=新文本();
公共void映射(LongWritable键、文本值、OutputCollector输出、Reporter报告器)引发IOException{
字符串行=value.toString();
StringTokenizer标记器=新的StringTokenizer(行);
while(tokenizer.hasMoreTokens()){
set(tokenizer.nextToken());
输出。收集(字,一);
}
}
} 
公共静态类Reduce扩展MapReduceBase实现Reducer{
公共void reduce(文本键、迭代器值、OutputCollector输出、Reporter报告器)引发IOException{
整数和=0;
while(values.hasNext()){
sum+=values.next().get();
}
collect(key,newintwriteable(sum));
}
}
公共静态void main(字符串[]args)引发异常{
JobConf conf=newjobconf(WordCount.class);
conf.setJobName(“字数”);
conf.setOutputKeyClass(Text.class);
conf.setOutputValueClass(IntWritable.class);
conf.setMapperClass(Map.class);
conf.setCombinerClass(Reduce.class);
conf.setReducerClass(Reduce.class);
conf.setInputFormat(keyValueInputFormat.class);//修改后的输入格式
conf.setOutputFormat(TextOutputFormat.class);
setInputPath(conf,新路径(args[0]);
setOutputPath(conf,新路径(args[1]);
runJob(conf);
}
}

org.apache.hadoop.mapreduce.lib.input中有KeyValueTextInputFormat

一些旧教程基于Hadoop API的旧版本。我建议您阅读一些较新的教程

这是我在KeyValueTextInputFormat上转到源代码时得到的结果

package org.apache.hadoop.mapreduce.lib.input;

import java.io.IOException;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.InputSplit;
import org.apache.hadoop.mapreduce.JobContext;
import org.apache.hadoop.mapreduce.RecordReader;
import org.apache.hadoop.mapreduce.TaskAttemptContext;

public class KeyValueTextInputFormat extends FileInputFormat<Text, Text> {

public KeyValueTextInputFormat() {
    //compiled code
    throw new RuntimeException("Compiled Code");
}

protected boolean isSplitable(JobContext context, Path file) {
    //compiled code
    throw new RuntimeException("Compiled Code");
}

public RecordReader<Text, Text> createRecordReader(InputSplit genericSplit,     TaskAttemptContext context) throws IOException {
    //compiled code
    throw new RuntimeException("Compiled Code");
}
}
package org.apache.hadoop.mapreduce.lib.input;
导入java.io.IOException;
导入org.apache.hadoop.fs.Path;
导入org.apache.hadoop.io.Text;
导入org.apache.hadoop.mapreduce.InputSplit;
导入org.apache.hadoop.mapreduce.JobContext;
导入org.apache.hadoop.mapreduce.RecordReader;
导入org.apache.hadoop.mapreduce.TaskAttemptContext;
公共类KeyValueTextInputFormat扩展了FileInputFormat{
公钥值TextInputFormat(){
//编译代码
抛出新的运行时异常(“编译代码”);
}
受保护的布尔isSplitable(JobContext上下文,路径文件){
//编译代码
抛出新的运行时异常(“编译代码”);
}
public RecordReader createRecordReader(InputSplit genericSplit,TaskAttemptContext上下文)引发IOException{
//编译代码
抛出新的运行时异常(“编译代码”);
}
}

谢谢。我看了你建议的新教程。它是较新的版本,使用apache.hadoop.mapreduce,而不是较旧的apache.hadoop.mapred。我认为应该使用“job.setInputFormatClass(KeyValueTextInputFormat.class);”来设置输入格式。但它仍然会抛出错误。有什么建议吗?我编辑了我的答案。请查看org.apache.hadoop.mapreduce.lib.input package.Thank。hadoop 0.20.2中的org.apache.hadoop.mapreduce.lib.input中没有KeyValueTextInputFormat?我检查了我的电脑,也检查了hadoop 0.20.2 API,我已经编辑了上面的答案。我正在代码中使用KeyValueTextInputFormat。它编译和运行没有任何问题。@DeepakKapoor链接已断开
package org.apache.hadoop.mapreduce.lib.input;

import java.io.IOException;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.InputSplit;
import org.apache.hadoop.mapreduce.JobContext;
import org.apache.hadoop.mapreduce.RecordReader;
import org.apache.hadoop.mapreduce.TaskAttemptContext;

public class KeyValueTextInputFormat extends FileInputFormat<Text, Text> {

public KeyValueTextInputFormat() {
    //compiled code
    throw new RuntimeException("Compiled Code");
}

protected boolean isSplitable(JobContext context, Path file) {
    //compiled code
    throw new RuntimeException("Compiled Code");
}

public RecordReader<Text, Text> createRecordReader(InputSplit genericSplit,     TaskAttemptContext context) throws IOException {
    //compiled code
    throw new RuntimeException("Compiled Code");
}
}