Hadoop

Лекция 3.
Алгоритм MapReduce

План
История создания MapReduce
 Основы MapReduce
 Примеры использования MapReduce
 Особенности применения MapReduce в
Hadoop
 Недостатки MapReduce

История создания

MapReduce – программная модель
предназначенная для параллельной
обработки больших объемов данных за счет
разделения задачи на независимые части
MapReduce придумали в Google:
 Jeffrey

Dean, Sanjay Ghemawat. MapReduce:
Simplified Data Processing on Large Clusters. 2004.

Цель: упрощение индексации Web для
поисковой системы

MapReduce в Google

Основная идея – разделить код, отвечающий за
разные цели:

Вычисления и обработку данных
Масштабирование, распараллеливание и обработку отказов

Результаты:

Более простой и понятный прикладной код. Для одной из
фаз индексации код сократился с 3800 строк C++ до 700
Быстрое внесение изменений в систему индексации (дни или
недели вместо месяцев)
Простое масштабирование путем добавлением новых узлов
без изменения прикладной программы

Реализации MapReduce Google – закрытая реализация на C++  Apache Hadoop – открытая реализация на Java  Erlang  NoSQL:   MongoDB  CouchB .

ЧТО нужно сделать с данными.Основы MapReduce  Функциональное программирование:  Обработка списков  Входные данные не изменяются  Описывается. а не КАК это делать  MapReduce автоматически обеспечивает параллельную обработку на тысячах узлов  Очень сложно. если данные меняются произвольным образом .

Функция Map  Ставит в соответствии списку другой список  Пример функции Map: toUpper(str) Исходный список не меняется. создается новый!  .

Функция Reduce  Ставит в соответствие списку одно значение  Пример функции Reduce: + Входной список также не меняется  .

MapReduce    В MapReduce к входному списку применяются последовательно функции Map и Reduce Списки состоят из пар: ключ-значение Отличия Map и Reduce от их версий в функциональных языках: может генерировать для каждого элемента входного списка несколько элементов выходного  Reduce может генерировать несколько итоговых значений  Map .

3 0.15 2. выпустившей акции Значение – данные о ценах акций 1http://ftp.ru/pub/info/stats/ .28 0.515   Ключ – код компании.28 0.475 0.5 45 46 ALNU 700 700 AMEZ 0.515 0.95 1.57 AKHA 0.475 0.Списки ключ-значение  Пример данных РТС1: issue open_bid open_ask bid ask AFKS 0.72 0.72 AKRN 45.rts.95 1.15 2.25 46.3 AFLT 2.57 2.

Ключи и Reduce  Обработка элементов списка с разными ключами функциями Reduce выполняется отдельно  Для каждого ключа генерируется отдельное итоговое значение .

Пример: WordCount   Подсчет количества слов во входных файлах Входные данные: file1: Hello World Bye World file2: Hello Hadoop Goodbye Hadoop  Ожидаемые результаты: Bye 1 Goodbye 1 Hadoop 2 Hello 2 World 2 .

