hadoop presentation

37
Hadoop Vladimir Orlov [email protected] Copyright © 2011 Codeminders <[email protected]>

Upload: vladimir-orlov

Post on 06-Dec-2014

1.713 views

Category:

Technology


4 download

DESCRIPTION

Kiev, 26 of October

TRANSCRIPT

Page 1: Hadoop presentation

HadoopVladimir Orlov

[email protected]

Copyright © 2011 Codeminders <[email protected]>

Page 2: Hadoop presentation

О чем я расскажу?

• О Hadoop в кратце• Примеры из жизни• Установка и настройка • Оптимизация MR-заданий• Отладка и алгоритмы

Page 3: Hadoop presentation

О Hadoop

Page 4: Hadoop presentation

Нadoop это:

• MapReduce: JobTracker, TaskTracker• HDFS: NameNode, DataNode• Скрипты для управления кластером• Скрипты для работы с HDFS• API для написания MR-заданий• Hadoop-Streaming для не-Java MR

заданий

Copyright © 2011 Codeminders <[email protected]>

Page 5: Hadoop presentation

Зоопарк Нadoop это:

• Hive, Pig – аналоги Sawzall• HBase – аналог BigTable• Zookeeper – аналог Chubby• Mahout – коллекция MR

алгоритмов• Nutch – open-source кровлер• Oozie, Azkaban, Hamake, Cascading

Copyright © 2011 Codeminders <[email protected]>

Page 6: Hadoop presentation

Терминология

• Job (задание) – “вся программа” – выполнение Mapper'ов и Reducer'ов на всем множестве входных данных

• Task (задача) – выполнение Mapper'ов и Reducer'ов на части входных данных

• Task Attempt (попытка выполнения задачи) – экземпляр запущенной задачи на определенной машине

• Mapper - map (in_key, in_value) -> (inter_key, inter_value) list

• Reducer - reduce (inter_key, inter_value list) -> (out_key, out_value) list

• Partitioner – класс, ответственный за распределение пар ключ/значение м/у reducer'ами

• Input/Output Format – формат входных/выходных данных

Copyright © 2011 Codeminders <[email protected]>

Page 7: Hadoop presentation

Реализация MR заданий

1.Создаем 2 класса, наследующие MapReduceBase и реализующие интерфейсы Mapper (с вашей map-функцией) и Reducer (с вашей reduce-функцией)

2.Конфигурируем MapReduce-задание, создав экземпляр класса JobConf

3.Передаем в JobConf параметры: путь к входному файлу на HDFS, путь к директории c результатом, формат входных и выходных данных, класс с map-функцией, класс с reduce-функцией

4.Вызваем метод JobConf.runJob()5.Дальше - за вас работает Hadoop

Copyright © 2011 Codeminders <[email protected]>

Page 8: Hadoop presentation

Примеры из жизни

Page 9: Hadoop presentation

Корпоративный Веб-кровлер

● Цель - реализация кровлера, собирающего и индексирующего данные с заданных веб-сайтов

● Технологии: ● Nutch + Hadoop + HDFS – кровлинг и

индексация● Lucene + Solr – хранение, распределение

индекса и обработка поисковых запросов● Zookeeper – синхронизация м/у

компонентамиCopyright © 2011 Codeminders <[email protected]>

Page 10: Hadoop presentation

Схема Компонентов

Copyright © 2011 Codeminders <[email protected]>

Page 11: Hadoop presentation

Особенности проекта● Индексация – средствами Nutch● Hadoop кластер на Windows● Синхронизация – Zookeeper● Ручное распределение индекса. Для обработки

поисковых запросов – Solr Sharding:

Copyright © 2011 Codeminders <[email protected]>

Page 12: Hadoop presentation

Поиск одинаковых книг

● Цель - определение книг, не отличающихся по содержанию среди всех, которые поступают на fb2pdf.com

● Технологии: ● Hadoop + Mahout – кластеризация книг. В

качестве меры расстояния – косинусное расстояние. Алгоритм кластеризации - Canopy

● Hamake – объединение MR-заданий в процесс

Copyright © 2011 Codeminders <[email protected]>

Page 13: Hadoop presentation

Цепочка MR-заданий

Copyright © 2011 Codeminders <[email protected]>

Page 14: Hadoop presentation

Несколько слов о Hamake...

● Наблюдение 1: большинство задач по обработке данных нуждаются в более чем одном MR-задании.

● Наблюдение 2: большинство таких заданий «управляются данными« (data-driven)

● Hamake – утилита, которая позволяет описать процесс обработки данных ввиде потока, и запустить этот процесс на выполнение.

