Павел Клеменков [email protected]

81
Обзор современных подходов к обработке больших данных и их применение для построения рекомендательных систем Павел Клеменков [email protected] МГУ имени М.В. Ломоносова Объединенная компания «Афиши» и «Рамблера»

Upload: margo

Post on 11-Jan-2016

60 views

Category:

Documents


1 download

DESCRIPTION

МГУ имени М.В. Ломоносова Объединенная компания «Афиши» и «Рамблера». Обзор современных подходов к обработке больших данных и их применение для построения рекомендательных систем. Павел Клеменков [email protected]. Цифровая вселенная. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Павел  Клеменков parser@cs.msu.su

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

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

Павел Клеменков[email protected]

МГУ имени М.В. ЛомоносоваОбъединенная компания «Афиши» и «Рамблера»

Page 2: Павел  Клеменков parser@cs.msu.su

По оценкам IDC размер “цифровой вселенной” в 2006 г. составлял 0.18 зеттабайт

А к 2011 г. должен был достигнуть 1.8 зеттабайт

Продемонстрировав десятикратный рост за 5 лет!

Цифровая вселенная

Page 3: Павел  Клеменков parser@cs.msu.su

Нью-Йоркская фондовая биржа генерирует около терабайта данных в день

Объем хранилищ Facebook каждый день увеличивается на 50 ТБ

Internet Archive уже хранит 2 ПБ данных и прирастает 20 ТБ в месяц

Эксперименты на БАК могут генерировать до 1 ПБ данных в секунду!

Источники данных

Page 4: Павел  Клеменков parser@cs.msu.su

“Большие данные” характеризуются объемом, разнообразием и скоростью, с

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

наряду с преобразованием этих данных в ценную для бизнеса информацию [Gartner]

Что такое “большие данные”?

Page 5: Павел  Клеменков parser@cs.msu.su

Volume (объем)

Variety (разнообразие)

Velocity (скорость)

Value (ценность)

4V

Page 6: Павел  Клеменков parser@cs.msu.su

Упор на дисковое хранение и индексацию Многопоточность, чтобы скрыть задержки Блокировки Журнализация транзакций Немасштабируемы

Архитектура большинства СУБД почти идентична System R (70-е годы):

The End of an Architectural Era

Page 7: Павел  Клеменков parser@cs.msu.su

Вертикальное масштабирование?

Бесконечно мощного сервера нет!Вертикальный рост конечен.

Page 8: Павел  Клеменков parser@cs.msu.su

Оптимизация запросов?Создание индексов?

Дополнительные операции.Деградация под нагрузкой

Page 9: Павел  Клеменков parser@cs.msu.su

Кэш на чтение?

Отказ от строгой консистентности.Усложнение клиентского ПО.

Page 10: Павел  Клеменков parser@cs.msu.su

Очередь операций вставки/обновления?

Размер очереди ограничен.Персистентность очереди.

Page 11: Павел  Клеменков parser@cs.msu.su

Денормализация схемы?

Избыточность данных.Аномалии.

Page 12: Павел  Клеменков parser@cs.msu.su

Горизонтальное масштабирование?

Отказ от нормализации.Отказ от join.Усложнение клиентского ПО.

Page 13: Павел  Клеменков parser@cs.msu.su

Отказ от строгой консистентности Уход от нормализации и внедрение

избыточности Потеря выразительности SQL и

моделирование части функций программно Усложнение клиентского ПО Сложность поддержания

работоспособности и отказоустойчивости

Промежуточные итоги

Page 14: Павел  Клеменков parser@cs.msu.su

NoSQL – это не бездумный отказ от реляционной модели!

“NoSQL” - название реляционной СУБД, не использующей SQL (1998 г.)

Бум NoSQL обусловлен ростом Интернет-индустрии

NoSQL

Page 15: Павел  Клеменков parser@cs.msu.su

