Обработка больших данных. Часть 1

advertisement
Что такое “Большие Данные”
(Big Data) и как их обрабатывать?
По материалам лекции проф. David J. DeWitt
на ежегодном собрании пользователей SQL Server
Что означает термин “Большие Данные”?
Собрание огромного
количества записей –
десятки и сотни PBs
Для кого-то это использование
т.н.NoSQL систем или параллельных
реляционных БД
Обычно размещаются на больших кластерах ,
построенных на дешевых процессорах.
Facebook (в 2009 г.) имел кластер из 2700 узлов с
объемом дисковой памяти 60PB ( 100PB в 2012)!!
2
Amount of Stored Data By Sector Если любите аналогии…
1000
900
800
Petabytes
700
(in Petabytes, 2009)
35ZB = достаточно
данных,
966 чтобы образовать стопку CD
дисков
(0.8GB каждый) высотой с
848
половину пути от Земли до Марса,
715
или 70 стопок
от Земли до Луны
619
600
500
434
Марс
364
400
269
300
227
200
100
0
Земля
Sources:
"Big Data: The Next Frontier for Innovation, Competition and Productivity."
US Bureau of Labor Statistics | McKinsley Global Institute Analysis
1 zettabyte?
= 1 million petabytes
= 1 billion terabytes
= 1 trillion gigabytes
3
Почему внезапный взрыв интереса?

Значительно возросшее количество и разнообразие
источников, вырабатывающих огромный объем
данных





Аналогово-цифровые датчики(координатные, звуковые, …)
Web 2.0 текст (твиттер, википедия, … )
Web клик-поток
Понимание, что некоторые данные “слишком ценны”,
чтобы удалять их, либо само удаление слишком
дорого.
Существенное снижение стоимости оборудования,
особенно – дисковой памяти

Если бы цена была $500/GB (в 1994 г.), не было бы
революции Больших Данных” (в 2014 г. $0.05/GB)
4
Как работать с “Большими Данными”?
Использовать
параллельную
(реляционную) БД
eBay – 10PB на 256 узлах
Использовать NoSQL
Facebook - 20PB на 2700 узлах
Bing – 150PB на 40000 узлах
Ebay – 5PB на 532 узлах
5
Что означает NoSQL?

Не то, что SQL не должен использоваться для
обработки “Больших данных”.

Не то, что SQL и реляционные БД устарели и отмирают.

Не только SQL. Для определенного круга задач другие
подходы к хранению и обработке информации могут
быть более эффективными, особенно с точки зрения
легкости расширения (масштабируемости)
информационной базы при постоянном добавлении
новых данных.

Не путать с NewSQL – новый подход к построению
реляционных БД для приложений, ориентированных
на обработку большого количества транзакций,
сочетающий удобства SQL с масштабируемостью
NoSQL систем.
6
Почему NoSQL?

Более гибкая модель данных.



Не требуется заранее схема.
Может использоваться популярный JSON (JavaScript Object
Notation) формат для описания данных.
Ослабление требования
целостности/согласованности данных на условие
конечной (возможной в будущем) согласованности.

Готовность поступиться целостностью ради доступности.

Дешевое/бесплатное ПО.

Не надо знать языки кроме стандартных Java/C/C++
(предположительно :-) ) освоенных в
школе/университете.

Более быстрый доступ к данным.
7
Более быстрый доступ к данным
SQL:
Данные
поступают
Очистка
данных
3
1
Преобразование
данных
Загрузка
данных
5
4
Разработка
схемы БД
SQL
запросы
СУБД
2
NoSQL:
Данные
поступают
6
NoSQL
система
Приложение
2
1
Не требуется очистка!
Не требуется преобразование!
Не требуется загрузка!
Анализ там где данные оказались!

8
Два основных типа NоSQL систем

Хранилище “ключ(и): значение”
Примеры: MongoDB, CouchBase, HBase, Cassandra, Windows
Azure, …
 Гибкая модель данных типа JSON
 Записи распределены между узлами кластера путем хеширования
значения ключа (sharding)
 Поиск/извлечение/обновление отдельной записи по ключу


Hadoop
Программная среда для создания (автоматически)
масштабируемых и отказо-устойчивых систем сбора, хранения и
обработки больших объемов данных.
 Модель данных обычно отсутствует


Записи хранятся в распределенной файловой системе.
9
Два мира – новая реальность
Структурированный
Реляционные СУБД
&
Не структурированный
NoSQL Системы
(Не-)(полу-)структурированные данные,
Структурированные данные с
схема (заранее) не известна
(заранее) известной схемой
ACID (АСИН)
ACID не гарантируется
Транзакции
Транзакции не поддерживаются
Использование SQL в качестве языка
SQL не используется
Модель жесткой согласованости
Возможная согласованность
ETL(извлечение,преобразование,загрузка)
ETL не требуется
Дольше до получения какого-то результата Конкретный результат м.б. быстрее
Зрелость, стабильность, эффективность
Гибкость
10
Что нас ожидает?





