Содержание

Слайд 2

Параллельное и распределённое программирование

Под параллельным программированием понимают:
Векторную обработку данных
Использование нескольких CPU на

Параллельное и распределённое программирование Под параллельным программированием понимают: Векторную обработку данных Использование
компьютере
Под распределённым программированием понимают использование многих CPU распределённых по разным компьютерам сети

Слайд 3

Мотивация распределённых вычислений

Хотим обрабатывать большие объёмы данных ( > 1 TB)
Хотим использовать

Мотивация распределённых вычислений Хотим обрабатывать большие объёмы данных ( > 1 TB)
мощности сотен/тысяч CPUs
Хотим делать это быстро

Слайд 4

Возникающие проблемы

Отказы компьютеров
Отказы сети
Медленная коммуникация между компьютерами
Пропускная способность канала ограничена
Отсутствует глобальное

Возникающие проблемы Отказы компьютеров Отказы сети Медленная коммуникация между компьютерами Пропускная способность
состояние
Компьютеры и сеть гетерогенны, не доверены и могут измениться в любое время

Слайд 5

Идеи и решение

Идеи
Перенести вычисления ближе к данным
Максимально снизить сетевые коммуникации
Средство контроля распределенных

Идеи и решение Идеи Перенести вычисления ближе к данным Максимально снизить сетевые
вычислений
Сохранить файлы несколько раз для надежности
Решение от Google
2003 год Google File System
2004 год Map Reduce

Слайд 6

Распределенная файловая система

Chunk Server (Slave Node)
Файл разделен на блоки (chunk)
Типичный размер блока

Распределенная файловая система Chunk Server (Slave Node) Файл разделен на блоки (chunk)
16-64 Mb
Каждый блок реплицируется на несколько машин
Index Server (Master Node)
Хранение мета данных

Слайд 7

Распределенная файловая система

Распределенная файловая система

Слайд 8

Map Reduce

Автоматическое распараллеливание и распределение по нодам
Устойчивость к сбоям
Автоматичексое управление внутренней коммуникацией

Map Reduce Автоматическое распараллеливание и распределение по нодам Устойчивость к сбоям Автоматичексое
между машинами
Существование инструментов проверки и мониторинга
Прозрачная абстракция для программистов

Слайд 9

Идеология Map Reduce

Идеология Map Reduce базируется на 2-х основных парадигмах:
Парадигме функционального программирования
Парадигме

Идеология Map Reduce Идеология Map Reduce базируется на 2-х основных парадигмах: Парадигме функционального программирования Парадигме Master/Workers
Master/Workers

Слайд 10

Функциональное программирование

Функции не изменяют данные – они всегда создают новые
Оригинальные данные всегда

Функциональное программирование Функции не изменяют данные – они всегда создают новые Оригинальные
существуют в нетронутом виде
Порядок выполнения операций значения не имеет

Слайд 11

Пример

fun foo(l: int list) =
sum(l) + mul(l) + length(l)
Порядок функций

Пример fun foo(l: int list) = sum(l) + mul(l) + length(l) Порядок
sum(), mul() и т.д. значения не имеет – Все они не изменяют значение переменной I

Слайд 12

Map

Map f lst – создает новый список, применив f к каждому элементу

Map Map f lst – создает новый список, применив f к каждому
списка lst
Пример:
Square x = x * x
Map Square [1, 2, 3, 4, 5]

Слайд 13

Reduce

Foldl f x0 lst – свертка структуры данных к единственному значению
x0 –

Reduce Foldl f x0 lst – свертка структуры данных к единственному значению
аккумулирующее значение
Пример:
Sum(x, y) = x + y
Foldl Sum 0 [1, 1, 1, 1, 1]

Слайд 14

Master/Workers

Есть один главный процесс, порождающий несколько рабочих процессов для обработки отдельных элементов

Master/Workers Есть один главный процесс, порождающий несколько рабочих процессов для обработки отдельных
данных.
Управляет рабочими
Ждёт возвращаемого рабочими результата
Обеспечивает отказоустойчивость
Реплицирует результаты свертки

worker threads

master

Слайд 15

Поток данных в MapReduce моделе

Считывается большой набор данных
Map: извлекаем необходимую информацию
Shuffle and

Поток данных в MapReduce моделе Считывается большой набор данных Map: извлекаем необходимую
sort: на узле свертки ожидаются отсортированные ключи со списками значений
Reduce: агрегация, фильтрация, трансформация
Запись результатов

Слайд 16

Модель программирования

