67
По материалам лекции проф. David J. DeWitt на ежегодном собрании пользователей SQL Server Что такое “Большие Данные” (Big Data) и как их обрабатывать?

По материалам лекции проф . David J. DeWitt на ежегодном собрании пользователей SQL Server

Embed Size (px)

DESCRIPTION

По материалам лекции проф . David J. DeWitt на ежегодном собрании пользователей SQL Server. Что такое “ Большие Данные ” (Big Data ) и как их обрабатывать ?. Что означает термин “ Большие Данные ”?. Собрание огромного количества записей – десятки и сотни PBs. ?. - PowerPoint PPT Presentation

Citation preview

Page 1: По материалам лекции проф . David J. DeWitt на ежегодном собрании пользователей  SQL Server

По материалам лекции проф. David J. DeWitt

на ежегодном собрании пользователей SQL Server

Что такое “Большие Данные”(Big Data) и как их обрабатывать?

Page 2: По материалам лекции проф . David J. DeWitt на ежегодном собрании пользователей  SQL Server

Обычно размещаются на больших кластерах , построенных на дешевых процессорах.Facebook (в 2009 г.) имел кластер из 2700 узлов с объемом дисковой памяти 60PB ( 100PB в 2012)!!

Что означает термин “Большие Данные”?

2

?Собрание огромного количества записей – десятки и сотни PBs

Для кого-то это использование т.н.NoSQL систем или параллельных

реляционных БД

Page 3: По материалам лекции проф . David J. DeWitt на ежегодном собрании пользователей  SQL Server

Man

ufac

turin

g

Gover

nmen

t

Comm

unica

tions

Bankin

g

Health

care

Retail

Educa

tion

Trans

porta

tion

0

100

200

300

400

500

600

700

800

900

1000966

848

715

619

434364

269227

Amount of Stored Data By Sector(in Petabytes, 2009)

1 zettabyte? = 1 million petabytes= 1 billion terabytes = 1 trillion gigabytes

Немного статистики

3

Sources:"Big Data: The Next Frontier for Innovation, Competition and Productivity."US Bureau of Labor Statistics | McKinsley Global Institute Analysis

Pe

tab

yte

s

Марс

Земля

35ZB = достаточно данных, чтобы образовать стопку CD

дисков (0.8GB каждый) высотой с половину пути от Земли до Марса,

или 70 стопок от Земли до Луны

Если любите аналогии…

Page 4: По материалам лекции проф . David J. DeWitt на ежегодном собрании пользователей  SQL Server

4

Почему внезапный взрыв интереса? Значительно возросшее количество и разнообразие

источников, вырабатывающих огромный объем данных

Аналогово-цифровые датчики(координатные, звуковые, …) Web 2.0 текст (твиттер, википедия, … ) Web клик-поток

Понимание, что некоторые данные “слишком ценны”, чтобы удалять их, либо само удаление слишком дорого.

Существенное снижение стоимости оборудования, особенно – дисковой памяти

Если бы цена была $500/GB (в 1994 г.), не было бы революции Больших Данных” (в 2014 г. $0.05/GB)

Page 5: По материалам лекции проф . David J. DeWitt на ежегодном собрании пользователей  SQL Server

Как работать с “Большими Данными”?

5

Использовать NoSQLFacebook - 20PB на 2700 узлах

Bing – 150PB на 40000 узлах

Ebay – 5PB на 532 узлах

Использоватьпараллельную

(реляционную) БДeBay – 10PB на 256 узлах

Page 6: По материалам лекции проф . David J. DeWitt на ежегодном собрании пользователей  SQL Server

6

Что означает NoSQL? Не то, что SQL не должен использоваться для

обработки “Больших данных”.

Не то, что SQL и реляционные БД устарели и отмирают.

Не только SQL. Для определенного круга задач другие подходы к хранению и обработке информации могут быть более эффективными, особенно с точки зрения легкости расширения (масштабируемости) информационной базы при постоянном добавлении новых данных.

Не путать с NewSQL – новый подход к построению реляционных БД для приложений, ориентированных на обработку большого количества транзакций, сочетающий удобства SQL с масштабируемостью NoSQL систем.

Page 7: По материалам лекции проф . David J. DeWitt на ежегодном собрании пользователей  SQL Server

7

Почему NoSQL? Более гибкая модель данных.

Не требуется заранее схема. Может использоваться популярный JSON (JavaScript Object

Notation) формат для описания данных.

Ослабление требования целостности/согласованности данных на условие конечной (возможной в будущем) согласованности.

Готовность поступиться целостностью ради доступности.

Дешевое/бесплатное ПО.

Не надо знать языки кроме стандартных Java/C/C++ (предположительно :-) ) освоенных в школе/университете.

Более быстрый доступ к данным.

Page 8: По материалам лекции проф . David J. DeWitt на ежегодном собрании пользователей  SQL Server

Более быстрый доступ к данным

SQL:

8

NoSQL:

Не требуется очистка!Не требуется преобразование!Не требуется загрузка!Анализ там где данные оказались!

СУБД

Данныепоступают

Разработкасхемы БД

Очисткаданных

Преобразованиеданных

Загрузкаданных

SQLзапросы

1

2

3 4 5

6

Иногда называют “Сначала модель”

Иногда называют “Модель позже”

Данныепоступают

Приложение

1 2