Мир действительно изменился
Реляционные СУБД больше не являются основным и
подавляющим инструментом хранения и обработки
данных
Новые подходы должны приниматься как новая
реальность, требуется понимание как наилучшим
образом использовать новые технологии, такие как
Hadoop
Реляционные СУБД продолжат доминировать в
системах обработки транзакций и в небольщих до
средних размеров “хранилищ данных”
Много пользователей будут вынуждены иметь дело с
обоими мирами
11
2006
2003
Hadoop
MR/GFS

Огромный объем данных из клик-потоков, которые
необходимо сохранять и анализировать
Требования:



Сохранение
Масштабируемость до PB и тысяч
Hadoop = HDFS
узлов
Высокий уровень
отказоустойчивости
(Относительная) простота
программирования
Обработка
Сохранение
+ MapReduce
Обработка
GFS + MapReduce
Распределенная и
отказо-устойчивая
“новая” парадигма
программирования
12
Масштабируемость
и высокий уровень
отказоустойчивости
Возможность быстро
анализировать
большие множества
записей без
необходимости
начального
построения модели,
очистки и загрузки
данных
Низкая
начальная
стоимость
оборудования и
программного
обеспечения
Простая парадигма
программирования
для написания и
выполнения
программ
(автоматически)
масштабируемых до
тысяч узлов и PB
данных
Возможность
использования
для «Хранилищ
Данных»





HDFS – распределенная, отказо-устойчивая файловая система
MapReduce – набор средств для разработки/выполнения
распределенных отказо-устойчивых приложений
Hive & Pig – языки разработки приложений(с элементами SQL)
Sqoop – пакет программ для передачи данных между HDFS и
реляционной БД
А также другие…
Отчеты
Средства
загрузки
Рел.БД
Hive & Pig
Map/
Reduce
HBase
Sqoop
HDFS
14
3
Hive & Pig
2 Map/
Reduce
4
Sqoop
Реляционная
БД
5
HDFS
1
15
Основа всей среды разработки
Hadoop
 Цели HDFS:

Масштабируемость до тысяч узлов
Предположение, что отказы
(оборудования и ПО) возникают
достаточно часто
 Предназначена для хранения
небольшого количества очень
больших файлов
 Файл записывается один раз, а
читается многократно


Традиционная иерархическая
организация файлов и оглавлений
 Высокая степень переносимости
между разными платформами

Hive & Pig
Map/
Reduce
Sqoop
HDFS
16
Большой файл
1100101010011100101010011100101010011100101010011100110010101001110010101001110010101001110010101001110010101001
1100101010011100101010011100101010011100101010011100110010101001110010101001110010101001110010101001110010101001
1100101010011100101010011100101010011100101010011100110010101001110010101001110010101001110010101001110010101001
1100101010011100101010011100101010011100101010011100110010101001110010101001110010101001110010101001110010101001
1100101010011100101010011100101010011100101010011100110010101001110010101001110010101001110010101001110010101001
1100101010011100101010011100101010011100101010011100110010101001110010101001110010101001110010101001110010101001
1100101010011100101010011100101010011100101010011100110010101001110010101001110010101001110010101001110010101001
1100101010011100101010011100101010011100101010011100110010101001110010101001110010101001110010101001110010101001
…
6440MB
Обозначим блоки разным цветом
Block
Блок
1
Block
Блок
2
Block
Блок
3
Block
Блок
4
Block
Блок
5
Block
Блок
6
64MB
64MB
64MB
64MB
64MB
64MB
т.е. Размер блока = 64MB
…
Block
Блок
100
Block
Блок
101
64MB
40MB
Файлы HDFS состоят из множества блоков
• Обычный размер блока 64MB
• Каждый блок хранится как отдельный
файл в локальной файловой системе
(например, NTFS)
17
Блок
1
Блок
2
Блок
3
Блок
1
Блок
3
Блок
2
Блок
2
Блок
3
Блок
1
Узел 1
Узел 2
Узел 3
Узел 4
Узел 5
Фактор дублирования = 3
 Стратегия размещение по умолчанию:



Первая копия записывается на узел, создающий файл (близость записи)
Вторая копия записывается на узел в той же стойке
(чтобы минимизировать сетевой трафик между стойками)
Третья копия записывается на узел в другой стойке
18

Узел [обслуживания] имен (NameNode) – один на кластер

Отвечает за операции над метаданными (данные о данных),
избыточность/дублирование данных, местоположение блоков
Узел имен

Резервный узел имен(Backup Node) – резервная копия узла
имен
Резервный узел имен

