首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用groovy运行hadoop wordCount示例

用groovy运行hadoop wordCount示例
EN

Stack Overflow用户
提问于 2016-03-04 15:19:16
回答 2查看 664关注 0票数 2

我试图使用groovy运行wordCount示例,但是遇到了一个错误。

代码语言:javascript
复制
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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-03-18 01:35:35

我能够使用Hadoop2.7.1运行 groovy文件,我遵循的过程是

  1. 安装级差
  2. 使用gradle生成jar文件。我问了问题,这帮助我在gradle中构建了依赖关系
  3. 像往常一样使用hadoop运行java文件,使用jar所在的文件夹中的这个命令。 hadoop jar buildSrc-1.0.jar in1 out4

其中in1是输入文件,out4是hdfs中的输出文件夹。

编辑-,因为上面的链接坏了,我在这里粘贴groovy文件。

代码语言:javascript
复制
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);
        }
    }
}
票数 2
EN

Stack Overflow用户

发布于 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。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35799580

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档