NoSQLсистема

Page 9: По материалам лекции проф . David J. DeWitt на ежегодном собрании пользователей  SQL Server

Два основных типа NоSQL систем

Хранилище “ключ(и): значение” Примеры: MongoDB, CouchBase, HBase, Cassandra, Windows

Azure, … Гибкая модель данных типа JSON Записи распределены между узлами кластера путем хеширования

значения ключа (sharding) Поиск/извлечение/обновление отдельной записи по ключу

Hadoop Программная среда для создания (автоматически)

масштабируемых и отказо-устойчивых систем сбора, хранения и обработки больших объемов данных.

Модель данных обычно отсутствует Записи хранятся в распределенной файловой системе.

9

Походе на систему обраб. транзакций без SQL

Похоже на “склад данных” (data warehouse) без SQL

Page 10: По материалам лекции проф . David J. DeWitt на ежегодном собрании пользователей  SQL Server

Два мира – новая реальность

Структурированный Не структурированный&

Реляционные СУБДСтруктурированные данные с (заранее) известной схемой

ACID (АСИН)Транзакции

Использование SQL в качестве языкаМодель жесткой согласованости

ETL(извлечение,преобразование,загрузка)Дольше до получения какого-то

результатаЗрелость, стабильность, эффективность

NoSQL Системы(Не-)(полу-)структурированные

данные, схема (заранее) не известнаACID не гарантируется

Транзакции не поддерживаютсяSQL не используется

Возможная согласованностьETL не требуется

Конкретный результат м.б. быстрееГибкость 10

Page 11: По материалам лекции проф . David J. DeWitt на ежегодном собрании пользователей  SQL Server

Что нас ожидает?

Мир действительно изменился Реляционные СУБД больше не являются основным и

подавляющим инструментом хранения и обработки данных

Новые подходы должны приниматься как новая реальность, требуется понимание как наилучшим образом использовать новые технологии, такие как Hadoop

Реляционные СУБД продолжат доминировать в системах обработки транзакций и в небольщих до средних размеров “хранилищ данных”

Много пользователей будут вынуждены иметь дело с обоими мирами

11

Page 12: По материалам лекции проф . David J. DeWitt на ежегодном собрании пользователей  SQL Server

Требования: Масштабируемость до PB и тысяч

узлов Высокий уровень отказоустойчивости (Относительная) простота

программирования

Все началось в Google

12

Огромный объем данных из клик-потоков, которые необходимо сохранять и анализировать

2006

Hadoop

GFS + MapReduceРаспределенная иотказо-устойчивая

“новая” парадигма программирования

Сохранение Обработка

2003

MR/GFS

Две ключевых части:

Hadoop = HDFS + MapReduce

Сохранение Обработка

Page 13: По материалам лекции проф . David J. DeWitt на ежегодном собрании пользователей  SQL Server

Возможность использования для «Хранилищ

Данных»

Масштабируемость и высокий уровень

отказо-устойчивости

Hadoop и MapReduce

предоставляют:

Возможность быстро анализировать

большие множества записей без

необходимости начального

построения модели, очистки и загрузки

данных

Низкая начальная стоимость

оборудования и программного обеспечения

Что позволяет Hadoop?

Простая парадигма программирования

для написания и выполнения программ

(автоматически) масштабируемых до

тысяч узлов и PB данных

Page 14: По материалам лекции проф . David J. DeWitt на ежегодном собрании пользователей  SQL Server

Среда разработки Hadoop HDFS – распределенная, отказо-устойчивая файловая система MapReduce – набор средств для разработки/выполнения

распределенных отказо-устойчивых приложений Hive & Pig – языки разработки приложений(с элементами SQL) Sqoop – пакет программ для передачи данных между HDFS и

реляционной БД А также другие…

14

HDFS

Map/Reduce

Hive & Pig

Sqoop

HBase

Средствазагрузки

Отчеты Рел.БД

Page 15: По материалам лекции проф . David J. DeWitt на ежегодном собрании пользователей  SQL Server

15

Основные пункты

HDFS

Map/Reduce

Hive & Pig

Sqoop

1

2

34

РеляционнаяБД

5

Page 16: По материалам лекции проф . David J. DeWitt на ежегодном собрании пользователей  SQL Server

HDFS – распределенная файловая система (Hadoop Distributed File System)

Основа всей среды разработки Hadoop

Цели HDFS: Масштабируемость до тысяч узлов Предположение, что отказы

(оборудования и ПО) возникают достаточно часто

Предназначена для хранения небольшого количества очень больших файлов

Файл записывается один раз, а читается многократно

Традиционная иерархическая организация файлов и оглавлений

Высокая степень переносимости между разными платформами

16

HDFS

Map/Reduce

Hive & Pig

Sqoop

Page 17: По материалам лекции проф . David J. DeWitt на ежегодном собрании пользователей  SQL Server

Разделение файла на блоки

17

Большой файл11001010100111001010100111001010100111001010100111001100101010011100101010011100101010011100101010011100101010011100101010011100101010011100101010011100101010011100110010101001110010101001110010101001110010101001110010101001110010101001110010101001110010101001110010101001110011001010100111001010100111001010100111001010100111001010100111001010100111001010100111001010100111001010100111001100101010011100101010011100101010011100101010011100101010011100101010011100101010011100101010011100101010011100110010101001110010101001110010101001110010101001110010101001110010101001110010101001110010101001110010101001110011001010100111001010100111001010100111001010100111001010100111001010100111001010100111001010100111001010100111001100101010011100101010011100101010011100101010011100101010011100101010011100101010011100101010011100101010011100110010101001110010101001110010101001110010101001110010101001