Мастер
(копия)
Узлы данных(DataNodes) – один на каждый узел кластера


Отвечает за хранение блоков файла
Предоставляет данные файла в ответ на запрос приложения
DataNode
DataNode
DataNode
Узел данных
Робот
19
Узел имен
Резервный
узел имен
(проверка состояния, балансирование
загрузки, дублирование блоков, и т.д.)
Узел данных
Узел данных
Узел данных
Узел данных
Узел данных
Узлы записывают на свои локальные диски
20
Большой
файл
110010101001
010100101010
011001010100
101010010101
001100101010
010101001010
100110010101
001010100101
{узел 2,
1,
2,
3}
2, узел 3,
4,
3, узел 4}
5}
основываясь на “факторе
дублирования” (по умолчанию - 3)
HDFS
Клиент
Узел имен указывает клиенту, куда
записать каждый блок файла
Клиент передает блоки
указанным узлам напрямую
Узел имен
Резервный
Узел имен
И так далее…
Узел данных
Узел данных
Узел данных
Узел данных
Узел данных
21
Большой
файл
110010101001
010100101010
011001010100
101010010101
001100101010
010101001010
100110010101
001010100101
HDFS
Клиент
Возвращает расположение
блоков файла
Узел имен
Резервный
узел имен
Поток блоков от узлов ранных
Узел данных
Узел данных
Узел данных
Узел данных
Узел данных
22

HDFS разрабатывалась, предполагая частые
отказы (как оборудования так и ПО)
Типы отказов:





Ошибки или полный отказ
дисков
Отказы узлов данных
Отказы стоек/сетевых
коммутаторов
Отказы узла имен
Полный отказ дата-центра
DataNode
NameNode
23
Узел имен
Резервный
узел имен
Каждый блок данных автоматически дублируется на
Узел имен обнаруживает отказ узла данных
оставшихся узлах удовлетворяя «фактору дублирования»
Узел данных
Узел данных
Узел данных
Узел данных
Узел данных
24
Восстановление может быть
автоматическим или требовать
ручного вмешательства
в некоторых случаях
Узел имен
Резервный
узел имен
Отказ не катастрофический,
так как имеется резервный узел
Узел данных
Узел данных
Узел данных
Узел данных
Узел данных
25
Узел имен
Резервный
узел имен
данных равномерно
УзелБлоки
имен обнаруживает,
что новый
перераспределяются
узел данных
добавлен к кластеру
Узел данных
Узел данных
Узел данных
Узел данных
Узел данных
26

Высокая степень масштабируемости



Не используются «зеркальные диски» и RAID.



Тысячи узлов данных и огромные (сотни TB) файлы
Большой размер блоков для повышения скорости
последовательного ввода/вывода
Меньшая цена
Почему?
Использвание единого инструмента (тройное дублирование
блоков) для борьбы с различными типами отказов вместо
различных механизмов
Недостатки

Размещение блоков «прозрачно» для ПО верхнего
уровня


Многие возможности оптимизации (с успехом используемые в
параллельных реляционных БД) не применимы
Принцип «одна запись – многократное чтение» может
быть слишком ограничительным
27
3
Hive & Pig
2 Map/
Reduce
4
Sqoop
Relational
Databases
5
HDFS
1
28
Среда программирования (библиотеки и исполняющая
система) для анализа данных, хранимых в HDFS
 MapReduce задание состоит из двух функций/этапов:

map()  reduce()
разделяй & властвуй
(функция отображения)
объединяй & сокращай
(функция агрегирования)

Пользователь только разрабатывает Map и Reduce
функции

MR среда «собирает» все вместе и координирует
выполнение Map и Reduce функций на кластере,
обеспечивая