● Поток представляет собой DAG, где узлы – данные, ребра – правило изменения данных.

Copyright © 2011 Codeminders <[email protected]>

Page 15: Hadoop presentation

Fold и Foreach

<foreach name="CalculateTF">

<input>

<fileset id="terms" path="/terms" />

</input>

<output>

<file id="TFVector" path="/TF/${foreach:filename}" />

</output>

<mapreduce jar="${lib}/hadoopJobs.job" main="com.example.CalculateTF">

...

</mapreduce>

</foreach>

<fold name="FindSimilar"> <input> <file id="TFVector" path="/TF" /> </input> <output> <include idref="clustersList" path="/clusters"/> </output> <mapreduce jar="${lib}/hadoopJobs.job" main="com.example.Canopy"> ... </mapreduce> </fold>

Copyright © 2011 Codeminders <[email protected]>

Page 16: Hadoop presentation

Запуск процесса в Hamake

hadoop jar hamake-2.0b-3.jar -f hamakefile.xml

>10/05/05 17:28:55 INFO hamake.Main: Using Hadoop 0.xx.x>10/05/05 17:28:55 INFO hamake.Main: Working dir: file:/home/project/HaMake/src/hamake>10/05/05 17:28:55 INFO hamake.Main: Reading hamake-file my-first-hamakefile.xml>10/05/05 17:28:59 INFO hamake.TaskRunner: Starting randomtextwriter...>10/05/05 17:29:05 WARN hamake.Hamake: Some of your tasks have called System.exit() method. This is not recommended behaviour because it will prevent Hamake from launching other tasks.>10/05/05 17:29:05 INFO hamake.TaskRunner: Execution of randomtextwriter is completed>10/05/05 17:29:05 INFO hamake.TaskRunner: Starting wordcount...>10/05/05 17:29:10 WARN hamake.Hamake: Some of your tasks have called System.exit() method. This is not recommended behaviour because it will prevent Hamake from launching other tasks.>10/05/05 17:29:10 INFO hamake.TaskRunner: Execution of wordcount is completed

Copyright © 2011 Codeminders <[email protected]>

Page 17: Hadoop presentation

Установка и настройка

Page 18: Hadoop presentation

Установка Hadoop

• Пользуйтесь дистрибутивами Hadoop :● Cloudera's CDH● Yahoo Distribution of Hadoop

