Hadoop presentation
Upcoming SlideShare
Loading in...5
×
 

Hadoop presentation

on

  • 1,592 views

Kiev, 26 of October

Kiev, 26 of October

Statistics

Views

Total Views
1,592
Slideshare-icon Views on SlideShare
1,272
Embed Views
320

Actions

Likes
0
Downloads
21
Comments
0

1 Embed 320

http://xpinjection.com 320

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Hadoop presentation Hadoop presentation Presentation Transcript

    • Hadoop Vladimir Orlov vorl@codeminders.comCopyright © 2011 Codeminders <vorl@codeminders.com>
    • О чем я расскажу?• О Hadoop в кратце• Примеры из жизни• Установка и настройка• Оптимизация MR-заданий• Отладка и алгоритмы
    • О Hadoop
    • Нadoop это:• MapReduce: JobTracker, TaskTracker• HDFS: NameNode, DataNode• Скрипты для управления кластером• Скрипты для работы с HDFS• API для написания MR-заданий• Hadoop-Streaming для не-Java MR заданий Copyright © 2011 Codeminders <vorl@codeminders.com>
    • Зоопарк Нadoop это:• Hive, Pig – аналоги Sawzall• HBase – аналог BigTable• Zookeeper – аналог Chubby• Mahout – коллекция MR алгоритмов• Nutch – open-source кровлер• Oozie, Azkaban, Hamake, Cascading Copyright © 2011 Codeminders <vorl@codeminders.com>
    • Терминология• 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>
    • Реализация 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>
    • Примеры из жизни
    • Корпоративный Веб-кровлер● Цель - реализация кровлера, собирающего и индексирующего данные с заданных веб- сайтов● Технологии: ● Nutch + Hadoop + HDFS – кровлинг и индексация ● Lucene + Solr – хранение, распределение индекса и обработка поисковых запросов ● Zookeeper – синхронизация м/у компонентами Copyright © 2011 Codeminders <vorl@codeminders.com>
    • Схема Компонентов Copyright © 2011 Codeminders <vorl@codeminders.com>
    • Особенности проекта ● Индексация – средствами Nutch ● Hadoop кластер на Windows ● Синхронизация – Zookeeper ● Ручное распределение индекса. Для обработки поисковых запросов – Solr Sharding:Copyright © 2011 Codeminders <vorl@codeminders.com>
    • Поиск одинаковых книг● Цель - определение книг, не отличающихся по содержанию среди всех, которые поступают на fb2pdf.com● Технологии: ● Hadoop + Mahout – кластеризация книг. В качестве меры расстояния – косинусное расстояние. Алгоритм кластеризации - Canopy ● Hamake – объединение MR-заданий в процесс Copyright © 2011 Codeminders <vorl@codeminders.com>
    • Цепочка MR-заданий Copyright © 2011 Codeminders <vorl@codeminders.com>
    • Несколько слов о Hamake...● Наблюдение 1: большинство задач по обработке данных нуждаются в более чем одном MR-задании.● Наблюдение 2: большинство таких заданий «управляются данными« (data-driven)● Hamake – утилита, которая позволяет описать процесс обработки данных ввиде потока, и запустить этот процесс на выполнение.● Поток представляет собой DAG, где узлы – данные, ребра – правило изменения данных. Copyright © 2011 Codeminders <vorl@codeminders.com>
    • 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>
    • Запуск процесса в 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>
    • Установка и настройка
    • Установка Hadoop• Пользуйтесь дистрибутивами Hadoop : ● Clouderas CDH ● Yahoo Distribution of Hadoop• Hadoop не работает на Windows (patch #6767)• Не используйте RAID• Для данных в S3, пользуйтесь EMR Copyright © 2011 Codeminders <vorl@codeminders.com>
    • Важные параметры• 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>
    • Тесты для 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>
    • Оптимизация и отладка
    • Самая важная оптимизация• Не создавайте объекты без необходимости • Например, ключи и значения в mapperе и reducerе Copyright © 2011 Codeminders <vorl@codeminders.com>
    • Почему?1.Создание объектов - дорогостоящая операция2.Создание объектов может приводить к не очевидным потерям памяти3.Все, что было создано, должно быть освобождено сборщиком мусора Copyright © 2011 Codeminders <vorl@codeminders.com>
    • Типы данных в Hadoop Writable Определяет протокол десериализации. Каждый тип данных в Hadoop является Writable.. Определяет порядок сортировки. Все WritableComparable ключи должны быть того же типа (но не значения). IntWritable LongWritable Конкретные классы для различный типов данных. Text … Copyright © 2011 Codeminders <vorl@codeminders.com>
    • Классы-обертки● типы данных в Hadoop являются “обертками” : • Text: строковый тип данных • IntWritable: целые числа • LongWritable: длинные целые числа • FloatWritable: числа с плавающей точкой • …● Почему? Writable определяет формат передачи данных по сети● Классы-обертки и их содержимое : • Важное различие! • Позволяет повторное использование оберток Copyright © 2011 Codeminders <vorl@codeminders.com>
    • Не переопределяйте объекты 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>
    • 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>
    • WritableComparable● Между фазами map и reduce: сортировка и перетасовка • Наивный подход: десериализация ключа и использование метода compareTo • например, a.compareTo(b) • В чем проблема?● WritableComparator: сравнивайте побайтно • Избегаем накладных расходов по созданию объекта • Операция может быть прервана досрочно, как только порядок устновлен • Реализуйте для очень быстрой сортировки! • Пример – org.apache.hadoop.io.Text Copyright © 2011 Codeminders <vorl@codeminders.com>
    • 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>
    • 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>
    • 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>
    • Зачем нужен partitioner● При степенном распределении пространства ключей фаза reduce может вызываеть задержки● Помните подсчет слов -к сожалению, reducer завяз на подсчете количества слов “the”● Почему спекулятивное исполнение не справляется с этим?● Полезен при сортировке int getPartition(K2 key, V2 value, int numPartitions); Copyright © 2011 Codeminders <vorl@codeminders.com>
    • Отладка MR-заданий● Программная логика должна быть Hadoop- независимой • Не используйте Hadoop специфические классы (OutputCollector, Reporter, Writable) без крайней необходимости • Работайте с Hadoop API на интерфейсном уровне Copyright © 2011 Codeminders <vorl@codeminders.com>
    • Последовательность отладки1.JUnit2.LocalJobRunner. Недостатки : • DistributedCache не работает • mapred.reduce.tasks всегда 1 • абсолютно отдельная ветвь кода…3.MiniDFSCluster и MiniMRCluster Copyright © 2011 Codeminders <vorl@codeminders.com>
    • Литература и вопросы
    • Дополнительная информация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>
    • ?