【问题标题】:running hadoop wordCount example with groovy使用 groovy 运行 hadoop wordCount 示例
【发布时间】:2023-03-15 16:42:01
【问题描述】:

我尝试使用this 使用 groovy 运行 wordCount 示例,但遇到错误

Found interface org.apache.hadoop.mapreduce.JobContext, but class was expected

找到this 上面的错误,但在我的设置中找不到 pom.xml 文件。

然后我遇到了this。我们如何在 hadoop 中运行它。是通过制作一个jar文件并像java示例一样运行吗?(运行良好)

使用groovy-hadoop 和使用this 文件(不确定如何运行)和hadoop-streaming 运行一个groovy 示例有什么区别?为什么我们要使用一种方法而不是其他方法。

我已经在 mac 10.10.3 上安装了 hadoop 2.7.1

【问题讨论】:

    标签: java hadoop groovy hadoop2 hadoop-streaming


    【解决方案1】:

    我能够使用 hadoop 2.7.1 运行 this groovy 文件 我遵循的程序是

    1. 安装 gradle
    2. 使用 gradle 生成 jar 文件。我问了this 帮助我在 gradle 中构建依赖项的问题
    3. 像往常一样使用 hadoop 运行,因为我们使用此命令从 jar 所在的文件夹运行 java jar 文件。

      hadoop jar buildSrc-1.0.jar in1 out4

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

    EDIT-由于上面的链接坏了,我把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);
            }
        }
    }
    

    【讨论】:

      【解决方案2】:

      您使用的库 groovy-hadoop 说它支持 Hadoop 0.20.2。它真的很旧。

      但是您尝试运行的CountGroovyJob.groovy 代码看起来应该在Hadoop 的2.x.x 版本上运行。 我可以看到这一点,因为在导入中您会看到诸如 org.apache.hadoop.mapreduce.Mapper 之类的包,而在版本 2 之前,它被称为 org.apache.hadoop.mapred.Mapper

      您链接的 SO 问题中投票最多的答案可能是您需要的答案。你有一个不兼容的问题。 groovy-hadoop 库无法与您的 Hadoop 2.7.1 一起使用。

      【讨论】:

      • 谢谢。大多数投票的答案要求我们更新 pom.xml,但它在哪里。我看/usr/local/Cellar/hadoop/2.7.1/libexec/etc/hadoop。还查看了/usr/local/Cellar/hadoop/2.7.1/libexec/sbin,但找不到。另外,知道如何运行我链接到的 groovy 文件吗?
      • pom.xml 是构建库的 Maven 配置文件。这就是这个旧库的作者用来构建该网站上可用的 jar 的方式。不幸的是,看起来他没有分享他的源代码(我反正找不到),所以你不能修改那个 pom.xml 并重建/修复它。
      猜你喜欢
      • 1970-01-01
      • 2015-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-08
      • 2015-02-09
      • 1970-01-01
      • 2015-06-11
      相关资源
      最近更新 更多