• Hadoop не работает на Windows (patch #6767)

• Не используйте RAID• Для данных в S3, пользуйтесь EMR

Copyright © 2011 Codeminders <[email protected]>

Page 19: Hadoop presentation

Важные параметры

• dfs.block.size <= 128Mb (hdfs-site.xml)

• dfs.datanode.du.reserved – оставляйте место для системных файлов

• io.file.buffer.size <=64Kb (core-site.xml)

• mapred.child.java.opts – параметры JVM для дочерних mapper'ов и reducer'ов

• io.sort.mb – количество памяти в Mb, выделяемое на сортировку

• mapred.(map|reduce).tasks – число должно быть равно <количеству процессоров - 1>

Copyright © 2011 Codeminders <[email protected]>

Page 20: Hadoop presentation

Тесты для Hadoop

• TestDFSIO – простой тест для HDFS• Gridmix – группа тестов,

симулирующие «реальную» нагрузку• RandomWriter + Sort:

hadoop jar hadoop-*-examples.jar randomwriter random-data

hadoop jar hadoop-*-examples.jar sort random-data sorted-data

hadoop jar hadoop-*-test.jar testmapredsort -sortInput random-data -sortOutput sorted-data

Copyright © 2011 Codeminders <[email protected]>

Page 21: Hadoop presentation

Оптимизация и отладка

Page 22: Hadoop presentation

Самая важная оптимизация

• Не создавайте объекты без необходимости

• Например, ключи и значения в mapper'е и reducer'е

Copyright © 2011 Codeminders <[email protected]>

Page 23: Hadoop presentation

Почему?

1.Создание объектов - дорогостоящая операция

2.Создание объектов может приводить к не очевидным потерям памяти

3.Все, что было создано, должно быть освобождено сборщиком мусора

Copyright © 2011 Codeminders <[email protected]>

Page 24: Hadoop presentation

Типы данных в Hadoop

Writable

WritableComparable

IntWritableLongWritable

Text

Определяет протокол десериализации. Каждый тип данных в Hadoop является Writable..

Определяет порядок сортировки. Все ключи должны быть того же типа (но не значения).

Конкретные классы для различный типов данных.

Copyright © 2011 Codeminders <[email protected]>

Page 25: Hadoop presentation

Классы-обертки

● типы данных в Hadoop являются “обертками” :• Text: строковый тип данных• IntWritable: целые числа• LongWritable: длинные целые числа • FloatWritable: числа с плавающей точкой• …

● Почему? Writable определяет формат передачи данных по сети

● Классы-обертки и их содержимое :• Важное различие!• Позволяет повторное использование оберток

Copyright © 2011 Codeminders <[email protected]>

Page 26: Hadoop presentation

Не переопределяйте объекты

Map method (key, input)

key = new key(…) value = new value(…) … EMIT (key, value)

Map class

Не верно!

Map method (key, input)

key.set(…) value.set(…) … EMIT (key, value)

Map class

Верно!

key = new key()value = new value()

Copyright © 2011 Codeminders <[email protected]>

Page 27: Hadoop presentation

Reducer

● Внутри reducer, API предоставляет Вам итератор поверх значений• Будте внимательны - это каждый раз тот же самый

объект, заполненный другим содержимым!

protected void reduce(KEYIN key, Iterable<VALUEIN> values, Context context

) throws IOException, InterruptedException {

for(VALUEIN value: values) {

context.write((KEYOUT) key, (VALUEOUT) value);

}

}

Copyright © 2011 Codeminders <[email protected]>

Page 28: Hadoop presentation

WritableComparable● Между фазами map и reduce: сортировка и перетасовка

• Наивный подход: десериализация ключа и использование метода compareTo

• например, a.compareTo(b)• В чем проблема?

● WritableComparator: сравнивайте побайтно• Избегаем накладных расходов по созданию объекта • Операция может быть прервана досрочно, как

только порядок устновлен• Реализуйте для очень быстрой сортировки!• Пример – org.apache.hadoop.io.Text

Copyright © 2011 Codeminders <[email protected]>

Page 29: Hadoop presentation

Combiner : WordCountMap(String key, String value):

// key: имя документа

// value: содержимое документа

for each word w in value:

Emit(w, 1);

Reduce(String key, Iterator<Integer> values):

// key: слово, одно и тоже для ввода и ввывода

// values: список счетчиков

int result = 0;

for each v in values:

result += v;

Emit(key, result);

Copyright © 2011 Codeminders <[email protected]>

Page 30: Hadoop presentation

WordCount без Combiner'а

dog 1

cat 1

dog 1

dog 1

cat 1

bird 1

cat 1

dog 1

dog 1 1 1 1

Sort and Shuffle

cat 1 1 1 bird 1

Copyright © 2011 Codeminders <[email protected]>

Page 31: Hadoop presentation

WordCount c Combiner'омdog 1

cat 1

dog 1

dog 1

cat 1

bird 1

cat 1

dog 1

Combine

dog 3 1

Sort and Shuffle

cat 1 2 bird 1

Combine

cat 1

dog 3

bird 1

cat 2

Copyright © 2011 Codeminders <[email protected]>

dog 1

Page 32: Hadoop presentation

Зачем нужен partitioner

● При степенном распределении пространства ключей фаза reduce может вызываеть задержки

● Помните подсчет слов -к сожалению, reducer завяз на подсчете количества слов “the”

● Почему спекулятивное исполнение не справляется с этим?

● Полезен при сортировке

int getPartition(K2 key, V2 value, int numPartitions);Copyright © 2011 Codeminders <[email protected]>

Page 33: Hadoop presentation

Отладка MR-заданий

● Программная логика должна быть Hadoop- независимой

• Не используйте Hadoop специфические классы (OutputCollector, Reporter, Writable) без крайней необходимости

• Работайте с Hadoop API на интерфейсном уровне

Copyright © 2011 Codeminders <[email protected]>

Page 34: Hadoop presentation

Последовательность отладки

1.JUnit2.LocalJobRunner. Недостатки :

• DistributedCache не работает• mapred.reduce.tasks всегда 1• абсолютно отдельная ветвь кода…

3.MiniDFSCluster и MiniMRCluster

Copyright © 2011 Codeminders <[email protected]>

Page 35: Hadoop presentation

Литература и вопросы

Page 36: Hadoop presentation

Дополнительная информация

1. Книга "Hadoop: The Definitive Guide", Tom White, 2009

2. Книга "Data-Intensive Text Processing with MapReduce" Jimmy Lin, 2010

3. Проект Mahout: http://mahout.apache.org/

4. Проект Hamake: http://code.google.com/p/hamake/

5. Проект Nutch: http://nutch.apache.org/

6. Сайт компании Cloudera: http://www.cloudera.com/

7. Yahoo! Hadoop distribtion: http://developer.yahoo.com/hadoop/distribution/

Copyright © 2011 Codeminders <[email protected]>

Page 37: Hadoop presentation

?