Решение для задачи, а не наоборот Неограниченное горизонтальное

масштабирование Свободная схема или ее отсутствие Консистентность в жертву

производительности Простота развертывания и

администрирования Большинство программ императивные

Мантра NoSQL

Page 16: Павел  Клеменков parser@cs.msu.su

NoSQL и CAP

Page 17: Павел  Клеменков parser@cs.msu.su

Классификация NoSQL хранилищ по модели данных

Тип ПримерыХранилища ключ-значение Redis

ScalarisRiakTokyo Tyrant

Документные хранилища SimpleDBCouchDBMongoDB

Колоночные хранилища BigTableHbaseCassandra

Хранилища на графах Neo4j

Page 18: Павел  Клеменков parser@cs.msu.su

Простая модель данных – ассоциативный массив

Доступ к данным только по ключу Информация о структуре занчений не

сохраняется Обычно все данные хранятся в памяти с

возможностью сохранения на диск

Хранилища ключ-значение

Page 19: Павел  Клеменков parser@cs.msu.su

“Документ” – множество пар ключ-значение Документы могут быть вложены и

объединяться в коллекции Отсутствие схемы как в документе, так и в

коллекции Доступ к значениям по ключу или с

помощью языка запросов MapReduce

Документные хранилища

Page 20: Павел  Клеменков parser@cs.msu.su

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

последнее состояние Запись не блокирует чтение

Б-деревья только на добавление

Page 21: Павел  Клеменков parser@cs.msu.su

Таблица – упорядоченный ассоциативный массив строк

Строка – ассоциативный массив семейств колонок

Семейство колонок – ассоциативный массив колонок с зафиксированными ключами

Колонка – кортеж <ключ, значение, временная метка>

Колоночные хранилища

Page 22: Павел  Клеменков parser@cs.msu.su

Колоночные хранилища

Page 23: Павел  Клеменков parser@cs.msu.su

Данные естественным образом представляются графом

Граф – это вершины с аттрибутами и ребра со свойствами

Доступ к вершинам и ребрам по индексам на аттрибутах и свойствах

Вычисления – обход графа по ребрам с заданными свойствами

Хранилища на графах

Page 24: Павел  Клеменков parser@cs.msu.su

Производительность. Вставки

Page 25: Павел  Клеменков parser@cs.msu.su

Производительность. Чтение

Page 26: Павел  Клеменков parser@cs.msu.su

Производительность. Обновления

Page 27: Павел  Клеменков parser@cs.msu.su

Производительность. Чтение

Page 28: Павел  Клеменков parser@cs.msu.su

Средняя производительность HDD ~100МБ/c

Прочесть 1 ТБ ~ 2.5 часа Прочесть 1 ТБ параллельно со 100 дисков

~ 2 минуты Произвольный доступ к диску медленный Последовательный доступ быстрый!

Почему MapReduce?

Page 29: Павел  Клеменков parser@cs.msu.su

MapReduce – модель распределенных вычислений (Google, 2004)

Page 30: Павел  Клеменков parser@cs.msu.su

2002 – поисковый движок Nutch 2003 – GFS (Google) 2004 – Nutch Distributed File System (NDFS) 2004 – MapReduce (Google) 2005 – Nutch MapReduce 2006 – Nutch → Hadoop 2008 – Yahoo! анонсирует Hadoop кластер 2008 – Apache Hadoop

История Hadoop

Page 31: Павел  Клеменков parser@cs.msu.su

Очень большие файлы (ГБ, ТБ, ПБ) Пакетный доступ к данным (пишем один

раз, читаем много) Аппаратные сбои неизбежны (репликация и

лог для метаданных) Локальность вычислений

Дизайн-принципы HDFS

Page 32: Павел  Клеменков parser@cs.msu.su

Чтение файла из HDFS

Page 33: Павел  Клеменков parser@cs.msu.su

Запись файла в HDFS