6440MB

Block 1

Block 2

Block 3

Block 4

Block 5

Block 6

Block 100

Block 101

64MB 64MB 64MB 64MB 64MB 64MB

64MB 40MB

Пример:

Блок 1

Блок 2

Обозначим блоки разным цветом

Блок 3

Блок 4

Блок 5

Блок6

Блок100

Блок101

т.е. Размер блока = 64MB

Файлы HDFS состоят из множества блоков• Обычный размер блока 64MB • Каждый блок хранится как отдельный

файл в локальной файловой системе (например, NTFS)

Page 18: По материалам лекции проф . David J. DeWitt на ежегодном собрании пользователей  SQL Server

Стратегия размещение по умолчанию: Первая копия записывается на узел, создающий файл (близость записи) Вторая копия записывается на узел в той же стойке

(чтобы минимизировать сетевой трафик между стойками) Третья копия записывается на узел в другой стойке

Узел 5Узел 4Узел 3Узел 2Узел 1

Физическое размещение блоков

18

Блок 1

Блок3

Блок2

Блок1

Блок3

Блок2

Блок3

Блок2

Блок1

Фактор дублирования = 3

Пример:

Цели: равномерная загрузка, быстрый доступ,

отказо-устойчивость

Page 19: По материалам лекции проф . David J. DeWitt на ежегодном собрании пользователей  SQL Server

Типы узлов HDFS кластера Узел [обслуживания] имен (NameNode) – один на кластер

Отвечает за операции над метаданными (данные о данных), избыточность/дублирование данных, местоположение блоков

Резервный узел имен(Backup Node) – резервная копия узла имен

Узлы данных(DataNodes) – один на каждый узел кластера Отвечает за хранение блоков файла Предоставляет данные файла в ответ на запрос приложения

19

Узел имен Мастер

Резервный узел имен (копия)

DataNodeDataNodeDataNodeУзел данных

Робот

Page 20: По материалам лекции проф . David J. DeWitt на ежегодном собрании пользователей  SQL Server

Архитектура HDFS

20

Узел имен Резервный узел имен

Узел данных Узел данных Узел данных Узел данных Узел данных

(проверка состояния, балансирование загрузки, дублирование блоков, и т.д.)

Узлы записывают на свои локальные диски

Page 21: По материалам лекции проф . David J. DeWitt на ежегодном собрании пользователей  SQL Server

Узел данных Узел данных Узел данных Узел данных Узел данных

Помещение файла в HDFS

21

Узел имен РезервныйУзел имен

Большойфайл

110010101001010100101010011001010100101010010101001100101010010101001010100110010101001010100101

HDFSКлиент

{узел 1, узел 2, узел 3}

основываясь на “факторе дублирования” (по умолчанию - 3)

Клиент передает блоки указанным узлам напрямую

{узел 2, узел 4, узел 5}{узел 1, узел 3, узел 5}{узел 2, узел 3, узел 4}

И так далее…

Узел имен указывает клиенту, куда записать каждый блок файла

Page 22: По материалам лекции проф . David J. DeWitt на ежегодном собрании пользователей  SQL Server

Получение файла из HDFS

22

Узел имен Резервныйузел имен

Большой файл

110010101001010100101010011001010100101010010101001100101010010101001010100110010101001010100101

HDFSКлиент Возвращает расположение

блоков файла

Узел данных Узел данных Узел данных Узел данных Узел данных

Поток блоков от узлов ранных

Page 23: По материалам лекции проф . David J. DeWitt на ежегодном собрании пользователей  SQL Server

Типы отказов: Ошибки или полный отказ

дисков Отказы узлов данных Отказы стоек/сетевых

коммутаторов Отказы узла имен Полный отказ дата-центра

Отказы, отказы, отказы

HDFS разрабатывалась, предполагая частые отказы (как оборудования так и ПО)

23

NameNode

DataNode

Page 24: По материалам лекции проф . David J. DeWitt на ежегодном собрании пользователей  SQL Server

Узел данных

Отказо-устойчивость (Узел данных)

24

Узел именРезервныйузел имен

Узел данных Узел данных Узел данных Узел данных

Узел имен обнаруживает отказ узла данныхКаждый блок данных автоматически дублируется на оставшихся узлах удовлетворяя «фактору дублирования»

Узел данныхУзел данных Узел данных

Page 25: По материалам лекции проф . David J. DeWitt на ежегодном собрании пользователей  SQL Server

Отказо-устойчивость (Узел имен)

25

Узел именРезервный узел имен

Узел данных Узел данных Узел данных Узел данных Узел данных

Отказ не катастрофический, так как имеется резервный узел

Восстановление может быть автоматическим или требовать

ручного вмешательства в некоторых случаях

Page 26: По материалам лекции проф . David J. DeWitt на ежегодном собрании пользователей  SQL Server

Автоматическое масштабирование ибалансирование без остановки системы

26

Узел именРезервныйузел имен

Узел данных Узел данных

Узел имен обнаруживает, что новый узел данных добавлен к кластеру

