Hadoop: Какой картограф вернул какой результат? - PullRequest
0 голосов
/ 21 мая 2018

Я новичок в Hadoop.Я хочу запустить пример MapReduce и увидеть его результаты с помощью калькулятора Mapper.То есть, я хочу знать, какой промежуточный результат рассчитывается по какому мапперу?Является ли это возможным?Как?

Я установил Hadoop 2.9.0 (многоузловой кластер).

1 Ответ

0 голосов
/ 21 мая 2018

Сначала мы рассмотрим пример кода (я установил кластер HDP, поэтому путь к файлу .jar может отличаться)

Образцы текстовых файлов в качестве входных данных:

$ bin /hadoop dfs -ls / wordcount / input /

/ wordcount / input / file01

/ wordcount / input / file02

$ bin / hadoop dfs-cat / wordcount / input / file01

Hello World Bye World

$ bin / hadoop dfs -cat / wordcount / input / file02

Hello Hadoop Goodbye Hadoop

Запустите приложение:

$ bin / hadoop jar /usr/hdp/2.6xx/hadoop-mapreduce/hadoo-mapreduce-examples.jar wordcount/ wordcount / input / wordcount / output

Примечание: вам не нужно писать программу подсчета слов, она по умолчанию предоставляется в папке mapreduce, как я уже упоминал,Приведенный ниже код предназначен только для ссылки на рабочий

Выход:

$ bin / hadoop dfs -cat / wordcount / output / part-00000

Пока 1

До свидания 1

Hadoop 2

Hello 2

World 2

Теперь давайте посмотрим, как работают преобразователь и преобразователи в бэкэнде:

Приложение WordCount довольно простое.

Реализация Mapper (строки14-26) , с помощью метода карты (строки 18-25) , обрабатывает по одной строке за раз, как предусмотрено указанным TextInputFormat (строка 49) .Затем он разбивает строку на токены, разделенные пробелами, через StringTokenizer и испускает пару ключ-значение <, 1>.

. Для данного примера ввода выдается first map :

вторая карта испускает:

Мы узнаем больше о количестве карт, порождаемых для данной работы, и о том, как управлять ими более детально, чуть позже в руководстве.

WordCount также задает объединитель (строка 46 ).Следовательно, выходные данные каждой карты передаются через локальный объединитель (который совпадает с редуктором в соответствии с конфигурацией задания) для локальной агрегации после сортировки по ключам.

Выходные данные первая карта :

Выход вторая карта :

<До свидания, 1>

Редуктор реализация (строки 28-36) с помощью метода Reduce (строки 29-35) просто суммирует значения, которые являются счетчиками вхождений для каждого ключа (т. Е. Слова в этом примере).

Таким образом, вывод задания равен :

Метод run указывает различные аспекты задания, например пути ввода / вывода (передается через командную строку), типы ключей / значений, форматы ввода / вывода и т. д., в JobConf.Затем он вызывает JobClient.runJob (строка 55) для отправки и отслеживания хода выполнения.

Теперь программа подсчета слов, которая упоминается здесь:

1.  package org.myorg;

2.  

3.  import java.io.IOException;

4.  import java.util.*;


5.  

6.  import org.apache.hadoop.fs.Path;

7.  import org.apache.hadoop.conf.*;

8.  import org.apache.hadoop.io.*;

9.  import org.apache.hadoop.mapred.*;

10. import org.apache.hadoop.util.*;

11. 

12. public class WordCount {

13. 

14.    public static class Map extends MapReduceBase implements Mapper<LongWritable, Text, Text, IntWritable> {

15.      private final static IntWritable one = new IntWritable(1);

16.      private Text word = new Text();

17. 

18.      public void map(LongWritable key, Text value, OutputCollector<Text, IntWritable> output, Reporter reporter) throws IOException {

19.        String line = value.toString();

20.        StringTokenizer tokenizer = new StringTokenizer(line);

21.        while (tokenizer.hasMoreTokens()) {

22.          word.set(tokenizer.nextToken());

23.          output.collect(word, one);

24.        }

25.      }

26.    }

27. 

28.    public static class Reduce extends MapReduceBase implements Reducer<Text, IntWritable, Text, IntWritable> {

29.      public void reduce(Text key, Iterator<IntWritable> values, OutputCollector<Text, IntWritable> output, Reporter reporter) throws IOException {


30.        int sum = 0;

31.        while (values.hasNext()) {

32.          sum += values.next().get();

33.        }

34.        output.collect(key, new IntWritable(sum));

35.      }

36.    }

37. 

38.    public static void main(String[] args) throws Exception {

39.      JobConf conf = new JobConf(WordCount.class);

40.      conf.setJobName("wordcount");

44. 

45.      conf.setMapperClass(Map.class);

46.      conf.setCombinerClass(Reduce.class);

47.      conf.setReducerClass(Reduce.class);

48. 

49.      conf.setInputFormat(TextInputFormat.class);

50.      conf.setOutputFormat(TextOutputFormat.class);

51. 

52.      FileInputFormat.setInputPaths(conf, new Path(args[0]));

53.      FileOutputFormat.setOutputPath(conf, new Path(args[1]));

54. 

55.      JobClient.runJob(conf);

57.    }

58. }

59.

Ссылка: Учебник MapReduce

...