отказо-устойчивость
масштабируемость
29
В основном, это…
1.
Взять большую задачу и разделить ее на под-задачи
MAP
…
2.
Выполнить (одну и ту же) функцию отображения для всех подзадач
REDUCE
DoWork()
3.
DoWork()
DoWork()
…
Соединить результат всех под-задач (функция агрегирования)
…
Вывод
30
<ключi, знач.i> Mapper
Узел данных
<ключA, знач.Ai>
<ключB, знач.Bi>
<ключC, знач.Ci>
…
<ключA, список(знач.Ai, знач.Aj, знач.Ak, …)>
Reducer
<ключi, знач.i> Mapper
Узел данных
<ключi, знач.i> Mapper
<ключA, знач.Aj>
сорти<ключB, знач.Bj>
<ключC, знач.Cj> ровка
и
…
группирование
<ключA, знач.Ak> по
<ключB, знач.Bk>
ключу
<ключ , знач. >
…
C
<ключB, список(знач.Bi, знач.Bj, знач.Bk, …)>
Reducer
Получение
и вывод
результата
Ck
Узел данных
<ключC, список(знач.Ci, знач.Cj, знач.Ck, …)>
Reducer
<ключi, знач.i> Mapper
<ключA, знач.Al>
<ключB, знач.Bl>
<ключC, знач.Cl>
…
31
- Координирование всех MR задач и событий
- Управление очередями работ и графиком выполнения
- Поддержка и контроль Операторов Задач
- Перемещение/возобновление MR задач, если нужно
- Использование «контрольных точек» для
восстановления после отказа
Узел Мастер
имен Hadoop
Оператор
Работ
Узел имен
Уровень
MapReduce
Уровень
HDFS
Оператор Работ контролирует и следит
за состоянием Операторов Задач
Выполнение
индивидуальных MR
задач, назначенных
Оператором
Работ (в
Уровень
отдельной
JVM)
MapReduce
Уровень
HDFS
hadoopУзелДанных1
Оператор
Задач
hadoophadoopУзелДанных2
УзелДанных3
Роботы
Оператор
Задач
Оператор
Задач
hadoopУзелДанных4
Оператор
Задач
ОперЗадач сохраняет промежуточные результаты
УзелДанных
УзелДанных
УзелДанных
УзелДанных
Промежуточные данные сохраняются в локальной файловой системе
32
Поставляет работы Оператору Работ
MR
клиент
Оператор
Работ
Работы ставятся
в очередь
Map функции назначаются Опер.Задач
Начинается этап объединения/сокращения
на каждом Узле Данных
Функции отображения
запускаются на
отдельной JVM и
выполняются
ОперЗадач
ОперЗадач
ОперЗадач
ОперЗадач
Mapper
Reducer
Mapper
Reducer
Mapper
Reducer
Mapper
Reducer
Функции отображения сохраняют
промежуточные результаты
локальные файловые системы узлов данных
33
54235
$75
54235
$22
10025
$60
10025
$95
44313
$55
53705
$65
53705
$30
53705
$15
02115
$15
02115
$15
44313
$10
44313
$25
4
54235
$75
7
10025
$60
2
53705
$30
1
02115
4
УзелДанных2
54235
$75
5 7 53705
10025 $65
$60
$15
3
0
8
54235 $22
10025 $95
44313
Mapper
$55
5
53705
$65
0
54235
$22
5
53705
$15
2
53705
$30
6
44313
$10
1
02115
$15
Mapper
УзелДанных1
Блоки
файла
продаж
в HDFS
(клиент, индекс, объем продаж)
УзелДанных3
Получить сумму продаж по каждому индексу
3
10025
$95
5
53705
6
44313
44313 6 $10
8
44313
$55
6
44313
$25
9
02115
$15
$15
9
02115
Group
By
Group
By
Один
сегмент
данных
на задачу
агрегир.
$25
$15
Задачи
отображения
34
$65
$75
53705
$30
54235
$22
53705
$15
10025
$60
10025
$95
44313
$55
53705
Mapper
53705
54235
$65
53705
$30
53705
$15
02115
$15
02115
44313
44313
Сортировать
53705
$65
53705
$30
53705
$15
Агрегировать
53705
$110
10025
$155
44313
$90
02115
$30
54235
$97
Reducer
Перетасование
Mapper
Reducer
44313
$10
10025
$60
44313
$25
10025
$95
10025
$60
44313
$10
10025
$95
44313
$25
44313
$55
44313
$55
Сортировать
Задачи
агрегирования
54235
$75
54235
$22
02115
$15
02115
$15
Агрегировать
Reducer
02115
$15
02115
$15
54235
$75
54235
$22
$15
$10
$25
Сортировать
Агрегировать
36
Файл A
Reducer 1
Файл B
Reducer 2
Различные ключи
Reducer N
Задачи агрегирования
выполняют само
соединение
Перетасовка по сети
и сортировка
Перетасовка и сортировка
Задача отображения
генерирует множество
пар (ключ, запись)
Mapper
1
Mapper
2
Mapper
3
Mapper
M
Каждая задача
отображения
обрабатывает по
одному блоку в раз
HDFS хранит блоки данных
(Дублирование не показано)
37

Действительное число задач отображения M обычно
выбирается значительно большим, чем число узлов.

Почему?

Помогает иметь дело с неравномерность распределения
значений ключей (data skew) и отказами
Пример:
Скажем, M = 10,000 и
W = 100 (W - число Map роботов)
Каждый робот выполнит (10,000 / 100) = 100 задач отображения
Если на этапе отображения возникант неравномерность или
отказ, невыполненная задача может быть легко
перераспределена для выполнения на другом роботе

Проблема неравномерности на уровне агрегирования не
исчезает
 Пример: В запросе “получить сумму продаж по каждому