Заимствована из функционального программирования
Пользователь реализует две функции:
map (in_key, in_value) ->
(out_key,

Модель программирования Заимствована из функционального программирования Пользователь реализует две функции: map (in_key,
intermediate_value) list
reduce (out_key, intermediate_value list) ->
out_value list

Слайд 17

Функция map

На вход функции поступают данные в виде пар ключ-значение. Например данные

Функция map На вход функции поступают данные в виде пар ключ-значение. Например
из текстового файла представляют собой. Кортежи вида (имя файла, строка файла).
map() создаёт одно или несколько промежуточных значений, используя выходной ключ, переданный на вход.

Слайд 18

Функция reduce

После завершения стадии map’a все промежуточные значения для каждого выходного ключа

Функция reduce После завершения стадии map’a все промежуточные значения для каждого выходного
добавляются в список
reduce() комбинирует эти промежуточные значения в одно или более значений для каждого одинакового ключа
На практике обычно по одному значению для каждого выходного ключа

Слайд 19

MapReduce: workers

MapReduce: workers

Слайд 20

Параллелизм

Функции map() выполняются параллельно, создавая различные промежуточные данные для различных входных групп

Параллелизм Функции map() выполняются параллельно, создавая различные промежуточные данные для различных входных
данных
Функции reduce() также выполняются параллельно, каждая работая над своим выходным ключом
Все значения обрабатываются независимо
Узкое место: фаза reduce не может быть начата, пока не завершится фаза map

Слайд 21

Локальность

Главная программа разбивает задачи основываясь на расположении данных: старается запускать map функцию

Локальность Главная программа разбивает задачи основываясь на расположении данных: старается запускать map
на той же машине, где лежат данные.
Входные данные для функции map разбиваются на блоки размером 64 MB (Это размер блока файловой системы Гугла)

Слайд 22

Устойчивость к сбоям

Главная программа обнаруживает отказы рабочих нодов и перезапускает задачи. Также

Устойчивость к сбоям Главная программа обнаруживает отказы рабочих нодов и перезапускает задачи.
происходит повторный запуск медленно выполняющихся заданий
Главная программа запоминает конкретные пары ключ/значения, вызывавшие сбои и пропускает их при повторном запуске задач. Как результат – обходит ошибки в сторонних библиотеках!

Слайд 23

Оптимизация

Фаза reduce не может начаться пока не закончена фаза map. Один медленный

Оптимизация Фаза reduce не может начаться пока не закончена фаза map. Один
диск может замедлить весь процесс.
Поэтому главный процесс повторно выполняет медленно выполняющиеся задачи. Использует результаты первого завершившегося.

Слайд 24

Оптимизация

Расширение набора пользовательских функций:
Partition(ключ, кол-во reduce узлов) => reduce узел для данного

Оптимизация Расширение набора пользовательских функций: Partition(ключ, кол-во reduce узлов) => reduce узел
ключа
Часто вычисляется как хэш ключа (Hash(k) mod n)
Разделяет пространство ключей для параллельного выполнения свертки
Combine(ключ, список значений) => (ключ, значение)
Мини reduce, выполняется после map фазы на том же узле
Ипользуется для понижения трафика в сети

Слайд 25

MapReduce: workers (opt.)

MapReduce: workers (opt.)

Слайд 26

Пример: подсчет статистики по словам

Map(string input_key, input_value):
// input_key: document name
// input_value: document

Пример: подсчет статистики по словам Map(string input_key, input_value): // input_key: document name
contents
For each word w in input_value:
EmitIntermediate(w, “1”);
Reduce(string output_key, Iterator intermediate_values):
// output_key: a word
// intermediate_values: a list of counts
Int result = 0;
For each value v in intermediate_values:
result += ParseInt(v);
Emit(AsString(result));

Слайд 27

Пример: YAHOO web graph

Для каждой странички формируетя список веб документов, ссылающихся на

Пример: YAHOO web graph Для каждой странички формируетя список веб документов, ссылающихся
эту страничку
На входе: веб документы
Map: (doc_name, content) =>
(href, {doc_name, link_text}) список
Reduce: (href, [{doc_name1, link_text1}, …]) =>
некоторая фильтрация (спам и т. д.)
На выходе: таблица вида {target_url, source_url, link_text}

Слайд 28

Пример: Last.fm top list

На проигрыватель установлен плагин Last.fm
Пользователь слушает песню => пишется

Пример: Last.fm top list На проигрыватель установлен плагин Last.fm Пользователь слушает песню
лог вида
{user, band, track}
На входе: лог файлы
Map: (log_name, log_data) => (user_band_tr, 1) список
Reduce: (user_band_tr, [1, .. 1]) => сумма элементов списка
На выходе: топ листы прослушиваемых треков для каждого пользователя

Слайд 29

Реализации

Google
Недоступна вне Google
GFS
Hadoop
Открытая имплементация на Java
HDFS
Aster Data
Cluster-optimized SQL Database которая также реализует

Реализации Google Недоступна вне Google GFS Hadoop Открытая имплементация на Java HDFS
MapReduce

Слайд 30

Решаемые задачи

Индексация интернета
Задачи исследования данных
Data Mining данных
Задачи построения отчетов
Рендеринг набора кадров высококачественной

Решаемые задачи Индексация интернета Задачи исследования данных Data Mining данных Задачи построения
анимации
Симуляция нескольких сотен тысяч персонажей
Симуляция интернета(PlanetLab)
Ускорение скорости доставки контента(Akamai)

Слайд 31

Будущее

Microsoft Dryad – развитие идей map reduce.
Программист определяет ацикличный направленный граф с

Будущее Microsoft Dryad – развитие идей map reduce. Программист определяет ацикличный направленный
С++ кодом в каждой вершине.
Каждая работа может иметь множество входных и выходных потоков.
Dryad занимается тем, что:
Определяет когда выполнять задачи
Где их выполнять
Восстанавливает компьютер после сбоя
Соединяет входы с выходами

Слайд 32

Язык диаграмм Dryad

G^n = параллельный запуск n копий G
A >= B =

Язык диаграмм Dryad G^n = параллельный запуск n копий G A >=
подключить входы B к выходам А
A>>B = подключить каждую работу в А к работе в В
A || B = объединение работ
Например, a диаграмма MapReduce может записана на языке Dryad как Mapper^n >> Reducer^m .
Dryad также позволяет указывать как реализовать каждой ребро: как файл, TCP pipe или FIFO на общей памяти.
Имя файла: MAP-REDUCE.pptx
Количество просмотров: 214
Количество скачиваний: 4