Hadoop presentation

2,088 views

Published on

Kiev, 26 of October

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
2,088
On SlideShare
0
From Embeds
0
Number of Embeds
424
Actions
Shares
0
Downloads
25
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Hadoop presentation

  1. 1. Hadoop Vladimir Orlov vorl@codeminders.comCopyright © 2011 Codeminders <vorl@codeminders.com>
  2. 2. О чем я расскажу?• О Hadoop в кратце• Примеры из жизни• Установка и настройка• Оптимизация MR-заданий• Отладка и алгоритмы
  3. 3. О Hadoop
  4. 4. Нadoop это:• MapReduce: JobTracker, TaskTracker• HDFS: NameNode, DataNode• Скрипты для управления кластером• Скрипты для работы с HDFS• API для написания MR-заданий• Hadoop-Streaming для не-Java MR заданий Copyright © 2011 Codeminders <vorl@codeminders.com>
  5. 5. Зоопарк Нadoop это:• Hive, Pig – аналоги Sawzall• HBase – аналог BigTable• Zookeeper – аналог Chubby• Mahout – коллекция MR алгоритмов• Nutch – open-source кровлер• Oozie, Azkaban, Hamake, Cascading Copyright © 2011 Codeminders <vorl@codeminders.com>
  6. 6. Терминология• 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 <vorl@codeminders.com>
  7. 7. Реализация MR заданий1.Создаем 2 класса, наследующие MapReduceBase и реализующие интерфейсы Mapper (с вашей map- функцией) и Reducer (с вашей reduce-функцией)2.Конфигурируем MapReduce-задание, создав экземпляр класса JobConf3.Передаем в JobConf параметры: путь к входному файлу на HDFS, путь к директории c результатом, формат входных и выходных данных, класс с map- функцией, класс с reduce-функцией4.Вызваем метод JobConf.runJob()5.Дальше - за вас работает Hadoop Copyright © 2011 Codeminders <vorl@codeminders.com>
  8. 8. Примеры из жизни
  9. 9. Корпоративный Веб-кровлер● Цель - реализация кровлера, собирающего и индексирующего данные с заданных веб- сайтов● Технологии: ● Nutch + Hadoop + HDFS – кровлинг и индексация ● Lucene + Solr – хранение, распределение индекса и обработка поисковых запросов ● Zookeeper – синхронизация м/у компонентами Copyright © 2011 Codeminders <vorl@codeminders.com>
  10. 10. Схема Компонентов Copyright © 2011 Codeminders <vorl@codeminders.com>
  11. 11. Особенности проекта ● Индексация – средствами Nutch ● Hadoop кластер на Windows ● Синхронизация – Zookeeper ● Ручное распределение индекса. Для обработки поисковых запросов – Solr Sharding:Copyright © 2011 Codeminders <vorl@codeminders.com>
  12. 12. Поиск одинаковых книг● Цель - определение книг, не отличающихся по содержанию среди всех, которые поступают на fb2pdf.com● Технологии: ● Hadoop + Mahout – кластеризация книг. В качестве меры расстояния – косинусное расстояние. Алгоритм кластеризации - Canopy ● Hamake – объединение MR-заданий в процесс Copyright © 2011 Codeminders <vorl@codeminders.com>
  13. 13. Цепочка MR-заданий Copyright © 2011 Codeminders <vorl@codeminders.com>
  14. 14. Несколько слов о Hamake...● Наблюдение 1: большинство задач по обработке данных нуждаются в более чем одном MR-задании.● Наблюдение 2: большинство таких заданий «управляются данными« (data-driven)● Hamake – утилита, которая позволяет описать процесс обработки данных ввиде потока, и запустить этот процесс на выполнение.● Поток представляет собой DAG, где узлы – данные, ребра – правило изменения данных. Copyright © 2011 Codeminders <vorl@codeminders.com>
  15. 15. Fold и Foreach<fold name="FindSimilar"> <foreach name="CalculateTF"> <input> <input> <file id="TFVector" path="/TF" /> <fileset id="terms" path="/terms" /> </input> </input> <output> <output> <include idref="clustersList" path="/clusters"/> <file id="TFVector" path="/TF/${foreach:filename}" /> </output> </output> <mapreduce jar="${lib}/hadoopJobs.job" <mapreduce jar="${lib}/hadoopJobs.job"main="com.example.Canopy"> main="com.example.CalculateTF"> ... ... </mapreduce> </mapreduce> </fold> </foreach> Copyright © 2011 Codeminders <vorl@codeminders.com>
  16. 16. Запуск процесса в Hamakehadoop 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 <vorl@codeminders.com>
  17. 17. Установка и настройка
  18. 18. Установка Hadoop• Пользуйтесь дистрибутивами Hadoop : ● Clouderas CDH ● Yahoo Distribution of Hadoop• Hadoop не работает на Windows (patch #6767)• Не используйте RAID• Для данных в S3, пользуйтесь EMR Copyright © 2011 Codeminders <vorl@codeminders.com>
  19. 19. Важные параметры• 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 <vorl@codeminders.com>
  20. 20. Тесты для 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 <vorl@codeminders.com>
  21. 21. Оптимизация и отладка
  22. 22. Самая важная оптимизация• Не создавайте объекты без необходимости • Например, ключи и значения в mapperе и reducerе Copyright © 2011 Codeminders <vorl@codeminders.com>
  23. 23. Почему?1.Создание объектов - дорогостоящая операция2.Создание объектов может приводить к не очевидным потерям памяти3.Все, что было создано, должно быть освобождено сборщиком мусора Copyright © 2011 Codeminders <vorl@codeminders.com>
  24. 24. Типы данных в Hadoop Writable Определяет протокол десериализации. Каждый тип данных в Hadoop является Writable.. Определяет порядок сортировки. Все WritableComparable ключи должны быть того же типа (но не значения). IntWritable LongWritable Конкретные классы для различный типов данных. Text … Copyright © 2011 Codeminders <vorl@codeminders.com>
  25. 25. Классы-обертки● типы данных в Hadoop являются “обертками” : • Text: строковый тип данных • IntWritable: целые числа • LongWritable: длинные целые числа • FloatWritable: числа с плавающей точкой • …● Почему? Writable определяет формат передачи данных по сети● Классы-обертки и их содержимое : • Важное различие! • Позволяет повторное использование оберток Copyright © 2011 Codeminders <vorl@codeminders.com>
  26. 26. Не переопределяйте объекты Map class Map class key = new key() value = new value() Map method (key, input) Map method (key, input) key = new key(…) key.set(…) value = new value(…) value.set(…) … … EMIT (key, value) EMIT (key, value) Не верно! Верно! Copyright © 2011 Codeminders <vorl@codeminders.com>
  27. 27. 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 <vorl@codeminders.com>
  28. 28. WritableComparable● Между фазами map и reduce: сортировка и перетасовка • Наивный подход: десериализация ключа и использование метода compareTo • например, a.compareTo(b) • В чем проблема?● WritableComparator: сравнивайте побайтно • Избегаем накладных расходов по созданию объекта • Операция может быть прервана досрочно, как только порядок устновлен • Реализуйте для очень быстрой сортировки! • Пример – org.apache.hadoop.io.Text Copyright © 2011 Codeminders <vorl@codeminders.com>
  29. 29. Combiner : WordCount Map(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 <vorl@codeminders.com>
  30. 30. WordCount без Combinerа dog 1 cat 1 cat 1 bird 1 dog 1 cat 1 dog 1 dog 1 Sort and Shuffledog 1 1 1 1 cat 1 1 1 bird 1 Copyright © 2011 Codeminders <vorl@codeminders.com>
  31. 31. WordCount c Combinerом dog 1 cat 1 cat 1 bird 1 dog 1 cat 1 dog 1 dog 1 Combine Combine cat 1 bird 1 dog 3 cat 2 dog 1 Sort and Shuffle dog 3 1 cat 1 2 bird 1 Copyright © 2011 Codeminders <vorl@codeminders.com>
  32. 32. Зачем нужен partitioner● При степенном распределении пространства ключей фаза reduce может вызываеть задержки● Помните подсчет слов -к сожалению, reducer завяз на подсчете количества слов “the”● Почему спекулятивное исполнение не справляется с этим?● Полезен при сортировке int getPartition(K2 key, V2 value, int numPartitions); Copyright © 2011 Codeminders <vorl@codeminders.com>
  33. 33. Отладка MR-заданий● Программная логика должна быть Hadoop- независимой • Не используйте Hadoop специфические классы (OutputCollector, Reporter, Writable) без крайней необходимости • Работайте с Hadoop API на интерфейсном уровне Copyright © 2011 Codeminders <vorl@codeminders.com>
  34. 34. Последовательность отладки1.JUnit2.LocalJobRunner. Недостатки : • DistributedCache не работает • mapred.reduce.tasks всегда 1 • абсолютно отдельная ветвь кода…3.MiniDFSCluster и MiniMRCluster Copyright © 2011 Codeminders <vorl@codeminders.com>
  35. 35. Литература и вопросы
  36. 36. Дополнительная информация1. Книга "Hadoop: The Definitive Guide", Tom White, 20092. Книга "Data-Intensive Text Processing with MapReduce" Jimmy Lin, 20103. Проект 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 <vorl@codeminders.com>
  37. 37. ?

×