2013-07-01 4 views
0

Как вызвать метод сокращения карты в нормальном проекте java и можно ли вернуть результат редуктора как Arraylist/Hashmap вместо плоского файла и как получить доступ к методу mapreduce из jboss appServer.MapReduce output как ArrayList

+0

Посмотрите, как это делает Apache MRUnit, вы можете использовать его для своих требований. –

+0

@ThomasJungblut, я прошел через ur 'http: // stackoverflow.com/questions/9849776/call-a-mapreduce-job-from-a-simple-java-program', чтобы вызвать метод mapreduce с удаленного сервера, он пошел отлично, но как получить вывод mapreduce в удаленной машине, которая вызывает MP? – Jeevanantham

+0

Доступ к выходным данным из файловой системы. –

ответ

0

Вот пример программы, которая использует MultipleOutput

public void reduce(Text key, Iterator<IntWritable> values, 
      OutputCollector<Text, IntWritable> output, Reporter reporter) 
      throws IOException { 
     int total = 0; 
      for (; values.hasNext();) { 
      total += values.next().get(); 
      mos.getCollector("text", reporter).collect(key, 
        new IntWritable(total)); 
      mos.getCollector("seq", reporter).collect(key, 
        new IntWritable(total)); 
     } 

    } 

Вы должны были бы создать экземпляр MultipleOutputs в методе конфигурирования.

private MultipleOutputs mos; 

    @Override 
    public void configure(JobConf job) { 

     mos = new MultipleOutputs(job); 
    } 

В вашем классе драйверов вам необходимо указать, какие все форматы ввода вы хотите использовать. Ниже будет генерироваться ваш результат в форматах файлов Text и Sequence.

// Defines additional single text based output 'text' for the job 
    MultipleOutputs.addNamedOutput(conf, "text", TextOutputFormat.class, 
      Text.class, IntWritable.class); 

    // Defines additional sequence-file based output 'sequence' for the job 
    MultipleOutputs.addNamedOutput(conf, "seq", 
      SequenceFileOutputFormat.class, Text.class, IntWritable.class); 

Но из того, что я понял из вашего вопроса, вы в основном хотите получить доступ к вашему выходному файлу mapreduce из своего кода. Вы можете загрузить выходной файл с помощью HDFS API. Но лучше было бы поместить ваши данные в таблицу Hive и получить доступ с помощью JDBC.

+0

Я использую версию Hadoop-0.20.2, в которой больше классов, таких как класс JobConf и т. Д., Устарели, может ли u plz предложить стабильную версия Hadoop, которая также предоставляет функцию MultipleOutputs. спасибо – Jeevanantham

+0

Вы можете использовать новые MR API. Это использование org.apache.hadoop.mapreduce.lib.output.MultipleOutputs вместо org.apache.hadoop.mapred.lib.MultipleOutputs. –