Page 34: Павел  Клеменков parser@cs.msu.su

Hadoop MapReduce

Page 35: Павел  Клеменков parser@cs.msu.su

Размер Число узлов

Число map

Число reduce

Степень репликации

Время

500 Гб 1406 8000 2600 1 59 сек1 ТБ 1460 8000 2700 1 62 сек100 ТБ 3452 190000 10000 2 173 мин1 ПБ 3658 80000 20000 2 975 мин

Сортировка записей по 100 байт http://sortbenchmark.orgМай 2009, Yahoo!

Производительность Hadoop

Page 36: Павел  Клеменков parser@cs.msu.su

Hive – распределенное хранилище(HDFS, HiveQL)

Pig – среда исполнения и язык программирования вычислений

Hbase – распределенное колоночное хранилище

ZooKeeper – высокодоступный координационный сервис

Экосистема Hadoop

Page 37: Павел  Клеменков parser@cs.msu.su

Функциональный ЯП Создавался Ericsson для управления

коммутационным оборудованием Легковесные процессы взаимодействуют в

соответствии с моделью акторов Порождение 200000 процессов ~ 10 мкс Отказоустойчивость оборудования –

99.9999999% (Ericsson)

О Erlang в двух словах

Page 38: Павел  Клеменков parser@cs.msu.su

Фреймворк MapReduce вычислений на больших данных (Nokia Research Center)

Ключевое свойство - простота: Нет планировщика Облегченный доступ к локальным ресурсам Независимый от ЯП протокол Упрощенная DDFS с децентрализацией

метаданных

Disco

Page 39: Павел  Клеменков parser@cs.msu.su

Подсчет слов в файле (1 Б)

Время (мс)Hadoop 12324PDisco 359ODisco 35

Disco vs Hadoop (задержки)

Page 40: Павел  Клеменков parser@cs.msu.su

Подсчет слов в английской Википедии

Disco vs Hadoop (производительность)

Page 41: Павел  Клеменков parser@cs.msu.su

DDFS vs HDFS (чтение)

Page 42: Павел  Клеменков parser@cs.msu.su

DDFS vs HDFS (запись)

Page 43: Павел  Клеменков parser@cs.msu.su

Анализ данных в реальном времени Высокочастотная торговля Поисковые системы реального времени Социальные сети Персонализация контента ...

В поисках “Hadoop реального времени”

Page 44: Павел  Клеменков parser@cs.msu.su

Предоставить простой интерфейс поточной обработки данных

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

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

Создать децентрализованное, симметричное решение без единой точки отказа

Yahoo! S4

Page 45: Павел  Клеменков parser@cs.msu.su

Вычисление – граф Вершины – вычислительные элементы (PE) Ребра – потоки событий PE – это актор с изолированным

состоянием

Yahoo! S4

Page 46: Павел  Клеменков parser@cs.msu.su

Событие – кортеж именованных значений События группируются по именам значений

в кортеже Группировка важна, потому что состояние

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

опубликовать результат

События

Page 47: Павел  Клеменков parser@cs.msu.su

Событий/c Ошибка Скорость передачи (Мб/c)

2000 0.0% 2.63644 0.0% 4.97268 0.2% 9.710480 0.4% 14.012432 0.7% 16.614900 1.5% 19.916000 1.7% 21.420000 4.2% 26.7

Кластер из 8 узлов (4 процессора, 16 ГБ)

Производительность S4

Page 48: Павел  Клеменков parser@cs.msu.su

Storm (Twitter) – распределенная система вычислений в реальном времени

Первый публичный релиз через год после S4

Устраняет недостатки S4

Storm

Page 49: Павел  Клеменков parser@cs.msu.su

Два варианта использования: обработка потоков событий распределенный RPC

Прозрачное горизонтальное масштабирование

Гарантия обработки сообщений Отказоустойчивость, перераспределение

вычислений Независимость от ЯП