индексу”, некоторые из индексов могут иметь гораздо
больше записей для обработки, чем другие
38
Подобно HDFS, среда разработки MapReduce
построена, чтобы обеспечть высокий уровень отказоустойчивости
 Отказ робота (на этапе отображения или
агрегирования)





Обнаруживается периодическими проверками,
исходящими от Мастера
Незавершенные задачи стартуют сначала на другом
узле
Если узел отказывает после завершения этапа
отображения – вся задачи отображения этого узла
переделывается, и все задачи агрегирования
уведомляются.
Отказ Мастера

Если отказывает Мастер (-процесс), то вся работа
полностью переделывается
39

Весьма высокая отказоустойчивость




Относительно простое
программирование
распределенных
вычислений для типичных
функций типа агрегирования
Среда MR позволяет
программисту не заботиться
об отказах и сбоях
Схема/структура данных
кодируется в каждом приложении
Недостаток общей схемы данных



Делает совместное использование
данных между приложениями
весьма затруднительным
Невозможно использование
аппарата реляционых БД (таких
как индексы, ограничения
целостности, представления, …)
для эффективной обработки
Нет декларативного языка для
описания и доступа к данным типа
SQL
40
3
Hive & Pig
2 Map/
Reduce
4
Sqoop
Relational
Databases
5
HDFS
1
41

использовали разные подходы
к использованию декларативных языков для работы с
данными (подобно SQL) в дополнение к MapReduce
и
Facebook разработала язык
типа SQL,

названный

HIVE

Yahoo разработала более
процедурный язык,
названный
PIG
Оба подхода используют MapReduce как язык
описания/выполнения работ

Запросы/программы на языках Hive и Pig компилируются в
последовательность работ MapReduce
42
Рассмотрим два файла (множества записей):
UserVisits
Rankings
(
(
sourceIP STRING,
destURL STRING
visitDate DATE,
adRevenue FLOAT,
..
pageURL STRING,
pageRank INT,
avgDuration INT
);
);
Запрос:
Найти sourceIP адрес, генерирующий
наибольший доход, вместе со
средним рангом посещенных страниц
43
// Phase #1
// ------------------------------------------JobConf p1_job = base.getJobConf();
p1_job.setJobName(p1_job.getJobName() + ".Phase1");
Path p1_output = new Path(base.getOutputPath().toString() + "/phase1");
FileOutputFormat.setOutputPath(p1_job, p1_output);
package edu.brown.cs.mapreduce.benchmarks;
import java.util.*;
import org.apache.hadoop.conf.*;
import org.apache.hadoop.io.*;
import org.apache.hadoop.mapred.*;
import org.apache.hadoop.util.*;
import org.apache.hadoop.mapred.lib.*;
import org.apache.hadoop.fs.*;
import edu.brown.cs.mapreduce.BenchmarkBase;
//
// Make sure we have our properties
//
String required[] = { BenchmarkBase.PROPERTY_START_DATE,
BenchmarkBase.PROPERTY_STOP_DATE };
for (String req : required) {
if (!base.getOptions().containsKey(req)) {
System.err.println("ERROR: The property '" + req + "' is not set");
System.exit(1);
}
} // FOR
public class Benchmark3 extends Configured implements Tool {
public static String getTypeString(int type) {
if (type == 1) {
return ("UserVisits");
} else if (type == 2) {
return ("Rankings");
}
return ("INVALID");
}
/* (non-Javadoc)
* @see org.apache.hadoop.util.Tool#run(java.lang.String[])
*/
public int run(String[] args) throws Exception {
BenchmarkBase base = new BenchmarkBase(this.getConf(), this.getClass(), args);
Date startTime = new Date();
System.out.println("Job started: " + startTime);
1
p1_job.setInputFormat(base.getSequenceFile() ? SequenceFileInputFormat.class :
KeyValueTextInputFormat.class);
if (base.getSequenceFile()) p1_job.setOutputFormat(SequenceFileOutputFormat.class);
p1_job.setOutputKeyClass(Text.class);
p1_job.setOutputValueClass(Text.class);
p1_job.setMapperClass(base.getTupleData() ?
edu.brown.cs.mapreduce.benchmarks.benchmark3.phase1.TupleWritableMap.class :
edu.brown.cs.mapreduce.benchmarks.benchmark3.phase1.TextMap.class);
p1_job.setReducerClass(base.getTupleData() ?
edu.brown.cs.mapreduce.benchmarks.benchmark3.phase1.TupleWritableReduce.class :
edu.brown.cs.mapreduce.benchmarks.benchmark3.phase1.TextReduce.class);
p1_job.setCompressMapOutput(base.getCompress());
// Phase #2
// ------------------------------------------JobConf p2_job = base.getJobConf();
p2_job.setJobName(p2_job.getJobName() + ".Phase2");
p2_job.setInputFormat(base.getSequenceFile() ? SequenceFileInputFormat.class :
KeyValueTextInputFormat.class);
if (base.getSequenceFile()) p2_job.setOutputFormat(SequenceFileOutputFormat.class);
p2_job.setOutputKeyClass(Text.class);
p2_job.setOutputValueClass(Text.class);
p2_job.setMapperClass(IdentityMapper.class);
p2_job.setReducerClass(base.getTupleData() ?
edu.brown.cs.mapreduce.benchmarks.benchmark3.phase2.TupleWritableReduce.class :
edu.brown.cs.mapreduce.benchmarks.benchmark3.phase2.TextReduce.class);
p2_job.setCompressMapOutput(base.getCompress());
2
//
// Execute #1
//
base.runJob(p1_job);
//
// Execute #2
//
Path p2_output = new Path(base.getOutputPath().toString() + "/phase2");
FileOutputFormat.setOutputPath(p2_job, p2_output);
FileInputFormat.setInputPaths(p2_job, p1_output);
base.runJob(p2_job);
//
// Execute #3
//
Path p3_output = new Path(base.getOutputPath().toString() + "/phase3");
FileOutputFormat.setOutputPath(p3_job, p3_output);
FileInputFormat.setInputPaths(p3_job, p2_output);
base.runJob(p3_job);
// Phase #3
// ------------------------------------------JobConf p3_job = base.getJobConf();
p3_job.setJobName(p3_job.getJobName() + ".Phase3");
p3_job.setNumReduceTasks(1);
p3_job.setInputFormat(base.getSequenceFile() ? SequenceFileInputFormat.class :
KeyValueTextInputFormat.class);
p3_job.setOutputKeyClass(Text.class);
p3_job.setOutputValueClass(Text.class);
//p3_job.setMapperClass(Phase3Map.class);
p3_job.setMapperClass(IdentityMapper.class);
p3_job.setReducerClass(base.getTupleData() ?
edu.brown.cs.mapreduce.benchmarks.benchmark3.phase3.TupleWritableReduce.class :
edu.brown.cs.mapreduce.benchmarks.benchmark3.phase3.TextReduce.class);
// There does need to be a combine if (base.getCombine()) base.runCombine();
return 0;
}
}
3
4
44
SELECT sourceIP, totalRevenue, avgPageRank
FROM
SELECT sourceIP, sum(adRevenue) as totalRevenue,
avg(pageRank)as avgPageRank
FROM Rankings as R, Uservisits as UV
WHERE R.pageURL = UV.destURL and UV.visitDate
between Date (‘2000-01-15’) and Date (‘2000-01-22’)
GROUP BY UV.sourceIP
ORDER BY totalRevenue DESC limit 1;
45
Отказо-устойчивая система
Большие
объемы данных
Запросы на
декларативном
языке(типа SQL)
(использование Hadoop)
HIVE
HiveQL = Удобные средства написания
запросов(SQL) + MapReduce
46
Подобно реляционным БД, данные
хранятся в таблицах
 Типы данных богаче, чем в SQL



