SlideShare ist ein Scribd-Unternehmen logo
1 von 37
Downloaden Sie, um offline zu lesen
Hadoop
                                Vladimir Orlov
                            vorl@codeminders.com




Copyright © 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-задание, создав
  экземпляр класса JobConf
3.Передаем в 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>
Запуск процесса в 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 <vorl@codeminders.com>
Установка и настройка
Установка Hadoop
• Пользуйтесь дистрибутивами Hadoop :
  ●
    Cloudera's 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 Shuffle

dog 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.JUnit
2.LocalJobRunner. Недостатки :
  •
      DistributedCache не работает
  •
      mapred.reduce.tasks всегда 1
  •
      абсолютно отдельная ветвь кода…
3.MiniDFSCluster и MiniMRCluster


                            Copyright © 2011 Codeminders <vorl@codeminders.com>
Литература и вопросы
Дополнительная информация
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 <vorl@codeminders.com>
?

Weitere ähnliche Inhalte

Was ist angesagt?

Опыт использования Spark, Основано на реальных событиях
Опыт использования Spark, Основано на реальных событияхОпыт использования Spark, Основано на реальных событиях
Опыт использования Spark, Основано на реальных событияхVasil Remeniuk
 
Cостав дистрибутва Hortonworks data platform 2.3
Cостав дистрибутва Hortonworks data platform 2.3Cостав дистрибутва Hortonworks data platform 2.3
Cостав дистрибутва Hortonworks data platform 2.3Евгений Плакса
 
Hadoop > cascading -> cascalog (very short)
Hadoop  > cascading -> cascalog (very short)Hadoop  > cascading -> cascalog (very short)
Hadoop > cascading -> cascalog (very short)Andrew Panfilov
 
Лекция 10. Apache Mahout
Лекция 10. Apache MahoutЛекция 10. Apache Mahout
Лекция 10. Apache MahoutTechnopark
 
Лекция 11. Вычислительная модель Pregel
Лекция 11. Вычислительная модель PregelЛекция 11. Вычислительная модель Pregel
Лекция 11. Вычислительная модель PregelTechnopark
 
Лекция 6. MapReduce в Hadoop (графы)
Лекция 6. MapReduce в Hadoop (графы)Лекция 6. MapReduce в Hadoop (графы)
Лекция 6. MapReduce в Hadoop (графы)Technopark
 
Мастер-класс по BigData Tools для HappyDev'15
Мастер-класс по BigData Tools для HappyDev'15Мастер-класс по BigData Tools для HappyDev'15
Мастер-класс по BigData Tools для HappyDev'15Alexey Zinoviev
 
Кластер БГУИР: расширенные возможности
Кластер БГУИР: расширенные возможностиКластер БГУИР: расширенные возможности
Кластер БГУИР: расширенные возможностиAlexey Demidchuk
 
DF1 - BD - Baranov - Mining Large Datasets with Apache Spark
DF1 - BD - Baranov - Mining Large Datasets with Apache SparkDF1 - BD - Baranov - Mining Large Datasets with Apache Spark
DF1 - BD - Baranov - Mining Large Datasets with Apache SparkMoscowDataFest
 
06 - Hadoop. Java API и Hadoop Streaming
06 - Hadoop. Java API и Hadoop Streaming06 - Hadoop. Java API и Hadoop Streaming
06 - Hadoop. Java API и Hadoop StreamingRoman Brovko
 
12 - Hadoop. HBase и Cassandra
12 - Hadoop. HBase и Cassandra12 - Hadoop. HBase и Cassandra
12 - Hadoop. HBase и CassandraRoman Brovko
 
08 - Hadoop. Алгоритмы на графах в MapReduce
08 - Hadoop. Алгоритмы на графах в MapReduce08 - Hadoop. Алгоритмы на графах в MapReduce
08 - Hadoop. Алгоритмы на графах в MapReduceRoman Brovko
 
13 - Hadoop. Парадигма Spark
13 - Hadoop. Парадигма Spark13 - Hadoop. Парадигма Spark
13 - Hadoop. Парадигма SparkRoman Brovko
 
Lapan 20.04 hadoop h-base
Lapan 20.04 hadoop h-baseLapan 20.04 hadoop h-base
Lapan 20.04 hadoop h-basekuchinskaya
 
Uniting Data JavaOne2013
Uniting Data JavaOne2013Uniting Data JavaOne2013
Uniting Data JavaOne2013Dmitri Shiryaev
 