Особенности Storm

Page 50: Павел  Клеменков parser@cs.msu.su

Вычисление – топология (граф) Ребра – маршруты передачи данных Вершины:

трубы (spout) – генерируют данные молнии (bolt) – производят вычисления

Модель вычислений

Page 51: Павел  Клеменков parser@cs.msu.su

Событие – кортеж (как в S4) Кортеж полность обработан, если обработан

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

помощью транзакций

Page 52: Павел  Клеменков parser@cs.msu.su

Задача рекомендательной системы – дать человеку направление до наиболее

интересных и полезных для него объектов в пространстве возможных вариантов

Рекомендательная система – программа, задачей которой является предсказать оценку,

которую пользователь поставит объекту, с которым он еще не встречался, на основании характеристик этого объекта и/или профиля

пользователя

Рекомендательные системы

Page 53: Павел  Клеменков parser@cs.msu.su

Классификация: Логистическая регрессия Байесовские классификаторы Случайный лес

Кластеризация K-Means Иерархическая кластеризация MinHash

Apache Mahout

Page 54: Павел  Клеменков parser@cs.msu.su

Понижение размерности: SVD PCA

Рекомендательные алгоритмы: Фильтрация по схожести пользователей Фильтрация по схожести объектов Slope One

И многие другие...

Apache Mahout

Page 55: Павел  Клеменков parser@cs.msu.su

sim (a ,b)=∑p∈P

(r a , p−r̄ a)(rb , p− r̄b)

√∑p∈P

(r a , p−r̄ a)2√∑

p∈P(rb , p−r̄ b)

2

pred (a , b)= r̄a+∑b∈N

sim (a , b)∗(r b , p− r̄ b)

∑b∈N

sim (a , b)

Фильтрация по схожести пользователей

Page 56: Павел  Клеменков parser@cs.msu.su

DataModel model = new FileDataModel(new File(“data.txt”));

UserSimilarity sim = new PearsonCorrelationSimilarity(model);

UserNeighborhood neighbor =new NearestNUserNeighborhood(3, sim,

model);

Recommender recommender = new

GenericUserBasedRecommender(model,neighbor, sim);

List<RecommendedItem> recommendations = recommender.recommend(1234, 10);

Фильтрация по схожести пользователей

Page 57: Павел  Клеменков parser@cs.msu.su

Сложность O(MN) На практике – O(M+N), т.к. векторы очень

разрежены Слишком медленный для Веба Предварительное вычисление матрицы

схожести сильно влияет на качество

Фильтрация по схожести пользователей

Page 58: Павел  Клеменков parser@cs.msu.su

sim (a , b)=∑u∈U

(r u ,a−r̄ u)(ru , b−r̄ u)

√∑u∈U

(r u , a−r̄ u)2√∑

u∈U(r u ,b−r̄ u)

2

pred (u , p)=∑

i∈ratedItems (u)sim (i , p)∗ru ,i

∑i∈ratedItems (a )

sim (i , p)

Фильтрация по схожести объектов

Page 59: Павел  Клеменков parser@cs.msu.su

DataModel model = new FileDataModel(new

File(“data.txt”));

ItemSimilarity sim = new

PearsonCorrelationSimilarity(model);

Recommender recommender = new GenericItemBasedRecommender(model,

sim);

List<RecommendedItem> recommendations = recommender.recommend(1234, 10);

Фильтрация по схожести объектов

Page 60: Павел  Клеменков parser@cs.msu.su

Сложность O(N2M) На практике O(NM), т.к. у большинства

пользователей мало оценок Более устойчив к предварительному

вычислению матрицы схожести Применяется Amazon (2003 г.)

Фильтрация по схожести объектов

Page 61: Павел  Клеменков parser@cs.msu.su
Page 62: Павел  Клеменков parser@cs.msu.su
Page 63: Павел  Клеменков parser@cs.msu.su

