Статьи

Выполнение задания по уменьшению карты в Apache Hadoop (многоузловой кластер)

Здесь мы опишем процесс запуска MapReduce Job в Apache Hadoop в многоузловом кластере. Чтобы настроить Apache Hadoop в Multinode Cluster, можно прочитать раздел Настройка Apache Hadoop Multi-Node Cluster .

Для настройки мы должны настроить hadoop со следующими параметрами на каждой машине:

  • Добавьте следующее свойство в conf / mapred-site.xml во всех узлах
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<property>
<name>mapred.job.tracker</name>
<value>master:54311</value>
 
<description>The host and port that the MapReduce job tracker runs
at. If “local”, then jobs are run in-process as a single map
and reduce task.
</description>
</property>
 
<property>
<name>mapred.local.dir</name>
<value>${hadoop.tmp.dir}/mapred/local</value>
</property>
 
<property>
<name>mapred.map.tasks</name>
<value>20</value>
</property>
 
<property>
<name>mapred.reduce.tasks</name>
<value>2</value>
</property>

NB. Последние три являются дополнительными настройками, поэтому мы можем их опустить.

  • Проект Гутенберга

Для нашей демонстрационной цели MapReduce мы будем использовать пример работы WordCount, который читает текстовые файлы и подсчитывает, как часто встречаются слова. Входные данные представляют собой текстовые файлы, а выходные данные представляют собой текстовые файлы, каждая строка которых содержит слово и счетчик частоты его появления, разделенных вкладкой.

Загрузите примеры входных данных со следующих сайтов, и все электронные тексты должны быть в текстовом формате us-ascii.

  • Очерк науки, вып. 1 (из 4) Дж. Артур Томсон
  • Записные книжки Леонардо да Винчи
  • Улисс Джеймсом Джойсом
  • Искусство войны 6-го века BC Sunzi
  • Приключения Шерлока Холмса сэр Артур Конан Дойл
  • Словарь дьявола Амброз Бирс
  • Британская энциклопедия, 11-е издание, том 4, часть 3

Пожалуйста, Google для этих текстов. Загрузите каждую электронную книгу в виде текстовых файлов в кодировке UTF-8 в виде простого текста и сохраните файлы в локальном временном каталоге, например / tmp / gutenberg. Проверьте файлы с помощью следующей команды:

1
$ ls -l /tmp/gutenberg/
  • Затем мы запускаем слой dfs и mapred в нашем кластере.
1
2
3
$ start-dfs.sh
 
$ start-mapred.sh

Проверьте, введя следующую команду jps, чтобы проверить датоды, наменоды и систему отслеживания задач. Система отслеживания заданий исправна и работает на всех узлах.

  • Далее мы скопируем локальные файлы (здесь текстовые файлы) в Hadoop HDFS
1
2
3
$ hadoop dfs -copyFromLocal /tmp/gutenberg /Users/hduser/gutenberg
 
$ hadoop dfs -ls /Users/hduser

Если файлы успешно скопированы, мы увидим что-то вроде ниже — Найдено 2 пункта

1
drwxr-xr-x – hduser supergroup 0 2013-05-21 14:48 /Users/hduser/gutenberg

Кроме того, мы проверяем нашу файловую систему в / Users / hduser / gutenberg:

1
$ hadoop dfs -ls /Users/hduser/gutenberg
1
2
3
4
5
6
7
8
9
Found 7 items
 
-rw-r--r-- 2 hduser supergroup 336705 2013-05-21 14:48 /Users/hduser/gutenberg/pg132.txt
-rw-r--r-- 2 hduser supergroup 581877 2013-05-21 14:48 /Users/hduser/gutenberg/pg1661.txt
-rw-r--r-- 2 hduser supergroup 1916261 2013-05-21 14:48 /Users/hduser/gutenberg/pg19699.txt
-rw-r--r-- 2 hduser supergroup 674570 2013-05-21 14:48 /Users/hduser/gutenberg/pg20417.txt
-rw-r--r-- 2 hduser supergroup 1540091 2013-05-21 14:48 /Users/hduser/gutenberg/pg4300.txt
-rw-r--r-- 2 hduser supergroup 447582 2013-05-21 14:48 /Users/hduser/gutenberg/pg5000.txt
-rw-r--r-- 2 hduser supergroup 384408 2013-05-21 14:48 /Users/hduser/gutenberg/pg972.txt
  • Мы начинаем нашу работу MapReduce

Давайте запустим пример MapReduce WordCount:

1
$ hadoop jar hadoop-examples-1.0.4.jar wordcount /Users/hduser/gutenberg /Users/hduser/gutenberg-output

NB: Предполагая, что вы уже находитесь в директории HADOOP_HOME. Если нет то

1
$ hadoop jar ABSOLUTE/PATH/TO/HADOOP/DIR/hadoop-examples-1.0.4.jar wordcount /Users/hduser/gutenberg /Users/hduser/gutenberg-output

Или, если вы установили Hadoop в / usr / local / hadoop,

1
hadoop jar /usr/local/hadoop/hadoop-examples-1.0.4.jar wordcount /Users/hduser/gutenberg /Users/hduser/gutenberg-output