Узел данныхУзел данных Узел данных

Блоки данных равномерноперераспределяются

Узел данных Узел данныхУзел данных

Page 27: По материалам лекции проф . David J. DeWitt на ежегодном собрании пользователей  SQL Server

Высокая степень масштабируемости Тысячи узлов данных и огромные (сотни TB) файлы Большой размер блоков для повышения скорости

последовательного ввода/вывода

Не используются «зеркальные диски» и RAID. Меньшая цена Использвание единого инструмента (тройное дублирование

блоков) для борьбы с различными типами отказов вместо различных механизмов

Недостатки Размещение блоков «прозрачно» для ПО верхнего

уровня Многие возможности оптимизации (с успехом используемые в

параллельных реляционных БД) не применимы Принцип «одна запись – многократное чтение» может

быть слишком ограничительным

Некоторые итоги обсуждения HDFS

27

Почему?

Page 28: По материалам лекции проф . David J. DeWitt на ежегодном собрании пользователей  SQL Server

28

Переходим к MapReduce

HDFS

Map/Reduce

Hive & Pig

Sqoop Relational Databases

5

3

1

4

2

Page 29: По материалам лекции проф . David J. DeWitt на ежегодном собрании пользователей  SQL Server

29

Что такое Hadoop MapReduce (MR)?

Среда программирования (библиотеки и исполняющая система) для анализа данных, хранимых в HDFS

MapReduce задание состоит из двух функций/этапов:

Пользователь только разрабатывает Map и Reduce функции

MR среда «собирает» все вместе и координирует выполнение Map и Reduce функций на кластере, обеспечивая

отказо-устойчивость масштабируемость

map() reduce()разделяй & властвуй

(функция отображения)объединяй & сокращай

(функция агрегирования)

Page 30: По материалам лекции проф . David J. DeWitt на ежегодном собрании пользователей  SQL Server

30

В основном, это… 1. Взять большую задачу и разделить ее на под-задачи

2. Выполнить (одну и ту же) функцию отображения для всех под-задач

3. Соединить результат всех под-задач (функция агрегирования)

Главная идея MapReduce

DoWork() DoWork() DoWork()…

Вывод

MA

PR

ED

UC

E

Page 31: По материалам лекции проф . David J. DeWitt на ежегодном собрании пользователей  SQL Server

Визуальное представление MapReduce

31

<ключA, знач.Ai><ключB, знач.Bi><ключC, знач.Ci>…

<ключA, знач.Aj><ключB, знач.Bj><ключC, знач.Cj>…

<ключA, знач.Ak><ключB, знач.Bk><ключC, знач.Ck>…

<ключA, знач.Al><ключB, знач.Bl><ключC, знач.Cl>…

Получениеи вывод

результата

Reducer

<ключA, список(знач.Ai, знач.Aj, знач.Ak, …)>

Reducer

<ключB, список(знач.Bi, знач.Bj, знач.Bk, …)>

Reducer

<ключC, список(знач.Ci, знач.Cj, знач.Ck, …)>

сорти-ровка

игруп-пиро-вание

поключу

Узел данных

Узел данных

Узел данных

Mapper<ключi, знач.i>

Mapper<ключi, знач.i>

Mapper<ключi, знач.i>

Mapper<ключi, знач.i>

Page 32: По материалам лекции проф . David J. DeWitt на ежегодном собрании пользователей  SQL Server

32

ОперЗадач сохраняет промежуточные результаты

Промежуточные данные сохраняются в локальной файловой системе

УровеньMapReduce

УровеньHDFS

Узел имен Hadoop

hadoop-УзелДанных1

hadoop-УзелДанных2

hadoop-УзелДанных3

hadoop-УзелДанных4

Компоненты MapReduce

ОператорРабот

ОператорЗадач

Оператор Задач

ОператорЗадач

ОператорЗадач

Оператор Работ контролирует и следит за состоянием Операторов Задач

Мастер

Роботы

- Координирование всех MR задач и событий - Управление очередями работ и графиком выполнения - Поддержка и контроль Операторов Задач - Перемещение/возобновление MR задач, если нужно - Использование «контрольных точек» для восстановления после отказа

Выполнение индивидуальных MR задач, назначенных Оператором Работ (в отдельной JVM)

УзелДанных УзелДанных УзелДанных УзелДанных

Узел имен

УровеньMapReduce

УровеньHDFS

Как все это работает с HDFS?

Page 33: По материалам лекции проф . David J. DeWitt на ежегодном собрании пользователей  SQL Server

33

Представление работы

Оператор Работ

ОперЗадач ОперЗадач ОперЗадач ОперЗадач

локальные файловые системы узлов данных

Map функции назначаются Опер.Задач на каждом Узле Данных

Поставляет работы Оператору РаботMR

клиентРаботы ставятсяв очередь

Mapper Mapper Mapper MapperФункции отображения

запускаются на отдельной JVM и

выполняютсяФункции отображения сохраняют

промежуточные результаты

Начинается этап объединения/сокращения

Reducer Reducer Reducer Reducer

Page 34: По материалам лекции проф . David J. DeWitt на ежегодном собрании пользователей  SQL Server

34

Задачи отображения

MapReduce: Map-этап, под-задачи

53705 $65

53705 $30

53705 $15

54235 $75

54235 $22

02115 $15