Простые типы: int, float, string, date
Сложные типы: ассоциативные массивы,
списки, структуры
CREATE Table
Example:
Employees
(
Name string,
Salary integer,
Children List <Struct <firstName: string, DOB:date>>
)
47

Как и в параллельных реляционных БД, Hive таблицы
могут храниться в нескольких разделах

Пример:
Sales(custID, zipCode, date, amount)
partitioned by state
Hive DDL:
Create Table Sales(
custID INT,
zipCode STRING,
date DATE,
amount FLOAT)
Partitioned By
(state STRING)
Sales
custID zipCode …
custID zipCode …
201
12345 …
13
54321 …
105
12345 …
67
54321 …
933
12345 …
45
74321 …
Alabama
HDFS оглавление
Alaska
custID zipCode …
…
78
99221 …
345
99221 …
821
99221 …
Wyoming
1 HDFS файл на каждый штат
48
Sales(custID, zipCode, date, amount) partitioned by state
HDFS оглавление
Sales
custID zipCode …
HDFS файлы
custID zipCode …
201
12345 …
13
54321 …
105
12345 …
67
54321 …
933
12345 …
45
74321 …
Alabama
custID zipCode …
…
Alaska
78
99221 …
345
99221 …
821
99221 …
Wyoming
Запрос 1: За последние 30 дней выдать объем продаж
по каждому индексу (zipCode):
SELECT zipCode, sum(amount)
FROM Sales
WHERE getDate()-30 < date < getDate()
GROUP BY zipCode
Запрос будет
быполнен по всем
штатам/разделам
49
Sales(custID, zipCode, date, amount) partitioned by state
HDFS оглавление
Sales
custID zipCode …
HDFS файлы
custID zipCode …
201
12345 …
13
54321 …
105
12345 …
67
54321 …
933
12345 …
45
74321 …
Alabama
Alaska
custID zipCode …
…
78
99221 …
345
99221 …
821
99221 …
Wyoming
Запрос 2: За последние 30 дней выдать объем продаж по каждому
индексу (zipCode) штата Alabama:
SELECT zipCode, sum(amount)
FROM Sales
WHERE State = ‘Alabama’ and
getDate()-30 < date < getDate()
GROUP BY zipCode
50