Выступление Александра Крота из "Вымпелком" на Hadoop Meetup в рамках RIT++
Выступление Александра Крота из "Вымпелком" на Hadoop Meetup в рамках RIT++Выступление Александра Крота из "Вымпелком" на Hadoop Meetup в рамках RIT++
Выступление Александра Крота из "Вымпелком" на Hadoop Meetup в рамках RIT++Антон Шестаков
 
14 - Hadoop. Фреймворк Spark
14 - Hadoop. Фреймворк Spark14 - Hadoop. Фреймворк Spark
14 - Hadoop. Фреймворк SparkRoman Brovko
 
ADD2010: Обработка большого объема данных на платформеApache Hadoop
ADD2010: Обработка большого объема данных на платформеApache Hadoop ADD2010: Обработка большого объема данных на платформеApache Hadoop
ADD2010: Обработка большого объема данных на платформеApache Hadoop Vladimir Klimontovich
 
Использование Sedna в WEB
Использование Sedna в WEBИспользование Sedna в WEB
Использование Sedna в WEBAlexandre Kalendarev
 
Велосипедостраительство в NoSQL, строим собственное NoSQL хранилище
Велосипедостраительство в NoSQL, строим собственное NoSQL хранилищеВелосипедостраительство в NoSQL, строим собственное NoSQL хранилище
Велосипедостраительство в NoSQL, строим собственное NoSQL хранилищеAlexandre Kalendarev
 

Was ist angesagt? (20)

Опыт использования Spark, Основано на реальных событиях
Опыт использования Spark, Основано на реальных событияхОпыт использования Spark, Основано на реальных событиях
Опыт использования Spark, Основано на реальных событиях
 
Cостав дистрибутва Hortonworks data platform 2.3
Cостав дистрибутва Hortonworks data platform 2.3Cостав дистрибутва Hortonworks data platform 2.3
Cостав дистрибутва Hortonworks data platform 2.3
 
Hadoop > cascading -> cascalog (very short)
Hadoop  > cascading -> cascalog (very short)Hadoop  > cascading -> cascalog (very short)
Hadoop > cascading -> cascalog (very short)
 
Лекция 10. Apache Mahout
Лекция 10. Apache MahoutЛекция 10. Apache Mahout
Лекция 10. Apache Mahout
 
Лекция 11. Вычислительная модель Pregel
Лекция 11. Вычислительная модель PregelЛекция 11. Вычислительная модель Pregel
Лекция 11. Вычислительная модель Pregel
 
Лекция 6. MapReduce в Hadoop (графы)
Лекция 6. MapReduce в Hadoop (графы)Лекция 6. MapReduce в Hadoop (графы)
Лекция 6. MapReduce в Hadoop (графы)
 
Мастер-класс по BigData Tools для HappyDev'15
Мастер-класс по BigData Tools для HappyDev'15Мастер-класс по BigData Tools для HappyDev'15
Мастер-класс по BigData Tools для HappyDev'15
 
Кластер БГУИР: расширенные возможности
Кластер БГУИР: расширенные возможностиКластер БГУИР: расширенные возможности
Кластер БГУИР: расширенные возможности
 
DF1 - BD - Baranov - Mining Large Datasets with Apache Spark
DF1 - BD - Baranov - Mining Large Datasets with Apache SparkDF1 - BD - Baranov - Mining Large Datasets with Apache Spark
DF1 - BD - Baranov - Mining Large Datasets with Apache Spark
 
06 - Hadoop. Java API и Hadoop Streaming
06 - Hadoop. Java API и Hadoop Streaming06 - Hadoop. Java API и Hadoop Streaming
06 - Hadoop. Java API и Hadoop Streaming
 
12 - Hadoop. HBase и Cassandra
12 - Hadoop. HBase и Cassandra12 - Hadoop. HBase и Cassandra
12 - Hadoop. HBase и Cassandra
 
08 - Hadoop. Алгоритмы на графах в MapReduce
08 - Hadoop. Алгоритмы на графах в MapReduce08 - Hadoop. Алгоритмы на графах в MapReduce
08 - Hadoop. Алгоритмы на графах в MapReduce
 
13 - Hadoop. Парадигма Spark
13 - Hadoop. Парадигма Spark13 - Hadoop. Парадигма Spark
13 - Hadoop. Парадигма Spark
 