02115 $15

44313 $10

44313 $25

44313 $55

5 53705 $15

6 44313 $10

5 53705 $65

0 54235 $22

9 02115 $15

6 44313 $25

3 10025 $95

8 44313 $55

2 53705 $30

1 02115 $15

4 54235 $75

7 10025 $60

Mapper

Mapper

4 54235 $75

7 10025 $60

2 53705 $30

1 02115 $15

10025 $60

5 53705 $65

0 54235 $22

5 53705 $15

6 44313 $10

3 10025 $95

8 44313 $55

9 02115 $15

6 44313 $25

10025 $95

Получить сумму продаж по каждому индексуУ

зел

Да

нн

ых

зел

Да

нн

ых

зел

Да

нн

ых

1

Блоки файла продаж в HDFS

GroupBy

GroupBy

(клиент, индекс, объем продаж)

Один сегмент данных

на задачуагрегир.

Page 35: По материалам лекции проф . David J. DeWitt на ежегодном собрании пользователей  SQL Server

Reducer

Reducer

Задачи агрегирования

ReducerФаза агрегирования

53705 $65

54235 $75

54235 $22

10025 $95

44313 $55

10025 $60

Map

per

53705 $30

53705 $15

02115 $15

02115 $15

44313 $10

44313 $25

Map

per

53705 $65

53705 $30

53705 $15

44313 $10

44313 $25

10025 $95

44313 $55

10025 $60

54235 $75

54235 $22

02115 $15

02115 $15

Сорти-ровать

Сорти-ровать

Сорти-ровать

53705 $65

53705 $30

53705 $15

44313 $10

44313 $25

44313 $55

10025 $95

10025 $60

54235 $75

54235 $22

02115 $15

02115 $15

Агреги-ровать

Агреги-ровать

Агреги-ровать

10025 $155

44313 $90

53705 $110

54235 $97

02115 $30

Работа выполнена!

Пер

етас

ов

ани

е

Page 36: По материалам лекции проф . David J. DeWitt на ежегодном собрании пользователей  SQL Server

36

Как насчет более сложных задач?(например, соединение двух файлов по ключу)

Page 37: По материалам лекции проф . David J. DeWitt на ежегодном собрании пользователей  SQL Server

37

Файл A Файл B Различные ключи

HDFS хранит блоки данных (Дублирование не показано)

Mapper M

Mapper 2

Mapper 1

Mapper 3

Задача отображения генерирует множество пар (ключ, запись)

Каждая задача отображения обрабатывает по одному блоку в раз

Reducer 1 Reducer 2 Reducer NЗадачи агрегирования выполняют само соединение

Перетасовка и сортировкаПеретасовка по сети и сортировка

Соединение двух больших файлов

Page 38: По материалам лекции проф . David J. DeWitt на ежегодном собрании пользователей  SQL Server

38

Действительное число задач отображения M обычно выбирается значительно большим, чем число узлов.

Почему? Помогает иметь дело с неравномерность распределения

значений ключей (data skew) и отказами

Пример: Скажем, M = 10,000 и

W = 100 (W - число Map роботов)

Каждый робот выполнит (10,000 / 100) = 100 задач отображения

Если на этапе отображения возникант неравномерность или

отказ, невыполненная задача может быть легко

перераспределена для выполнения на другом роботе

Проблема неравномерности на уровне агрегирования не исчезает Пример: В запросе “получить сумму продаж по каждому

индексу”, некоторые из индексов могут иметь гораздо больше записей для обработки, чем другие

Несколько дополнительных деталей

Page 39: По материалам лекции проф . David J. DeWitt на ежегодном собрании пользователей  SQL Server

Как преодолеваются отказы?

Подобно HDFS, среда разработки MapReduce построена, чтобы обеспечть высокий уровень отказо-устойчивости

Отказ робота (на этапе отображения или агрегирования) Обнаруживается периодическими проверками,

исходящими от Мастера Незавершенные задачи стартуют сначала на другом узле Если узел отказывает после завершения этапа

отображения – вся задачи отображения этого узла переделывается, и все задачи агрегирования уведомляются.

Отказ Мастера Если отказывает Мастер (-процесс), то вся работа

полностью переделывается

39

Page 40: По материалам лекции проф . David J. DeWitt на ежегодном собрании пользователей  SQL Server

MapReduce – за и против Весьма высокая отказо-

устойчивость

Относительно простое программирование распределенных вычислений для типичных функций типа агрегирования

Среда MR позволяет программисту не заботиться об отказах и сбоях

40

Схема/структура данных кодируется в каждом приложении

Недостаток общей схемы данных Делает совместное использование

данных между приложениями весьма затруднительным

Невозможно использование аппарата реляционых БД (таких как индексы, ограничения целостности, представления, …) для эффективной обработки

Нет декларативного языка для описания и доступа к данным типа SQL

Page 41: По материалам лекции проф . David J. DeWitt на ежегодном собрании пользователей  SQL Server

41

Первые языки программирования в «среде Hadoop»

HDFS

Map/Reduce

Hive & Pig

Sqoop Relational Databases

5

1

43

2

Page 42: По материалам лекции проф . David J. DeWitt на ежегодном собрании пользователей  SQL Server

42

Hive и Pig

и использовали разные подходы к использованию декларативных языков для работы с данными (подобно SQL) в дополнение к MapReduce