1)  Результат: file 1: Hello 1 World 1 Bye 1 World 1 file2: Hello 1 Hadoop 1 Goodbye 1 Hadoop 1 .Функция Map для WordCount  Алгоритм: map (filename. file-contents): for each word in file-contents: emit (word.

sum)  Результат: Bye 1 Goodbye 1 Hadoop 2 Hello 2 World 2 . values): sum = 0 for each value in values: sum = sum + value emit (word.Функция Reduce для WordCount  Алгоритм: reduce (word.

Поток данных в MapReduce .

Поток данных в MapReduce   Входные файлы загружаются в HDFS и распределяются по всем узлам На каждом узле запускаются процессы Map и обрабатывают входные файлы  Любой процесс Map может обрабатывать любой файл  Процессы Map генерируют промежуточные списки пар ключ-значение .

Поток данных MapReduce Пары ключ-значение передаются по сети для обработки Reduce  Все значения с одинаковым ключом передаются одному процессу Reduce  Выходные данные в виде файлов записываются в HDFS  .

Поток данных в MapReduce    Управление потоком данных MapReduce производится автоматически Программист не может менять поток данных Отдельные компоненты задачи не обмениваются данными между собой В противном случае невозможно автоматическое восстановление после сбоя  В случае сбоя узла процессы Map и Reduce автоматически перезапускаются на другом узле .

Эффективность MapReduce  MapReduce эффективен при:  Большом объеме входных данных (от десятков гигабайт и больше)  Большом количестве узлов (от десятков узлов и больше)   При небольших задачах слишком велики накладные расходы Hadoop не обладает оптимальной производительностью  Специализированные решения работают быстрее .

Распределенный grep   Задача: поиск подстроки в текстовых файлах Функция Map: читает строки файла и сравнивает с шаблоном. При совпадении генерирует пару:  Ключ: имя файла  Значение: проверяемая строка  Функция Reduce: копирует входные данные .

Обращения к URL   Задача: посчитать количество обращений к URL Функция Map: читает журналы обращений к Web-серверу и выдает пары:  Ключ: URL  Значение: 1  Функция Reduce: суммирует количество одинаковых URL и выдает пары:  Ключ: URL  Значение: общее количество обращений .

Инвертированный индекс   Задача: составить список документов. в котором встречается заданное слово Функция Map: читает документы и для каждого слова генерирует пары:  Ключ: слово  Значение: идентификатор  документа Функция Reduce объединяет данные для каждого слова и выдает пары:  Ключ: слово  Значение: список идентификаторов документов .

Изменения цен акций   Задача: найти максимальное дневное изменение цен акций за указанный период Функция Map: читает данные о стоимости акций и генерирует пары:  Ключ: код эмитента  Значение: изменение цены акции за день  Функция Reduce: ищет максимум среди изменений за день для каждого эмитента .

MapReduce в Hadoop     Hadoop – бесплатная реализация MapReduce с открытыми исходными кодами Язык программирования – Java Есть возможность писать функции Map и Reduce на других языках с использованием Streaming Операционные система: Linux и Windows (официально). любой Unix с Java .

Запуск задач в Hadoop .

отвечающий за запуск задач распределения задачи на части  Task Tracker – координаторы Task  .Запуск задач в Hadoop Job – задача MapReduce  Task – часть Job. выполняющая Map или Reduce  Job Tracker – сервер в кластере Hadoop.

IntWritable> {… //Функция main запускает задачу Hadoop public static void main(String[] args) throws Exception {… } .Структура программы в Hadoop public class WordCount { //Класс для функции Map public static class Map extends MapReduceBase implements Mapper<LongWritable. IntWritable. Text. IntWritable> {… //Класс для функции Reduce public static class Reduce extends MapReduceBase implements Reducer<Text. Text. Text.

Text. while (tokenizer.nextToken()).toString(). } } } . one). IntWritable> output. Reporter reporter) throws IOException { String line = value.set(tokenizer.collect(word.WordCount Map в Hadoop public static class Map extends MapReduceBase implements Mapper<LongWritable. public void map(LongWritable key. Text. StringTokenizer tokenizer = new StringTokenizer(line).hasMoreTokens()) { word. output. OutputCollector<Text. IntWritable> { private final static IntWritable one = new IntWritable(1). Text value. private Text word = new Text().

IntWritable> { public void reduce(Text key. Text. } } .hasNext()) { sum += values. IntWritable> output. Reporter reporter) throws IOException { int sum = 0. OutputCollector<Text.get().WordCount Reduce в Hadoop public static class Reduce extends MapReduceBase implements Reducer<Text.next(). new IntWritable(sum)). while (values. IntWritable. } output. Iterator<IntWritable> values.collect(key.

class). conf.setReducerClass(Reduce. conf.setOutputValueClass(IntWritable.class). FileInputFormat.class).class).setJobName("wordcount"). new Path(args[1])). conf.Запуск задачи в Hadoop public static void main(String[] args) throws Exception { JobConf conf = new JobConf(WordCount. JobClient.class). conf.setOutputKeyClass(Text. new Path(args[0])).class).setInputFormat(TextInputFormat. FileOutputFormat.setMapperClass(Map. } . conf. conf. conf.setOutputFormat(TextOutputFormat. conf.class).setInputPaths(conf.class).setOutputPath(conf.runJob(conf).setCombinerClass(Reduce.

1>) Комбайнер позволяет уменьшить объем передаваемых по сети данных Можно использовать Reducer.   Комбайнер – позволяет объединять элементы с одинаковыми значениями ключа после работы Map до передачи Reduce Пример:     Map: (<Hello. <Hello. 1>) Combiner: (<Hello.setCombinerClass(Reduce. 2>. 1>.Комбайнер  Что означает строка: conf. 1>. если функция коммуникативна и ассоциативна . <Hadoop. <World. <Hadoop.class). 1>. 1>. <World.

где лежат входные данные  Перемещение вычислений к данным .Распределение данных    MapReduce автоматически распределяет входные данные между процессами Map Каждый процесс Map обрабатывает один или несколько входных файлов Если файл большой. то он делится на части и обрабатывается разными процессами Map   По умолчанию размер одной порции файла 64МБ Hadoop старается запустить задачу Map на том узле.

Перемещение вычислений к данным .

а затем последовательно записывает большой объем выходных данных  HDFS оптимизирована для потоковых операций .Вспомним архитектуру HDFS  В MapReduce входные данные не изменяются. а создаются новые   В MapReduce данные по задачам Map распределяются порциями по 64МБ   В HDFS файлы записываются только один раз (WORM) Размер блока HDFS 64 МБ. Данные для одной задачи считываются за одну операцию MapReduce читает большой объем входных данных последовательно.

Hive. Mahout и др. Неэффективен в маленьких кластерах с небольшим объемом данных  Накладные  расходы велики Задержки в одном процессе Map или Reduce ведут к задержке всей задачи . Pig.Недостатки MapReduce  Слишком низкоуровневая технология  Есть:  HBase.

Reduce не может быть запущен  Причины: неравномерная нагрузка  .Задержки в MapReduce Пока не завершились все процессы Map.

Задержки в MapReduce .

эффективность только в больших конфигурациях.Итоги     MapReduce – программная модель предназначенная для параллельной обработки больших объемов данных за счет разделения задачи на независимые части Функции Map и Reduce – аналогия с функциональным программированием Технология «Перемещение вычислений к данным» Недостатки MapReduce – низкоуровневая технология. задержки .

cs.Дополнительные материалы  MapReduce: Simplified Data Processing on Large Clusters   MapReduce Tutorial   http://labs.apache.edu/pubs/opencirrus2011.washington.html http://hadoop.html A Study of Skew in MapReduce Applications  http://nuage.google.org/common/docs/stable/mapred_tutorial.com/papers/mapreduce.pdf .

Вопросы? .

Sign up to vote on this title
UsefulNot useful