Lapan 20.04 hadoop h-base
Lapan 20.04 hadoop h-baseLapan 20.04 hadoop h-base
Lapan 20.04 hadoop h-base
 
Uniting Data JavaOne2013
Uniting Data JavaOne2013Uniting Data JavaOne2013
Uniting Data JavaOne2013
 
Выступление Александра Крота из "Вымпелком" на Hadoop Meetup в рамках RIT++
Выступление Александра Крота из "Вымпелком" на Hadoop Meetup в рамках RIT++Выступление Александра Крота из "Вымпелком" на Hadoop Meetup в рамках RIT++
Выступление Александра Крота из "Вымпелком" на Hadoop Meetup в рамках RIT++
 
14 - Hadoop. Фреймворк Spark
14 - Hadoop. Фреймворк Spark14 - Hadoop. Фреймворк Spark
14 - Hadoop. Фреймворк Spark
 
ADD2010: Обработка большого объема данных на платформеApache Hadoop
ADD2010: Обработка большого объема данных на платформеApache Hadoop ADD2010: Обработка большого объема данных на платформеApache Hadoop
ADD2010: Обработка большого объема данных на платформеApache Hadoop
 
Использование Sedna в WEB
Использование Sedna в WEBИспользование Sedna в WEB
Использование Sedna в WEB
 
Велосипедостраительство в NoSQL, строим собственное NoSQL хранилище
Велосипедостраительство в NoSQL, строим собственное NoSQL хранилищеВелосипедостраительство в NoSQL, строим собственное NoSQL хранилище
Велосипедостраительство в NoSQL, строим собственное NoSQL хранилище
 

Andere mochten auch

Building a Self-Service Hadoop Platform at Linkedin with Azkaban
Building a Self-Service Hadoop Platform at Linkedin with AzkabanBuilding a Self-Service Hadoop Platform at Linkedin with Azkaban
Building a Self-Service Hadoop Platform at Linkedin with AzkabanDataWorks Summit
 
Hadoop ecosystem framework n hadoop in live environment
Hadoop ecosystem framework  n hadoop in live environmentHadoop ecosystem framework  n hadoop in live environment
Hadoop ecosystem framework n hadoop in live environmentDelhi/NCR HUG
 
Interactive workflow management using Azkaban
Interactive workflow management using AzkabanInteractive workflow management using Azkaban
Interactive workflow management using Azkabandatamantra
 
Azkaban - WorkFlow Scheduler/Automation Engine
Azkaban - WorkFlow Scheduler/Automation EngineAzkaban - WorkFlow Scheduler/Automation Engine
Azkaban - WorkFlow Scheduler/Automation EnginePraveen Thirukonda
 
NoSQL: what's under the hood?
NoSQL: what's under the hood? NoSQL: what's under the hood?
NoSQL: what's under the hood? Aleksey Solntsev
 
Redis
RedisRedis
RedisPtico
 
Hadoop on OpenStack
Hadoop on OpenStackHadoop on OpenStack
Hadoop on OpenStackYandex
 
Fors и big data appliance
Fors и big data applianceFors и big data appliance
Fors и big data applianceCleverDATA
 
Hadoop streaming простой путь к масштабированию приложений обработки данных. ...
Hadoop streaming простой путь к масштабированию приложений обработки данных. ...Hadoop streaming простой путь к масштабированию приложений обработки данных. ...
Hadoop streaming простой путь к масштабированию приложений обработки данных. ...rit2011
 
Платформа Apache Hadoop
Платформа Apache HadoopПлатформа Apache Hadoop
Платформа Apache HadoopDotNetConf
 
Куда мы катимся. Анализ многолетних наблюдений омской ИТ отрасли в пяти минутах
Куда мы катимся. Анализ многолетних наблюдений омской ИТ отрасли  в пяти минутахКуда мы катимся. Анализ многолетних наблюдений омской ИТ отрасли  в пяти минутах
Куда мы катимся. Анализ многолетних наблюдений омской ИТ отрасли в пяти минутахAnatoliy Nikulin
 
Vaadin thinking of u and i. Или как писать Rich Internet Applications, в стар...
Vaadin thinking of u and i. Или как писать Rich Internet Applications, в стар...Vaadin thinking of u and i. Или как писать Rich Internet Applications, в стар...
Vaadin thinking of u and i. Или как писать Rich Internet Applications, в стар...Anatoliy Nikulin
 