Оптимизация запросов



Эвристические
приемы
Ограниченная статистика (только размер
файлов) делает практически невозможной
оптимизацию запросов на основе
стоимости
Используются простые эвристические
приемы для выборки перед соединением,
раннего исключение столбцов, ...
Результат частичной оптимизации –
направленный граф (без циклов)
MapReduce работ на языке Java

Блок
оптимизации
Запрос выполняется
(контролируется) стандартным MR
планировщиком

Отказо-усточивость
обеспечивается автоматически

Планы сложные для
понимания и анализа

Может пережить отказы
узла/диска/сетевого маршрутизатора
в середине обработки запроса
Планы выполнения выглядят
сложнее поскольку каждый шаг
обработки использует в качестве
входа отдельный файл HDFS
51

Оборудование


Кластер из 9 HP узлов, каждый имеет 2 4-х ядерных
процессорв, 16GB памяти, 4 жестких диска для
данных
ПО

SQL Server PDW (Parallel Data Warehouse)


Windows Hadoop Version 0.20.203,
Hive Version 0.7.1



1 контролирующий узел, 8 рабочих
1 узел имен, 8 узлов данных
Windows Server 2008
Тест таблицы из TPC-H (SF 800)


lineitem: 612GB, 4.8B записей
orders: 140GB, 1.2B записей
52
Query 1: SELECT count(*) FROM lineitem
Query 2: SELECT max(l_quantity)
FROM lineitem
WHERE l_orderkey > 1000 and l_orderkey < 100000
GROUP BY l_linestatus
Secs.
1500
1000
Hive
PDW
500
0
Query 1
Query 2
53
Query 3: SELECT max(l_orderkey)
FROM orders, lineitem
where l_orderkey = o_orderkey
2 случая для PDW :
Разделение
Hive таблиц
i) PDW-U:
ordersпо
partitioned on c_custkey
столбцу соединенияlineitem
не дает partitioned on l_partkey
ii) PDW-P:
ordersнет
partitioned on o_orderkey
никаких выгод,
поскольку
Демонстрирует преимущество
lineitem
параллельных реляционных БД, в
средств контроля, куда
HDFS partitioned on l_orderkey
которых способ разделение таблиц
позволяет минимизировать
перемещение данных между узлами
кластера (соединяемые разделы
находятся на том же узле)
размещаетSecs.
блоки данных таблиц
4000
3000
Hive
PDW-U
PDW-P
2000
1000
0
Hive
PDW-U
PDW-P
54
Рассмотрим два файла (множества записей):
UserVisits
Rankings
(
(
sourceIP STRING,
destURL STRING
visitDate DATE,
adRevenue FLOAT,
..
pageURL STRING,
pageRank INT,
avgDuration INT
);
);
Запрос:
Найти sourceIP адрес, генерирующий
наибольший доход, вместе со
средним рангом посещенных страниц
55
UV = load ‘userVisits’
as (sourceIP, destURL, visitDate, adRevenue);
UVFiltered = filter UV by visitDate >= ‘2000-01-15’
and visitDate <= ‘2000-01-22’;
R = load ‘Ranking’ as (pageURL, pageRank);
Joined
= join UVFiltered by destURL, R by pageURL;
Grouped = group Joined by sourceIP;
Summed
= foreach Grouped generate group,
sum(adRevenue) as totalRevenue,
avg(pageRank) as avgPageRank;
Sorted
= order Summed by totalRevenue desc ;
Top1
= limit Sorted 1;
store Top1 into ‘topIPaddress’;
56
3
Hive & Pig
2 Map/
Reduce
4
Sqoop
Relational
Databases
5
HDFS
1
57
(причина 1)
Структурированные
данные (рел.БД)
Неструктурированные
данные (Hadoop)
Sqoop



Все больше данных изначально попадает в
неструктурированный мир
MapReduce – прекрасное средство для ETL (выбор,
очистка, преобразование, загрузка)
Sqoop предоставляет утилиту загрузки, выполняемую из
командной строки
58
(причина 2)
Неструктурированные
данные (Hadoop)
Структурированные
данные (рел.БД)
Sqoop


Некоторые задачи анализа проще делать в процедурном
языке или в языке типа HiveQL с элементами MapReduce,
когда необходимо
Sqoop предоставляет:


Как мы увидим
эффективность этого
невысока
утилиту выгрузки, выполняемую из командной строки
Возможность для Map задач “доставать” данные из
реляционной БД, используя SQL
59
(причина 3)
Структурированные
данные (рел.БД)
Неструктурированные
данные (Hadoop)
Sqoop

Некоторые приложение требуют данные из обоих миров

Только в неструктурированном мире т.к. неструктурированные
данные не могут быть загружены в реляционную БД
По-прежнему,
эффективность этого
невысока

Использвать утилиту выгрузки и доступ к БД для Map задач
60
Map задача требует результат запроса :
Q: SELECT Смещение
a,b,c FROM
WHERE
P задачи.
X своеTдля
каждой
Map 1
Sqoop
X=0
Пример, пусть Cnt 100 Каждая
и
map() должна выбрать
X=33
используются
3 Map
Map 2
Map
3 задачи
свое (непересекающееся)
Для Map 1 Sqoop
Sqoop
подмножество записей
X=66
Для Map 2
Для Map 3
L=33
L=33
L=34
RDBMS
Эффективность
T будет Cnt
плохая, поскольку таблица
T читается 4 раза!
Шаг
(1): Sqoop
выполняет
В общем
случае,
с M Map
SELECTтаблица
count(*)
задачами,
T
FROM бы
T WHERE
P
читалась
M + 1 раз!!!!!!
для получения Cnt,
числа записей в T
Шаг (2): Sqoop генерирует отдельный
запрос Q’ для каждой Map задачи:
SELECT a,b,c
FROM T WHERE P
ORDER BY a,b,c
Limit L, Offset X
Шаг (3): Каждая из задач выполняет свой
запрос
61
Неструктурированные
данные (Hadoop)
Структурированные
данные (Рел.ДБ)
Администратор Данных Предприятия


Пересылка данных – это прошлый век!
Почему бы не создать систему управления данными
которая:



Может выполнять запросы, используя данные из обоих миров
без необходимости их перемещения из одного в другой
Имеет выразительную возможность языков типа HiveQL
Назовем такую систему Администратор Данных
Предприятия АДП (EDM – Enterprise Data Manager).
62


Первая попытка создать
«Администратор Данных Предприятия»
Подобно Hive




Использует HDFS для «неструктурированных» данных
Использует среду MR для обработки запросов для
обеспечения масштабируемости и отказо-устойчивости
Поддерживает язык запросов типа HiveQL
В отличие от Hive


Имеет реляционную БД на каждом узле
Использует новый подход разделения выполнения
запроса между областями структурированных и
неструктурированных данных (прозрачно с точки зрения
пользователя)
63
Работа
SQL
MapReduce Запрос


Синтаксический
анализатор
Каталоги

Оптимизатор
запросов
Администратор MR


Таблицы РБД разделяются между
узлами путем хеширования
«Неструктурированные» данные
хранятся в HDFS
SQL запросы компилируются в
последовательность работ
MapReduce
Используется подход разделения
выполнения запроса, при этом РБД
используется как можно больше
Рассмотрим соединениетаблиц A и B
MapReduce
MapReduce
MapReduce
MapReduce
MapReduce
HDFS RDBMS
MapReduce
HDFS RDBMS
HDFS RDBMS
HDFS RDBMS
HDFS RDBMS
HDFS
РБД
64
Добавить
Без
необходимости
загрузки
Лучшая
масштабируемость
Неструктур.
данные
Отказоустойчивость
Пытающиеся достичь
сравнительной производительности
SQL Server PDW
значительно проще
Системы, основанные на Hadoop
Параллельные РБД
Вычислительная
модель
Понятие транзакции
Транзакция – единица
исполнения
ACID обеспечивается для
параллельных транзакций
-
Понятие работы
Работа – единица исполнения
Управление параллельным
исполнением отсутствует
Структурированные данные с
известной схемой
Режимы Чтение/Запись
-
Любые данные
(не-)(полу-)структурированные
Режим ТолькоЧтение
-
Покупается для специального
применения, дороже обычного
-
«Собирается» пользователем из
дешевых компьютеров
«широкого потребления»
-
Отказы предполагаются
редкими
Отказо-устойчивость для
отдельных запросов
отсутствует
-
Отказы предполагаются
довольно частыми
Простая, но эффективная
отказо-устойчивость на уровне
запросов
Эффективность, оптимизация,
возможность настройки
-
-
Модель данных
Конфигурация
оборудования
Отказоустойчивость
Ключевые
характеристики
Hadoop
-
-
-
-
Масштабируемость, гибкость,
отказо-устойчивость
Реляционные БД или Hadoop? (каково будущее?)
Реляционные БД и Hadoop
созданы для различных целей/задач
Только РБД или только Hadoop не будет основным
средством для обработки больших данных
67
Download