Вывод выглядит примерно так:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
13/05/22 13:12:13 INFO mapred.JobClient:  map 0% reduce 0%
13/05/22 13:12:59 INFO mapred.JobClient:  map 28% reduce 0%
13/05/22 13:13:05 INFO mapred.JobClient:  map 57% reduce 0%
13/05/22 13:13:11 INFO mapred.JobClient:  map 71% reduce 0%
13/05/22 13:13:20 INFO mapred.JobClient:  map 85% reduce 0%
13/05/22 13:13:26 INFO mapred.JobClient:  map 100% reduce 0%
13/05/22 13:13:43 INFO mapred.JobClient:  map 100% reduce 50%
13/05/22 13:13:55 INFO mapred.JobClient:  map 100% reduce 100%
13/05/22 13:13:59 INFO mapred.JobClient:  map 85% reduce 100%
13/05/22 13:14:02 INFO mapred.JobClient:  map 100% reduce 100%
13/05/22 13:14:07 INFO mapred.JobClient: Job complete: job_201305211616_0011
13/05/22 13:14:07 INFO mapred.JobClient: Counters: 26
13/05/22 13:14:07 INFO mapred.JobClient:   Job Counters
13/05/22 13:14:07 INFO mapred.JobClient:     Launched reduce tasks=3
13/05/22 13:14:07 INFO mapred.JobClient:     SLOTS_MILLIS_MAPS=118920
13/05/22 13:14:07 INFO mapred.JobClient:     Total time spent by all reduces waiting after reserving slots (ms)=0
13/05/22 13:14:07 INFO mapred.JobClient:     Total time spent by all maps waiting after reserving slots (ms)=0
13/05/22 13:14:07 INFO mapred.JobClient:     Launched map tasks=10
13/05/22 13:14:07 INFO mapred.JobClient:     Data-local map tasks=10
13/05/22 13:14:07 INFO mapred.JobClient:     SLOTS_MILLIS_REDUCES=54620
13/05/22 13:14:07 INFO mapred.JobClient:   File Output Format Counters
13/05/22 13:14:07 INFO mapred.JobClient:     Bytes Written=1267287
13/05/22 13:14:07 INFO mapred.JobClient:   FileSystemCounters
13/05/22 13:14:07 INFO mapred.JobClient:     FILE_BYTES_READ=4151123
13/05/22 13:14:07 INFO mapred.JobClient:     HDFS_BYTES_READ=5882320
13/05/22 13:14:07 INFO mapred.JobClient:     FILE_BYTES_WRITTEN=6937084
13/05/22 13:14:07 INFO mapred.JobClient:     HDFS_BYTES_WRITTEN=1267287
13/05/22 13:14:07 INFO mapred.JobClient:   File Input Format Counters
13/05/22 13:14:07 INFO mapred.JobClient:     Bytes Read=5881494
13/05/22 13:14:07 INFO mapred.JobClient:   Map-Reduce Framework
13/05/22 13:14:07 INFO mapred.JobClient:     Reduce input groups=114901
13/05/22 13:14:07 INFO mapred.JobClient:     Map output materialized bytes=2597630
13/05/22 13:14:07 INFO mapred.JobClient:     Combine output records=178795
13/05/22 13:14:07 INFO mapred.JobClient:     Map input records=115251
13/05/22 13:14:07 INFO mapred.JobClient:     Reduce shuffle bytes=1857123
13/05/22 13:14:07 INFO mapred.JobClient:     Reduce output records=114901
13/05/22 13:14:07 INFO mapred.JobClient:     Spilled Records=463427
13/05/22 13:14:07 INFO mapred.JobClient:     Map output bytes=9821180
13/05/22 13:14:07 INFO mapred.JobClient:     Total committed heap usage (bytes)=1567514624
13/05/22 13:14:07 INFO mapred.JobClient:     Combine input records=1005554
13/05/22 13:14:07 INFO mapred.JobClient:     Map output records=1005554
13/05/22 13:14:07 INFO mapred.JobClient:     SPLIT_RAW_BYTES=826
13/05/22 13:14:07 INFO mapred.JobClient:     Reduce input records=178795
  • Получение результата работы

Для чтения напрямую из hadoop без копирования в локальную файловую систему:

1
$ hadoop dfs -cat /Users/hduser/gutenberg-output/part-r-00000

Давайте скопируем результаты в локальную файловую систему.

1
2
3
4
5
$ mkdir /tmp/gutenberg-output
 
$ bin/hadoop dfs -getmerge /Users/hduser/gutenberg-output /tmp/gutenberg-output
 
$ head /tmp/gutenberg-output/gutenberg-output

Мы получим вывод как:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
  
"'Ample.' 1
"'Arthur!' 1
"'As 1
"'Because 1
"'But,' 1
"'Certainly,' 1
"'Come, 1
"'DEAR 1
"'Dear 2
"'Dearest 1
"'Don't 1
"'Fritz! 1
"'From 1
"'Have 1
"'Here 1
"'How 2

Команда fs -getmerge просто объединит любые файлы, найденные в указанном вами каталоге. Это означает, что объединенный файл может (и, скорее всего, будет) не сортироваться.

Ресурсы:

Ссылка: Запуск Map-Reduce Job в Apache Hadoop (Multinode Cluster) от нашего партнера JCG Пияса Де из блога в блоге Phlox .