Facebook разработала язык типа SQL, названный

HIVE

Yahoo разработала более процедурный язык,

названный PIG

Оба подхода используют MapReduce как язык описания/выполнения работ

Запросы/программы на языках Hive и Pig компилируются в последовательность работ MapReduce

Page 43: По материалам лекции проф . David J. DeWitt на ежегодном собрании пользователей  SQL Server

43

Пример

Рассмотрим два файла (множества записей):

Rankings (

pageURL STRING,pageRank INT,avgDuration INT

);

UserVisits (

sourceIP STRING,destURL STRINGvisitDate DATE,adRevenue FLOAT,..

);

Запрос: Найти sourceIP адрес, генерирующий

наибольший доход, вместе со средним рангом посещенных страниц

соединение

Page 44: По материалам лекции проф . David J. DeWitt на ежегодном собрании пользователей  SQL Server

44

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; 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

// 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); // // 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 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());

2

// 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()); // 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);

3

  // // 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); // There does need to be a combine if (base.getCombine()) base.runCombine();  return 0; }}

4

In MapReduce

Даже не пытайтесь это читать!

Запрос требует 3 MapReduce работы,

так как написание программы

соединения в MR – довольно

трудоемкая задача

4 страницы мелким шрифтом!!!

Page 45: По материалам лекции проф . David J. DeWitt на ежегодном собрании пользователей  SQL Server

Только пол-страницы крупным шрифтом!

В HiveQL

SELECT sourceIP, totalRevenue, avgPageRankFROM

SELECT sourceIP, sum(adRevenue) as totalRevenue,avg(pageRank)as avgPageRank

FROM Rankings as R, Uservisits as UVWHERE 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

В Facebook сделали вывод: “… MapReduce был не простым для пользователей … “

“… пользователи тратили несколько часов (или даже дней) для

написания MR программ даже для очень простого анализа”

Из 150000 работ выполняемых ежедневно в Facebook,

только 500 – работы написанные непосредственно в

MapReduce! Остальные- в HiveQL!! Да здравствует SQL!!!

Page 46: По материалам лекции проф . David J. DeWitt на ежегодном собрании пользователей  SQL Server

Цели Hive и HiveQL

46

Запросы надекларативном языке(типа SQL)

Большие объемы данных

(использование Hadoop)

HiveQL = Удобные средства написания запросов(SQL) + MapReduce

HIVE

Отказо-устойчивая система

Page 47: По материалам лекции проф . David J. DeWitt на ежегодном собрании пользователей  SQL Server

47

Таблицы в Hive

Подобно реляционным БД, данные хранятся в таблицах

Типы данных богаче, чем в SQL Простые типы: int, float, string, date Сложные типы: ассоциативные массивы,

списки, структуры

Example:CREATE Table Employees (

Name string,Salary integer,

Children List <Struct <firstName: string, DOB:date>>)

Page 48: По материалам лекции проф . David J. DeWitt на ежегодном собрании пользователей  SQL Server

48

Хранение данных в Hive Как и в параллельных реляционных БД, Hive

таблицы могут храниться в нескольких разделах

Пример:Sales(custID, zipCode, date, amount) partitioned by state

custID zipCode …

201 12345 …

105 12345 …

933 12345 …

Alabama Alaska Wyoming

Sales HDFS оглавление

1 HDFS файл на каждый штат

Create Table Sales( custID INT, zipCode STRING, date DATE, amount FLOAT)Partitioned By (state STRING)

Hive DDL:

custID zipCode …

13 54321 …

67 54321 …

45 74321 …

custID zipCode …

78 99221 …

345 99221 …

821 99221 …

Записи в файле могу не

содержать название штата!Каждый HDFS файл в свою

очередь разделен на большие блоки, которые продублированы и распределены по узлам кластера

Page 49: По материалам лекции проф . David J. DeWitt на ежегодном собрании пользователей  SQL Server

49

HiveQL пример 1:

SELECT zipCode, sum(amount) FROM Sales WHERE getDate()-30 < date < getDate()GROUP BY zipCode

custID zipCode …

201 12345 …

105 12345 …

933 12345 …

Alabama Alaska Wyoming

SalesHDFS оглавление

HDFS файлы

custID zipCode …

13 54321 …

67 54321 …

45 74321 …

custID zipCode …

78 99221 …

345 99221 …

821 99221 …

Sales(custID, zipCode, date, amount) partitioned by state

Запрос 1: За последние 30 дней выдать объем продаж по каждому индексу (zipCode):

Запрос будет быполнен по всем штатам/разделам

Page 50: По материалам лекции проф . David J. DeWitt на ежегодном собрании пользователей  SQL Server

50

HiveQL пример 2:

custID zipCode …

201 12345 …

105 12345 …

933 12345 …

Alabama Alaska Wyoming

SalesHDFS оглавление

HDFS файлы

custID zipCode …

13 54321 …

67 54321 …

45 74321 …

custID zipCode …

78 99221 …

345 99221 …

821 99221 …

Sales(custID, zipCode, date, amount) partitioned by state

SELECT zipCode, sum(amount) FROM Sales WHERE State = ‘Alabama’ and getDate()-30 < date < getDate()GROUP BY zipCode

Запрос 2: За последние 30 дней выдать объем продаж по каждому индексу (zipCode) штата Alabama:

Запрос будет выполнен по всем разделам (одного

узла), содержащим записи штата Alabama

Page 51: По материалам лекции проф . David J. DeWitt на ежегодном собрании пользователей  SQL Server

51

Оптимизация запросов Ограниченная статистика (только размер

файлов) делает практически невозможной оптимизацию запросов на основе стоимости

Используются простые эвристические приемы для выборки перед соединением, раннего исключение столбцов, ...

Результат частичной оптимизации – направленный граф (без циклов) MapReduce работ на языке Java

HiveQL оптимизация и выполнение

Блок оптимизации

Запрос выполняется (контролируется) стандартным MR планировщиком

Отказо-усточивость обеспечивается автоматически

Может пережить отказы узла/диска/сетевого маршрутизатора в середине обработки запроса

Планы выполнения выглядят сложнее поскольку каждый шаг обработки использует в качестве входа отдельный файл HDFS

Эвристическиеприемы

Планы сложные для понимания и анализа

Page 52: По материалам лекции проф . David J. DeWitt на ежегодном собрании пользователей  SQL Server

52

Сравнение эффективности PDW и Hive

Оборудование Кластер из 9 HP узлов, каждый имеет 2 4-х ядерных

процессорв, 16GB памяти, 4 жестких диска для данных

ПО SQL Server PDW (Parallel Data Warehouse)

1 контролирующий узел, 8 рабочих Windows Hadoop Version 0.20.203,

Hive Version 0.7.1 1 узел имен, 8 узлов данных

Windows Server 2008 Тест таблицы из TPC-H (SF 800)

lineitem: 612GB, 4.8B записей orders: 140GB, 1.2B записей

Page 53: По материалам лекции проф . David J. DeWitt на ежегодном собрании пользователей  SQL Server

53

Hive против PDW

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

Query 1 Query 20

200400600800

100012001400

HivePDW

Secs.

Page 54: По материалам лекции проф . David J. DeWitt на ежегодном собрании пользователей  SQL Server

54Hive PDW-U PDW-P0

5001000150020002500300035004000

Series1

Secs.

Hive против PDW

2 случая для PDW :

i) PDW-U: orders partitioned on c_custkey

lineitem partitioned on l_partkeyii) PDW-P: orders partitioned on o_orderkey

lineitem partitioned on l_orderkey

Демонстрирует преимущество параллельных реляционных БД, в которых способ разделение таблиц позволяет минимизировать перемещение данных между узлами кластера (соединяемые разделы находятся на том же узле)

Разделение Hive таблиц по столбцу соединения не дает

никаких выгод, поскольку нет средств контроля, куда HDFS

размещает блоки данных таблиц

Query 3: SELECT max(l_orderkey) FROM orders, lineitem where l_orderkey = o_orderkey

Page 55: По материалам лекции проф . David J. DeWitt на ежегодном собрании пользователей  SQL Server

55

Еще раз тот же пример

Рассмотрим два файла (множества записей):

Rankings (

pageURL STRING,pageRank INT,avgDuration INT

);

UserVisits (

sourceIP STRING,destURL STRINGvisitDate DATE,adRevenue FLOAT,..

);

Запрос: Найти sourceIP адрес, генерирующий

наибольший доход, вместе со средним рангом посещенных страниц

соединение

Page 56: По материалам лекции проф . David J. DeWitt на ежегодном собрании пользователей  SQL Server

56

В Pig LatinUV = 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’;

Page 57: По материалам лекции проф . David J. DeWitt на ежегодном собрании пользователей  SQL Server

57

Интеграция

HDFS

Map/Reduce

Hive & Pig

Sqoop Relational Databases

5

1

2

43

Page 58: По материалам лекции проф . David J. DeWitt на ежегодном собрании пользователей  SQL Server

58

Соединяя два мира

Все больше данных изначально попадает в неструктурированный мир

MapReduce – прекрасное средство для ETL (выбор, очистка, преобразование, загрузка)

Почему?

Как?

Sqoop предоставляет утилиту загрузки, выполняемую из командной строки

Sqoop

(причина 1)

Структурированные данные (рел.БД)

Неструктурированные данные (Hadoop)

Page 59: По материалам лекции проф . David J. DeWitt на ежегодном собрании пользователей  SQL Server

59

Соединяя два мира

Некоторые задачи анализа проще делать в процедурном языке или в языке типа HiveQL с элементами MapReduce, когда необходимо

Почему?

Как? Sqoop предоставляет:

утилиту выгрузки, выполняемую из командной строки Возможность для Map задач “доставать” данные из

реляционной БД, используя SQL

Как мы увидим эффективность этого

невысока

Sqoop

(причина 2)

Структурированные данные (рел.БД)

Неструктурированные данные (Hadoop)

Page 60: По материалам лекции проф . David J. DeWitt на ежегодном собрании пользователей  SQL Server

60

Соединяя два мира

Некоторые приложение требуют данные из обоих мировПочему?

Где? Только в неструктурированном мире т.к. неструктурированные

данные не могут быть загружены в реляционную БД

Как? Использвать утилиту выгрузки и доступ к БД для Map задач

По-прежнему, эффективность этого

невысока

Sqoop

(причина 3)

Структурированные данные (рел.БД)

Неструктурированные данные (Hadoop)

Page 61: По материалам лекции проф . David J. DeWitt на ежегодном собрании пользователей  SQL Server