Архитектура продукта Thumbtack RTB Bidder
Архитектура продукта Thumbtack RTB BidderАрхитектура продукта Thumbtack RTB Bidder
Архитектура продукта Thumbtack RTB BidderAnatoliy Nikulin
 
Development without Testers: Myth or Real Option?
Development without Testers: Myth or Real Option?Development without Testers: Myth or Real Option?
Development without Testers: Myth or Real Option?Mikalai Alimenkou
 
Конференция Юкон. Процессинг данных на лямбда архитектуре.
Конференция Юкон. Процессинг данных на лямбда архитектуре.Конференция Юкон. Процессинг данных на лямбда архитектуре.
Конференция Юкон. Процессинг данных на лямбда архитектуре.Anatoliy Nikulin
 

Andere mochten auch (20)

Building a Self-Service Hadoop Platform at Linkedin with Azkaban
Building a Self-Service Hadoop Platform at Linkedin with AzkabanBuilding a Self-Service Hadoop Platform at Linkedin with Azkaban
Building a Self-Service Hadoop Platform at Linkedin with Azkaban
 
Azkaban
AzkabanAzkaban
Azkaban
 
Hadoop ecosystem framework n hadoop in live environment
Hadoop ecosystem framework  n hadoop in live environmentHadoop ecosystem framework  n hadoop in live environment
Hadoop ecosystem framework n hadoop in live environment
 
Interactive workflow management using Azkaban
Interactive workflow management using AzkabanInteractive workflow management using Azkaban
Interactive workflow management using Azkaban
 
Azkaban - WorkFlow Scheduler/Automation Engine
Azkaban - WorkFlow Scheduler/Automation EngineAzkaban - WorkFlow Scheduler/Automation Engine
Azkaban - WorkFlow Scheduler/Automation Engine
 
NoSQL: what's under the hood?
NoSQL: what's under the hood? NoSQL: what's under the hood?
NoSQL: what's under the hood?
 
Redis
RedisRedis
Redis
 
Hadoop on OpenStack
Hadoop on OpenStackHadoop on OpenStack
Hadoop on OpenStack
 
Fors и big data appliance
Fors и big data applianceFors и big data appliance
Fors и big data appliance
 
Hadoop streaming простой путь к масштабированию приложений обработки данных. ...
Hadoop streaming простой путь к масштабированию приложений обработки данных. ...Hadoop streaming простой путь к масштабированию приложений обработки данных. ...
Hadoop streaming простой путь к масштабированию приложений обработки данных. ...
 
Платформа Apache Hadoop
Платформа Apache HadoopПлатформа Apache Hadoop
Платформа Apache Hadoop
 
Apache Hadoop
Apache HadoopApache Hadoop
Apache Hadoop
 
Куда мы катимся. Анализ многолетних наблюдений омской ИТ отрасли в пяти минутах
Куда мы катимся. Анализ многолетних наблюдений омской ИТ отрасли  в пяти минутахКуда мы катимся. Анализ многолетних наблюдений омской ИТ отрасли  в пяти минутах
Куда мы катимся. Анализ многолетних наблюдений омской ИТ отрасли в пяти минутах
 
Vaadin thinking of u and i. Или как писать Rich Internet Applications, в стар...
Vaadin thinking of u and i. Или как писать Rich Internet Applications, в стар...Vaadin thinking of u and i. Или как писать Rich Internet Applications, в стар...
Vaadin thinking of u and i. Или как писать Rich Internet Applications, в стар...
 
Архитектура продукта Thumbtack RTB Bidder
Архитектура продукта Thumbtack RTB BidderАрхитектура продукта Thumbtack RTB Bidder
Архитектура продукта Thumbtack RTB Bidder
 
Hive vs Pig
Hive vs PigHive vs Pig
Hive vs Pig
 
HBase inside
HBase insideHBase inside
HBase inside
 
Apache Hive
Apache HiveApache Hive
Apache Hive
 
Development without Testers: Myth or Real Option?
Development without Testers: Myth or Real Option?Development without Testers: Myth or Real Option?
Development without Testers: Myth or Real Option?
 
Конференция Юкон. Процессинг данных на лямбда архитектуре.
Конференция Юкон. Процессинг данных на лямбда архитектуре.Конференция Юкон. Процессинг данных на лямбда архитектуре.
Конференция Юкон. Процессинг данных на лямбда архитектуре.
 

