我试图使用groovy运行wordCount示例,但是遇到了一个错误。
Found interface org.apache.hadoop.mapreduce.JobContext, but class was expected找到上述错误的这,但在我的设置中找不到pom.xml文件。
然后我遇到了这。我们如何在hadoop运行这个。是通过创建jar文件并运行类似于java示例的方法吗?(运行良好)
使用groovy-hadoop运行一个groovy示例与使用这文件(不确定如何运行这个示例)和hadoop-streaming有什么区别?为什么我们要用一种方法胜过其他方法。
我在Mac10.10.3上安装了Hadoop2.7.1
发布于 2016-03-18 01:35:35
我能够使用Hadoop2.7.1运行这 groovy文件,我遵循的过程是
hadoop jar buildSrc-1.0.jar in1 out4其中in1是输入文件,out4是hdfs中的输出文件夹。
编辑-,因为上面的链接坏了,我在这里粘贴groovy文件。
import StartsWithCountMapper
import StartsWithCountReducer
import org.apache.hadoop.conf.Configured
import org.apache.hadoop.fs.Path
import org.apache.hadoop.io.IntWritable
import org.apache.hadoop.io.LongWritable
import org.apache.hadoop.io.Text
import org.apache.hadoop.mapreduce.Job
import org.apache.hadoop.mapreduce.Mapper
import org.apache.hadoop.mapreduce.Reducer
import org.apache.hadoop.mapreduce.lib.input.TextInputFormat
import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat
import org.apache.hadoop.util.Tool
import org.apache.hadoop.util.ToolRunner
class CountGroovyJob extends Configured implements Tool {
@Override
int run(String[] args) throws Exception {
Job job = Job.getInstance(getConf(), "StartsWithCount")
job.setJarByClass(getClass())
// configure output and input source
TextInputFormat.addInputPath(job, new Path(args[0]))
job.setInputFormatClass(TextInputFormat)
// configure mapper and reducer
job.setMapperClass(StartsWithCountMapper)
job.setCombinerClass(StartsWithCountReducer)
job.setReducerClass(StartsWithCountReducer)
// configure output
TextOutputFormat.setOutputPath(job, new Path(args[1]))
job.setOutputFormatClass(TextOutputFormat)
job.setOutputKeyClass(Text)
job.setOutputValueClass(IntWritable)
return job.waitForCompletion(true) ? 0 : 1
}
static void main(String[] args) throws Exception {
System.exit(ToolRunner.run(new CountGroovyJob(), args))
}
class GroovyMapper extends Mapper<LongWritable, Text, Text, IntWritable> {
private final static IntWritable countOne = new IntWritable(1);
private final Text reusableText = new Text();
@Override
protected void map(LongWritable key, Text value, Mapper.Context context) {
value.toString().tokenize().each {
reusableText.set(it)
context.write(reusableText,countOne)
}
}
}
class GroovyReducer extends Reducer<Text, IntWritable, Text, IntWritable>{
private IntWritable outValue = new IntWritable();
@Override
protected void reduce(Text key, Iterable<IntWritable> values, Reducer.Context context) {
outValue.set(values.collect({it.value}).sum())
context.write(key, outValue);
}
}
}发布于 2016-03-04 15:35:58
您正在使用的库groovy表示它支持Hadoop 0.20.2。它真的很旧。
但是,您试图运行的CountGroovyJob.groovy代码看起来应该运行在Hadoop的2.x.x版本上。我可以看到这一点,因为在导入中您可以看到包,比如org.apache.hadoop.mapreduce.Mapper,而在版本2之前,它被称为org.apache.hadoop.mapred.Mapper。
在你所联系的问题中,投票最多的答案可能是你所需要的答案。你有个不兼容的问题。库无法使用Hadoop2.7.1。
https://stackoverflow.com/questions/35799580
复制相似问题