J=∣A∩B∣∣A∪B∣

Мера Жаккарда

Page 64: Павел  Клеменков parser@cs.msu.su

J=∣A∩B∣∣A∪B∣

Ο(min(∣A∣,∣B∣))

Ο(∣A∣+∣B∣)

Мера Жаккарда

Page 65: Павел  Клеменков parser@cs.msu.su

A={url1 , url2 ,… , urlk }

h : A → ℕ

hmin ( A )=min x∈ A (h ( x ))

J ( A , B )=P [hmin ( A )=hmin (B )]

MinHash

Page 66: Павел  Клеменков parser@cs.msu.su

Сигнатура множества вычисляется один раз

Размер сигнатуры не меняется

Одна хеш-функция имеет высокую

дисперсию, поэтому нужно использовать

среднее нескольких хеш-функций

Особенности MinHash

Page 67: Павел  Клеменков parser@cs.msu.su

Фильтрация логов во

временном окне

MAP

Кластеризация

Page 68: Павел  Клеменков parser@cs.msu.su

Фильтрация логов во

временном окне

Множество уникальных

URL

MAP

REDUCE

Кластеризация

Page 69: Павел  Клеменков parser@cs.msu.su

Фильтрация логов во

временном окне

Множество уникальных

URL

Подсчет значений

хеш-функций

MAP

REDUCE

Кластеризация

Page 70: Павел  Клеменков parser@cs.msu.su

Фильтрация логов во

временном окне

Множество уникальных

URL

Подсчет значений

хеш-функций

Вычисление минимума

MAP

REDUCE

Кластеризация

Page 71: Павел  Клеменков parser@cs.msu.su

Фильтрация логов во

временном окне

Множество уникальных

URL

Подсчет значений

хеш-функций

Вычисление минимума

Группировка минимумов (кластеры)

MAP

REDUCE

Кластеризация

Page 72: Павел  Клеменков parser@cs.msu.su

Фильтрация логов во

временном окне

Множество уникальных

URL

Подсчет значений

хеш-функций

Вычисление минимума

Группировка минимумов (кластеры)

Отсечение небольших кластеров

MAP

REDUCE

Кластеризация

Page 73: Павел  Клеменков parser@cs.msu.su

Фильтрация логов во

временном окне

MAP

Рекомендации

Page 74: Павел  Клеменков parser@cs.msu.su

Фильтрация логов во

временном окне

Множество уникальных

URL

MAP

REDUCE

Рекомендации

Page 75: Павел  Клеменков parser@cs.msu.su

Фильтрация логов во

временном окне

Множество уникальных

URL

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

MAP

REDUCE

Рекомендации

Page 76: Павел  Клеменков parser@cs.msu.su

Фильтрация логов во

временном окне

Множество уникальных

URL

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

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

MAP

REDUCE

Рекомендации

Page 77: Павел  Клеменков parser@cs.msu.su

Фильтрация логов во

временном окне

Множество уникальных

URL

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

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

Группировка новостей

MAP

REDUCE

Рекомендации

Page 78: Павел  Клеменков parser@cs.msu.su

Фильтрация логов во

временном окне

Множество уникальных

URL

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

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

Группировка новостей

Отсечение непопулярны

х новостей

MAP

REDUCE

Рекомендации

Page 79: Павел  Клеменков parser@cs.msu.su

Hadoop кластер из 8 узлов

Временное окно кластеризации – 5 суток (8

ГБ логов)

Время кластеризации – 7 минут

Временное окно рекомендаций – 5 часов

Время генерации рекомендаций – 3.5-4

минуты

Производительность

Page 80: Павел  Клеменков parser@cs.msu.su

Кузнецов Сергей Дмитриевич Добров Борис Викторович Когаловский Михаил Рувимович Калиниченко Леонид Андреевич

Благодарности

Page 81: Павел  Клеменков parser@cs.msu.su

Вопросы?