Ähnlich wie Hadoop presentation

Zend Framework и мультиязычность
Zend Framework и мультиязычностьZend Framework и мультиязычность
Zend Framework и мультиязычностьStepan Tanasiychuk
 
Introductory Keynote at Hadoop Workshop by Ospcon (2014)
Introductory Keynote at Hadoop Workshop by Ospcon (2014)Introductory Keynote at Hadoop Workshop by Ospcon (2014)
Introductory Keynote at Hadoop Workshop by Ospcon (2014)Andrei Nikolaenko
 
Gradle Introduction
Gradle IntroductionGradle Introduction
Gradle IntroductionKirill Rozov
 
Корпоративное приложение на Rails
Корпоративное приложение на RailsКорпоративное приложение на Rails
Корпоративное приложение на RailsAndrei Kaleshka
 
Обзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий НасретдиновОбзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий НасретдиновOntico
 
Технологии и продукты Oracle для обработки и анализа Больших Данных
Технологии и продукты Oracle для обработки и анализа Больших ДанныхТехнологии и продукты Oracle для обработки и анализа Больших Данных
Технологии и продукты Oracle для обработки и анализа Больших ДанныхAndrey Akulov
 
1 big data oracle digi oct
1 big data oracle digi oct1 big data oracle digi oct
1 big data oracle digi octantishmanti
 
Решения Oracle для Big Data
Решения Oracle для Big DataРешения Oracle для Big Data
Решения Oracle для Big DataAndrey Akulov
 
MongoDB. Области применения, преимущества и узкие места, тонкости использован...
MongoDB. Области применения, преимущества и узкие места, тонкости использован...MongoDB. Области применения, преимущества и узкие места, тонкости использован...
MongoDB. Области применения, преимущества и узкие места, тонкости использован...phpdevby
 
Perl Debugger и mod_perl
Perl Debugger и mod_perlPerl Debugger и mod_perl
Perl Debugger и mod_perlИван mrRico
 
SPA инструменты
SPA инструментыSPA инструменты
SPA инструментыRoman Dvornov
 
Easy authcache 2 кэширование для pro. Родионов Игорь
Easy authcache 2   кэширование для pro. Родионов ИгорьEasy authcache 2   кэширование для pro. Родионов Игорь
Easy authcache 2 кэширование для pro. Родионов ИгорьPVasili
 
Rapid Deployment of Hadoop Development Environments
Rapid Deployment of Hadoop Development EnvironmentsRapid Deployment of Hadoop Development Environments
Rapid Deployment of Hadoop Development EnvironmentsAndrei Nikolaenko
 
CodeFest 2012. Сидельников А. — Опыт создания DSL на Ruby. Где применить, как...
CodeFest 2012. Сидельников А. — Опыт создания DSL на Ruby. Где применить, как...CodeFest 2012. Сидельников А. — Опыт создания DSL на Ruby. Где применить, как...
CodeFest 2012. Сидельников А. — Опыт создания DSL на Ruby. Где применить, как...CodeFest
 
HSE{Consult}: DevOps – новая методология разработки
HSE{Consult}: DevOps – новая методология разработкиHSE{Consult}: DevOps – новая методология разработки
HSE{Consult}: DevOps – новая методология разработкиBusiness incubator HSE
 

Ähnlich wie Hadoop presentation (20)

Zend Framework и мультиязычность
Zend Framework и мультиязычностьZend Framework и мультиязычность
Zend Framework и мультиязычность
 
Druid - Interactive Analytics At Scale
Druid - Interactive Analytics At ScaleDruid - Interactive Analytics At Scale
Druid - Interactive Analytics At Scale
 
Introductory Keynote at Hadoop Workshop by Ospcon (2014)
Introductory Keynote at Hadoop Workshop by Ospcon (2014)Introductory Keynote at Hadoop Workshop by Ospcon (2014)
Introductory Keynote at Hadoop Workshop by Ospcon (2014)
 
Nosql and Mongodb
Nosql and MongodbNosql and Mongodb
Nosql and Mongodb
 
Gradle Introduction
Gradle IntroductionGradle Introduction
Gradle Introduction
 
Корпоративное приложение на Rails
Корпоративное приложение на RailsКорпоративное приложение на Rails
Корпоративное приложение на Rails
 
Erlang tasty & useful stuff
Erlang tasty & useful stuffErlang tasty & useful stuff
Erlang tasty & useful stuff
 
Обзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий НасретдиновОбзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий Насретдинов
 
Технологии и продукты Oracle для обработки и анализа Больших Данных
Технологии и продукты Oracle для обработки и анализа Больших ДанныхТехнологии и продукты Oracle для обработки и анализа Больших Данных
Технологии и продукты Oracle для обработки и анализа Больших Данных
 
Drupal Vs Other
Drupal Vs OtherDrupal Vs Other
Drupal Vs Other
 
1 big data oracle digi oct
1 big data oracle digi oct1 big data oracle digi oct
1 big data oracle digi oct
 
php frameworks
php frameworksphp frameworks
php frameworks
 
Решения Oracle для Big Data
Решения Oracle для Big DataРешения Oracle для Big Data
Решения Oracle для Big Data
 
MongoDB. Области применения, преимущества и узкие места, тонкости использован...
MongoDB. Области применения, преимущества и узкие места, тонкости использован...MongoDB. Области применения, преимущества и узкие места, тонкости использован...
MongoDB. Области применения, преимущества и узкие места, тонкости использован...
 
Perl Debugger и mod_perl
Perl Debugger и mod_perlPerl Debugger и mod_perl
Perl Debugger и mod_perl
 
SPA инструменты
SPA инструментыSPA инструменты
SPA инструменты
 
Easy authcache 2 кэширование для pro. Родионов Игорь
Easy authcache 2   кэширование для pro. Родионов ИгорьEasy authcache 2   кэширование для pro. Родионов Игорь
Easy authcache 2 кэширование для pro. Родионов Игорь
 
Rapid Deployment of Hadoop Development Environments
Rapid Deployment of Hadoop Development EnvironmentsRapid Deployment of Hadoop Development Environments
Rapid Deployment of Hadoop Development Environments
 
CodeFest 2012. Сидельников А. — Опыт создания DSL на Ruby. Где применить, как...
CodeFest 2012. Сидельников А. — Опыт создания DSL на Ruby. Где применить, как...CodeFest 2012. Сидельников А. — Опыт создания DSL на Ruby. Где применить, как...
CodeFest 2012. Сидельников А. — Опыт создания DSL на Ruby. Где применить, как...
 
HSE{Consult}: DevOps – новая методология разработки
HSE{Consult}: DevOps – новая методология разработкиHSE{Consult}: DevOps – новая методология разработки
HSE{Consult}: DevOps – новая методология разработки
 

