Hadoop Лекция 5. Основы MapReduce API. План Базовые компоненты MapReduce API Mapper Reducer Driver.

Презентация:



Advertisements
Похожие презентации
Hadoop Лекция 3. Алгоритм MapReduce. План История создания MapReduce Основы MapReduce Примеры использования MapReduce Особенности применения MapReduce.
Advertisements

Hadoop Лекция 4. Разработка и запуск программ в Hadoop.
Основы ООП и C# Работа с объектами и классами. Классы Класс специальный тип данных для описания объектов. Он определяет данные и поведение типа. Определение.
1 Классы в Java Ключевое слово class означает: Я говорю тебе, как выглядит новый тип объекта. Класс является базовым элементом объектно-ориентированного.
1 © Luxoft Training 2012 Java: расширенные вопросы Модуль #8.
Функции Лекция 8. Назначение функций Функции - самостоятельные программные единицы, спроектированные для решения конкретной задачи. Функции по структуре.
АССОЦИАТИВНЫЕ КОЛЛЕКЦИИ Лекция 6 1. Отличие от последовательных 2 В последовательной коллекции каждый элемент ассоциируется с номером, начиная с 0. В.
Практическое использование Java Макаревич Л. Г.. Инсталляция Java Документация в docs Прописать PATH (каталог bin в JSDK) Прописать CLASSPATH (путь к.
Изучение динамического определения типов. Класс Class. Динамическая загрузка и инстанцирование классов. В Java вся информация о классе хранится в специальном.
Ассоциативные списки Поиск данных происходит не по индексу или положению объекта, а по его ассоциативной связи: public interface Map { // Доступ к объектам.
Учебный курс Объектно-ориентированный анализ и программирование Лекция 7 Методы как средство реализации операций Лекции читает кандидат технических наук.
1 Обработка исключений в Java Одно из важнейших преимуществ Java – разработанный на уровне языка механизм обработки исключений. Исключение в Java - это.
Файловый ввод- вывод данных в Pascalе Средства обработки файлов 11 класс.
Язык Java. JSP.. Java. Синтаксис. Перевод строчки эквивалентен пробелу Регистр в именах различается // Комментарии до конца строки /* Многострочные комментарии.
Наследование Наследование – это отношение является между классами. class Person { string first_name; int birth_year;... } class Student : Person { float.
Платформа J2EE Сервис: Java Naming Directory (JNDI) – универсальный сервис хранения объектов в иерархической структуре имен (аналогично файловой системе)
Работа с файлами Сазонов Д.О. ПМиЭММ Часть 2. Тема занятия: Работа с файлами через потоки Для реализации файлового ввода/вывода, необходимо включить в.
Синтаксис языка Java. Символы и синтаксис Перевод строчки эквивалентен пробелу Регистр в именах различается.
Программная инженерия Дмитриев Андрей Владиславович
Основы информатики Классы Заикин Олег Сергеевич zaikin.all24.org
Транксрипт:

Hadoop Лекция 5. Основы MapReduce API

План Базовые компоненты MapReduce API Mapper Reducer Driver

Пакеты Hadoop НазваниеОписание org.apache.hadoop Базовый пакет Hadoop org.apache.hadoop.fs Работа с файловыми системами org.apache.hadoop.io Операции ввода-вывода org.apache.hadoop.mapred MapReduce org.apache.hadoop.util Утилиты org.apache.hadoop.conf Конфигурация Hadoop

Базовые компоненты Mapper – реализует функцию Map Reducer – реализует функцию Reduce Driver – описывает, как запустить MapReduce программу

Базовые компоненты Пакет org.apache.hadoop.mapred Функция Map: Интерфейс Mapper, единственный метод Map Функция Reduce: Интерфейс Reducer, единственный метод Reduce Базовая реализация Mapper и Reducer: Класс MapReduceBase

Интерфейс Mapper public interface Mapper K1 и V1 – типы ключа и значения входящей пары ключ/значение K2 и V2 – типы ключа и значения выходящей пары ключ/значение Ставит в соответствие ЕДИНСТВЕННОЙ входящей паре ключ/значение список выходящих пар ключ/значение Выходящий список может быть пустым, содержать одно или несколько значений

Типы ключей и значений Все ключи и значение в Hadoop реализуют специальный интерфейс: org.apache.hadoop.io.Writable Чтение и запись объектов разных типов Примеры реализаций: IntWritable, LongWritable, Text, ArrayWritable

Метод Map public interface Mapper void map(K1 key, V1 value, OutputCollector output, Reporter reporter) throws IOExceptionK1V1 OutputCollectorK2V2 ReporterIOException key, value – входящая пара ключ/значение output – список выходящих пар ключ/значение reporter – класс для отслеживания статуса работы

Списки пар ключ/значение «Коллектор» - компонент Hadoop для организации списка пар ключ/значение Интерфейс: org.apache.hadoop.mapred.OutputCollector k – тип ключа, v - тип значения Добавление пары в список, метод collect: collect(K key, V value)

Пример Map для WordCount public static class Map extends MapReduceBase implements Mapper { private final static IntWritable one = new IntWritable(1); private Text word = new Text(); public void map(LongWritable key, Text value, OutputCollector output, Reporter reporter) throws IOException { String line = value.toString(); StringTokenizer tokenizer = new StringTokenizer(line); while (tokenizer.hasMoreTokens()) { word.set(tokenizer.nextToken()); output.collect(word, one); }

Пример Map для WordCount Пользовательский класс Map, наследник базового MapReduceBase, реализует интерфейс Mapper Типы пар ключ/значение: Вход: длинное целое/строка Выход: строка/целое Переменные: IntWritable one – Единица для записи в выходной список Text word – переменная для слов из текста

Пример Map для WordCount Функция Map: Преобразует получаемый текст в строку и разбивает ее на токены (слова) Для каждого токена генерируется пара,1 Сгенерированная пара добавляется в OutputCollector Переменные word и one используются для экономии памяти и повышения производительности

Готовые Mapperы Пакет org.apache.hadoop.mapred.lib НазваниеОписание IdentityMapper Записывает входную пару в выход InverseMapper Меняет местами ключ и значение RegexMapper Ищет текст по регулярному выражению ChainMapper Объединяет несколько Mapperов TokenCountMapper Считает количество токенов (как WordCount)

Применяем готовый Mapper

Используем готовый TokenCounterMapper для реализации приложения WordCount в Karmasphere: Создаем workflow На закладке Bootstrap выбираем тестовый входной файл На закладке Mapper выбираем готовый TokenCounterMapper В нижней части окна видим пример работы Mappera

Интерфейс Reducer public interface Reducer K2 и V2 – типы ключа и значения входящей пары ключ/значение K3 и V3 – типы ключа и значения выходящей пары ключ/значение Ставит в соответствие списку входящих значениям с ЕДИНСТВЕННЫМ ключом список выходящих пар ключ/значение Выходящий список может быть пустым, содержать одно или несколько значений Как правило, в выходящем списке меньше значений, чем во входящем

Метод Reduce public interface Reducer void reduce(K2 key,K2 IteratorIterator values, OutputCollector output, Reporter reporter) throws IOExceptionV2 OutputCollectorK3V3 ReporterIOException key – входящий ключ values – список входных значений output – список выходящих пар ключ/значение reporter – класс для отслеживания статуса работы

Метод Reduce Метод Reduce работаем во многом как Map: Ключи и значения должны реализовывать интерфейс Writable Значения для выходящего списка собирает «коллектор» Отличие от Map: Reduce получает не одну пару ключ/значение, а список значений с одним ключом

Пример Reduce для WordCount public static class Reduce extends MapReduceBase implements Reducer { public void reduce(Text key, Iterator values, OutputCollector output, Reporter reporter) throws IOException { int sum = 0; while (values.hasNext()) { sum += values.next().get(); } output.collect(key, new IntWritable(sum)); }

Пример Reduce для WordCount Пользовательский класс Reduce, наследник базового MapReduceBase, реализует интерфейс Reducer Типы пар ключ/значение: Вход: строка/целое Выход: строка/целое Переменных у класса нет

Пример Reduce для WordCount Функция Reduce: Объявляет переменную sum для подсчета суммы количества слов Каждое входящее значение прибавляется к сумме На основе суммы создается значение IntWritable В OutputCollector записывается пара

Готовые Reducerы Пакет org.apache.hadoop.mapred.lib НазваниеОписание IntSumReducer Складывает целые значения LongSumReducer Складывает длинные целые PipeReducer Для выполнения Reduce вызывает внешнюю программу и передает данные через stdin и stdout ChainReducer Объединяет несколько Reducerов

Применяем готовый Reducer

Используем готовый IntSumReducer для реализации приложения WordCount в Karmasphere: Создаем workflow На закладке Bootstrap выбираем тестовый входной файл На закладке Reducer выбираем готовый IntSumReducer В нижней части окна видим пример работы Reducera

Запуск программы MapReduce Для запуска программы MapReduce используется так называемый Driver Driver настраивает: Классы, реализующие Mapper и Reducer Пути к входным и выходным файлам Типы ключей и значений После конфигурации Driver запускает задачу Hadoop

Пример Driver public static void main(String[] args) throws Exception { JobConf conf = new JobConf(WordCount.class); conf.setJobName("wordcount"); conf.setOutputKeyClass(Text.class); conf.setOutputValueClass(IntWritable.class); conf.setMapperClass(Map.class); conf.setReducerClass(Reduce.class); FileInputFormat.setInputPaths(conf, new Path(args[0])); FileOutputFormat.setOutputPath(conf, new Path(args[1])); JobClient.runJob(conf); }

Пример Driver Driver реализован в виде функции main класса WordCount Driver ожидает 2 аргумента при запуске: Каталог с входными файлами Каталог для записи выходящих файлов Driver запускает WordCount, который читает файлы из входного каталога и записывает результаты в выходной

Конфигурация Driver Driver создает объект conf, содержащий конфигурацию запуска задачи WordCount В конфигурации Driver задает: Тип выходного ключа: текст Тип выходного значения: целый Класс Mapper: Map.class Класс Reducer: Reduce.class

Каталоги для файлов Driver задает каталоги для входных и выходных файлов Пути определяются с помощью специального класса: org.apache.hadoop.fs.Path Содержит путь к файлу в файловой системе, в том числе HDFS Пути задаются статическими методами классов: FileInputFormat – входной каталог(и) FileOutputFormat – выходной каталог

Запуск задачи Запуск задачи выполняется с помощью JobClient Два варианта запуска: JobClient.runJob – запускает задачу и возвращает управление после завершения задачи JobClietn.submitJob – запускает задачу и сразу же возвращает управление Статус задачи, запущенной submit, может быть определен с помощью RunningJob

Пример запуска WordCount $ bin/hadoop jar wordcount.jar WordCount /usr/hadoop/wordcount/input /usr/hadoop/wordcount/output Запускается задача в архиве wordcount.jar Основной класс: WordCount Hadoop автоматически запускает WordCount.main, где должен быть Driver Аргументы /usr/hadoop/wordcount/input и /usr/hadoop/wordcount/output передаются на вход WordCount.main

Итоги Структура минимальной программы MapReduce: Класс Map (наследник MapReduceBase, реализует интерфейс Mapper и функцию map) Класс Reduce (наследник MapReduceBase, реализует интерфейс Reducer и функцию reduce) Driver – конфигурирует и запускает задачу Hadoop Hadoop включает готовые реализации часто используемых Mapperов и Reducerов

Дополнительные материалы Hadoop MapReduce Tutorial

Вопросы?