61

RDBMS

Map 1

Sqoop

Map 2

Sqoop

Map 3

Sqoop

Cnt

Q: SELECT a,b,c FROM T WHERE P

Map задача требует результат запроса :

Шаг (2): Sqoop генерирует отдельный запрос Q’ для каждой Map задачи:

SELECT a,b,c FROM T WHERE PORDER BY a,b,c

Limit L, Offset X

Ограничения Sqoop

Шаг (1): Sqoop выполняет

SELECT count(*) FROM T WHERE P

для получения Cnt,

числа записей в T

Шаг (3): Каждая из задач выполняет свой запрос

Каждая map() должна выбрать свое (непересекающееся) подмножество записей

T

Смещение X свое для каждой задачи.Пример, пусть Cnt 100 и используются 3 Map задачи Для Map 1 Для Map 2 Для Map 3

L=33

L=33

L=34

X=0

X=33

X=66

Эффективность будет плохая, поскольку таблица T читается 4 раза!

В общем случае, с M Map задачами, таблица T читалась бы M + 1 раз!!!!!!

Page 62: По материалам лекции проф . David J. DeWitt на ежегодном собрании пользователей  SQL Server

62

Должен быть лучший способ!

Пересылка данных – это прошлый век! Почему бы не создать систему управления данными

которая: Может выполнять запросы, используя данные из обоих миров без

необходимости их перемещения из одного в другой Имеет выразительную возможность языков типа HiveQL

Назовем такую систему Администратор Данных Предприятия АДП (EDM – Enterprise Data Manager).

Администратор Данных Предприятия

Структурированные данные (Рел.ДБ)

Неструктурированные данные (Hadoop)

Page 63: По материалам лекции проф . David J. DeWitt на ежегодном собрании пользователей  SQL Server

63

HadoopDB/Hadapt (стартап)

Первая попытка создать

«Администратор Данных Предприятия» Подобно Hive

Использует HDFS для «неструктурированных» данных Использует среду MR для обработки запросов для

обеспечения масштабируемости и отказо-устойчивости Поддерживает язык запросов типа HiveQL

В отличие от Hive Имеет реляционную БД на каждом узле Использует новый подход разделения выполнения

запроса между областями структурированных и неструктурированных данных (прозрачно с точки зрения пользователя)

Page 64: По материалам лекции проф . David J. DeWitt на ежегодном собрании пользователей  SQL Server

64

Общее представление архитектуры Hadapt

Таблицы РБД разделяются между узлами путем хеширования

«Неструктурированные» данные хранятся в HDFS

SQL запросы компилируются в последовательность работ MapReduce

Используется подход разделения выполнения запроса, при этом РБД используется как можно больше

Рассмотрим соединениетаблиц A и B

RDBMSHDFS

MapReduce

Работа MapReduce

Администратор MR

Каталоги

Синтаксический анализатор

Оптимизатор запросов

SQL Запрос

RDBMSHDFS

MapReduce

RDBMSHDFS

MapReduce

RDBMSHDFS

MapReduce

RDBMSHDFS

MapReduce

РБДHDFS

MapReduce

Пример 1: Обе таблицы A & B в РБД

Соединение выполняется полностью в РБД

Пример 2: A – в РБД, а B - в HDFS. Если таблица B «небольшая», она загружается в РБД, и соединение выполняется в РБД

Если таблица A «небольшая», а B «большая», соединение выполняется как работа MapReduce

Page 65: По материалам лекции проф . David J. DeWitt на ежегодном собрании пользователей  SQL Server

Без необходимости

загрузки

Неструктур. данные

Лучшая масштабируемость

Отказо-устойчивость

Тезис

SQL Server PDWСистемы, основанные на Hadoop

значительно проще

сравнительной производительности

Добавить

Пытающиеся достичь

Page 66: По материалам лекции проф . David J. DeWitt на ежегодном собрании пользователей  SQL Server

Краткое резюме

Параллельные РБД Hadoop

Вычислительная модель

- Понятие транзакции- Транзакция – единица

исполнения- ACID обеспечивается для

параллельных транзакций

- Понятие работы- Работа – единица исполнения- Управление параллельным

исполнением отсутствует

Модель данных

- Структурированные данные с известной схемой

- Режимы Чтение/Запись

- Любые данные - (не-)(полу-)структурированные- Режим ТолькоЧтение

Конфигурация оборудования

- Покупается для специального применения, дороже обычного

- «Собирается» пользователем из дешевых компьютеров «широкого потребления»

Отказо-устойчивость

- Отказы предполагаются редкими

- Отказо-устойчивость для отдельных запросов отсутствует

- Отказы предполагаются довольно частыми

- Простая, но эффективная отказо-устойчивость на уровне запросов

Ключевые характеристики

- Эффективность, оптимизация, возможность настройки

- Масштабируемость, гибкость, отказо-устойчивость

Page 67: По материалам лекции проф . David J. DeWitt на ежегодном собрании пользователей  SQL Server

67

Итоги рассмотрения

Реляционные БД или Hadoop? (каково будущее?)

Вопрос не корректен!

Реляционные БД и Hadoop

созданы для различных целей/задач

Только РБД или только Hadoop не будет основным средством для обработки больших данных

Решит ли проблемуАдминистратор Данных Предприятия?