Hadoop presentation

  • 1. Hadoop Vladimir Orlov vorl@codeminders.com Copyright © 2011 Codeminders <vorl@codeminders.com>
  • 2. О чем я расскажу? • О Hadoop в кратце • Примеры из жизни • Установка и настройка • Оптимизация MR-заданий • Отладка и алгоритмы
  • 4. Нadoop это: • MapReduce: JobTracker, TaskTracker • HDFS: NameNode, DataNode • Скрипты для управления кластером • Скрипты для работы с HDFS • API для написания MR-заданий • Hadoop-Streaming для не-Java MR заданий Copyright © 2011 Codeminders <vorl@codeminders.com>
  • 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. Терминология • 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. Реализация 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 <vorl@codeminders.com>
  • 9. Корпоративный Веб-кровлер ● Цель - реализация кровлера, собирающего и индексирующего данные с заданных веб- сайтов ● Технологии: ● Nutch + Hadoop + HDFS – кровлинг и индексация ● Lucene + Solr – хранение, распределение индекса и обработка поисковых запросов ● Zookeeper – синхронизация м/у компонентами Copyright © 2011 Codeminders <vorl@codeminders.com>
  • 10. Схема Компонентов Copyright © 2011 Codeminders <vorl@codeminders.com>
  • 11. Особенности проекта ● Индексация – средствами Nutch ● Hadoop кластер на Windows ● Синхронизация – Zookeeper ● Ручное распределение индекса. Для обработки поисковых запросов – Solr Sharding: Copyright © 2011 Codeminders <vorl@codeminders.com>
  • 12. Поиск одинаковых книг ● Цель - определение книг, не отличающихся по содержанию среди всех, которые поступают на fb2pdf.com ● Технологии: ● Hadoop + Mahout – кластеризация книг. В качестве меры расстояния – косинусное расстояние. Алгоритм кластеризации - Canopy ● Hamake – объединение MR-заданий в процесс Copyright © 2011 Codeminders <vorl@codeminders.com>
  • 13. Цепочка MR-заданий Copyright © 2011 Codeminders <vorl@codeminders.com>
  • 14. Несколько слов о Hamake... ● Наблюдение 1: большинство задач по обработке данных нуждаются в более чем одном MR-задании. ● Наблюдение 2: большинство таких заданий «управляются данными« (data-driven) ● Hamake – утилита, которая позволяет описать процесс обработки данных ввиде потока, и запустить этот процесс на выполнение. ● Поток представляет собой DAG, где узлы – данные, ребра – правило изменения данных. Copyright © 2011 Codeminders <vorl@codeminders.com>
  • 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. Запуск процесса в 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 <vorl@codeminders.com>
  • 18. Установка Hadoop • Пользуйтесь дистрибутивами Hadoop : ● Cloudera's CDH ● Yahoo Distribution of Hadoop • Hadoop не работает на Windows (patch #6767) • Не используйте RAID • Для данных в S3, пользуйтесь EMR Copyright © 2011 Codeminders <vorl@codeminders.com>
  • 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. Тесты для 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>
  • 22. Самая важная оптимизация • Не создавайте объекты без необходимости • Например, ключи и значения в mapper'е и reducer'е Copyright © 2011 Codeminders <vorl@codeminders.com>
  • 23. Почему? 1.Создание объектов - дорогостоящая операция 2.Создание объектов может приводить к не очевидным потерям памяти 3.Все, что было создано, должно быть освобождено сборщиком мусора Copyright © 2011 Codeminders <vorl@codeminders.com>
  • 24. Типы данных в Hadoop Writable Определяет протокол десериализации. Каждый тип данных в Hadoop является Writable.. Определяет порядок сортировки. Все WritableComparable ключи должны быть того же типа (но не значения). IntWritable LongWritable Конкретные классы для различный типов данных. Text … Copyright © 2011 Codeminders <vorl@codeminders.com>
  • 25. Классы-обертки ● типы данных в Hadoop являются “обертками” : • Text: строковый тип данных • IntWritable: целые числа • LongWritable: длинные целые числа • FloatWritable: числа с плавающей точкой • … ● Почему? Writable определяет формат передачи данных по сети ● Классы-обертки и их содержимое : • Важное различие! • Позволяет повторное использование оберток Copyright © 2011 Codeminders <vorl@codeminders.com>
  • 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. 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. WritableComparable ● Между фазами map и reduce: сортировка и перетасовка • Наивный подход: десериализация ключа и использование метода compareTo • например, a.compareTo(b) • В чем проблема? ● WritableComparator: сравнивайте побайтно • Избегаем накладных расходов по созданию объекта • Операция может быть прервана досрочно, как только порядок устновлен • Реализуйте для очень быстрой сортировки! • Пример – org.apache.hadoop.io.Text Copyright © 2011 Codeminders <vorl@codeminders.com>
  • 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. WordCount без Combiner'а dog 1 cat 1 cat 1 bird 1 dog 1 cat 1 dog 1 dog 1 Sort and Shuffle dog 1 1 1 1 cat 1 1 1 bird 1 Copyright © 2011 Codeminders <vorl@codeminders.com>
  • 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. Зачем нужен partitioner ● При степенном распределении пространства ключей фаза reduce может вызываеть задержки ● Помните подсчет слов -к сожалению, reducer завяз на подсчете количества слов “the” ● Почему спекулятивное исполнение не справляется с этим? ● Полезен при сортировке int getPartition(K2 key, V2 value, int numPartitions); Copyright © 2011 Codeminders <vorl@codeminders.com>
  • 33. Отладка MR-заданий ● Программная логика должна быть Hadoop- независимой • Не используйте Hadoop специфические классы (OutputCollector, Reporter, Writable) без крайней необходимости • Работайте с Hadoop API на интерфейсном уровне Copyright © 2011 Codeminders <vorl@codeminders.com>
  • 34. Последовательность отладки 1.JUnit 2.LocalJobRunner. Недостатки : • DistributedCache не работает • mapred.reduce.tasks всегда 1 • абсолютно отдельная ветвь кода… 3.MiniDFSCluster и MiniMRCluster Copyright © 2011 Codeminders <vorl@codeminders.com>
  • 36. Дополнительная информация 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 <vorl@codeminders.com>
  • 37. ?