2016-03-04 2 views
2

Я пытался запустить пример WordCount с заводной помощью this но возникает ошибкуработает Hadoop WordCount примера с заводной

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

НАЙДЕНЫ this для выше ошибок, но не могу найти файл pom.xml в моей установке.

Затем я наткнулся на this. Как мы запускаем это в hadoop. Является ли это путем создания файла банку и запустить так же, как в примере Java? (Который бежал отлично)

В чем разница между работает заводной пример использования groovy-hadoop и с помощью this файл (не знаю, как управлять этим) и hadoop-streaming ? почему мы будем использовать один метод над другими.

Я установил Hadoop 2.7.1 на макинтош 10.10.3

ответ

2

я смог запустить this заводной файл с Hadoop 2.7.1 Процедура Я последовал это

  1. Установите Gradle
  2. Сформировать файл банку с помощью Gradle. Я задал вопрос this, который помог мне построить зависимости в графе
  3. Запуск с hadoop, как обычно, когда мы запускаем java-файл jar с помощью этой команды из папки, в которой находится jar.

    hadoop jar buildSrc-1.0.jar in1 out4

где in1 является входной файл и out4 является выходной папки в HDFS

Edit- Как выше ссылка сломана, я вставляя заводной файл здесь.

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); 
     } 
    } 
} 
0

Библиотека вы используете, заводной-Hadoop, говорит, что он поддерживает Hadoop 0.20.2. Это действительно старо.

Но код CountGroovyJob.groovy, который вы пытаетесь запустить, выглядит так, как будто он должен работать на версиях 2.x.x Hadoop. Я вижу это, потому что в импорте вы видите пакеты, такие как org.apache.hadoop.mapreduce.Mapper, тогда как до версии 2 он назывался org.apache.hadoop.mapred.Mapper.

Самый проголосовавший ответ в вопросе SO, который вы связали, вероятно, является ответом, который вам нужен. У вас проблема несовместимости. Библиотека groovy-hadoop не может работать с вашим Hadoop 2.7.1.

+0

Спасибо. Самый проголосовавший ответ попросил нас обновить pom.xml, но где он. Я смотрю '/ usr/local/Cellar/hadoop/2.7.1/libexec/etc/hadoop'. Также посмотрел в '/ usr/local/Cellar/hadoop/2.7.1/libexec/sbin', но не смог найти. Кроме того, любая идея, как запустить файл groovy, с которым я связан? – user1207289

+0

Файл pom.xml является конфигурационным файлом Maven для создания библиотеки. Так автор этой старой библиотеки использовал для сборки банки, которые доступны на этом веб-сайте. К сожалению, похоже, что он не поделился своим исходным кодом (я не могу найти его в любом случае), поэтому вы не можете изменить этот pom.xml и перестроить/исправить. – Nicomak

Смежные вопросы