Павел Клеменков [email protected]
DESCRIPTION
МГУ имени М.В. Ломоносова Объединенная компания «Афиши» и «Рамблера». Обзор современных подходов к обработке больших данных и их применение для построения рекомендательных систем. Павел Клеменков [email protected]. Цифровая вселенная. - PowerPoint PPT PresentationTRANSCRIPT
Обзор современных подходов к обработке больших данных
и их применение для построения рекомендательных систем
Павел Клеменков[email protected]
МГУ имени М.В. ЛомоносоваОбъединенная компания «Афиши» и «Рамблера»
По оценкам IDC размер “цифровой вселенной” в 2006 г. составлял 0.18 зеттабайт
А к 2011 г. должен был достигнуть 1.8 зеттабайт
Продемонстрировав десятикратный рост за 5 лет!
Цифровая вселенная
Нью-Йоркская фондовая биржа генерирует около терабайта данных в день
Объем хранилищ Facebook каждый день увеличивается на 50 ТБ
Internet Archive уже хранит 2 ПБ данных и прирастает 20 ТБ в месяц
Эксперименты на БАК могут генерировать до 1 ПБ данных в секунду!
Источники данных
“Большие данные” характеризуются объемом, разнообразием и скоростью, с
которой структурированные и неструкутрированные данные поступают по сетям передачи в процессоры и хранилища,
наряду с преобразованием этих данных в ценную для бизнеса информацию [Gartner]
Что такое “большие данные”?
Volume (объем)
Variety (разнообразие)
Velocity (скорость)
Value (ценность)
4V
Упор на дисковое хранение и индексацию Многопоточность, чтобы скрыть задержки Блокировки Журнализация транзакций Немасштабируемы
Архитектура большинства СУБД почти идентична System R (70-е годы):
The End of an Architectural Era
Вертикальное масштабирование?
Бесконечно мощного сервера нет!Вертикальный рост конечен.
Оптимизация запросов?Создание индексов?
Дополнительные операции.Деградация под нагрузкой
Кэш на чтение?
Отказ от строгой консистентности.Усложнение клиентского ПО.
Очередь операций вставки/обновления?
Размер очереди ограничен.Персистентность очереди.
Денормализация схемы?
Избыточность данных.Аномалии.
Горизонтальное масштабирование?
Отказ от нормализации.Отказ от join.Усложнение клиентского ПО.
Отказ от строгой консистентности Уход от нормализации и внедрение
избыточности Потеря выразительности SQL и
моделирование части функций программно Усложнение клиентского ПО Сложность поддержания
работоспособности и отказоустойчивости
Промежуточные итоги
NoSQL – это не бездумный отказ от реляционной модели!
“NoSQL” - название реляционной СУБД, не использующей SQL (1998 г.)
Бум NoSQL обусловлен ростом Интернет-индустрии
NoSQL
Решение для задачи, а не наоборот Неограниченное горизонтальное
масштабирование Свободная схема или ее отсутствие Консистентность в жертву
производительности Простота развертывания и
администрирования Большинство программ императивные
Мантра NoSQL
NoSQL и CAP
Классификация NoSQL хранилищ по модели данных
Тип ПримерыХранилища ключ-значение Redis
ScalarisRiakTokyo Tyrant
Документные хранилища SimpleDBCouchDBMongoDB
Колоночные хранилища BigTableHbaseCassandra
Хранилища на графах Neo4j
Простая модель данных – ассоциативный массив
Доступ к данным только по ключу Информация о структуре занчений не
сохраняется Обычно все данные хранятся в памяти с
возможностью сохранения на диск
Хранилища ключ-значение
“Документ” – множество пар ключ-значение Документы могут быть вложены и
объединяться в коллекции Отсутствие схемы как в документе, так и в
коллекции Доступ к значениям по ключу или с
помощью языка запросов MapReduce
Документные хранилища
Все изменения пишутся в конец файла При ошибках всегда можно восстановить
последнее состояние Запись не блокирует чтение
Б-деревья только на добавление
Таблица – упорядоченный ассоциативный массив строк
Строка – ассоциативный массив семейств колонок
Семейство колонок – ассоциативный массив колонок с зафиксированными ключами
Колонка – кортеж <ключ, значение, временная метка>
Колоночные хранилища
Колоночные хранилища
Данные естественным образом представляются графом
Граф – это вершины с аттрибутами и ребра со свойствами
Доступ к вершинам и ребрам по индексам на аттрибутах и свойствах
Вычисления – обход графа по ребрам с заданными свойствами
Хранилища на графах
Производительность. Вставки
Производительность. Чтение
Производительность. Обновления
Производительность. Чтение
Средняя производительность HDD ~100МБ/c
Прочесть 1 ТБ ~ 2.5 часа Прочесть 1 ТБ параллельно со 100 дисков
~ 2 минуты Произвольный доступ к диску медленный Последовательный доступ быстрый!
Почему MapReduce?
MapReduce – модель распределенных вычислений (Google, 2004)
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
Очень большие файлы (ГБ, ТБ, ПБ) Пакетный доступ к данным (пишем один
раз, читаем много) Аппаратные сбои неизбежны (репликация и
лог для метаданных) Локальность вычислений
Дизайн-принципы HDFS
Чтение файла из HDFS
Запись файла в HDFS
Hadoop MapReduce
Размер Число узлов
Число 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
Hive – распределенное хранилище(HDFS, HiveQL)
Pig – среда исполнения и язык программирования вычислений
Hbase – распределенное колоночное хранилище
ZooKeeper – высокодоступный координационный сервис
Экосистема Hadoop
Функциональный ЯП Создавался Ericsson для управления
коммутационным оборудованием Легковесные процессы взаимодействуют в
соответствии с моделью акторов Порождение 200000 процессов ~ 10 мкс Отказоустойчивость оборудования –
99.9999999% (Ericsson)
О Erlang в двух словах
Фреймворк MapReduce вычислений на больших данных (Nokia Research Center)
Ключевое свойство - простота: Нет планировщика Облегченный доступ к локальным ресурсам Независимый от ЯП протокол Упрощенная DDFS с децентрализацией
метаданных
Disco
Подсчет слов в файле (1 Б)
Время (мс)Hadoop 12324PDisco 359ODisco 35
Disco vs Hadoop (задержки)
Подсчет слов в английской Википедии
Disco vs Hadoop (производительность)
DDFS vs HDFS (чтение)
DDFS vs HDFS (запись)
Анализ данных в реальном времени Высокочастотная торговля Поисковые системы реального времени Социальные сети Персонализация контента ...
В поисках “Hadoop реального времени”
Предоставить простой интерфейс поточной обработки данных
Обеспечить горизонтальное масштабирование и высокую доступность кластера
Минимизировать задержки, используя только оперативную память узлов
Создать децентрализованное, симметричное решение без единой точки отказа
Yahoo! S4
Вычисление – граф Вершины – вычислительные элементы (PE) Ребра – потоки событий PE – это актор с изолированным
состоянием
Yahoo! S4
Событие – кортеж именованных значений События группируются по именам значений
в кортеже Группировка важна, потому что состояние
хранится в памяти узла и изолировано PE может или создать новый поток, или
опубликовать результат
События
Событий/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
Storm (Twitter) – распределенная система вычислений в реальном времени
Первый публичный релиз через год после S4
Устраняет недостатки S4
Storm
Два варианта использования: обработка потоков событий распределенный RPC
Прозрачное горизонтальное масштабирование
Гарантия обработки сообщений Отказоустойчивость, перераспределение
вычислений Независимость от ЯП
Особенности Storm
Вычисление – топология (граф) Ребра – маршруты передачи данных Вершины:
трубы (spout) – генерируют данные молнии (bolt) – производят вычисления
Модель вычислений
Событие – кортеж (как в S4) Кортеж полность обработан, если обработан
каждый кортеж дерева Избежать повторных вычислений можно с
помощью транзакций
Задача рекомендательной системы – дать человеку направление до наиболее
интересных и полезных для него объектов в пространстве возможных вариантов
Рекомендательная система – программа, задачей которой является предсказать оценку,
которую пользователь поставит объекту, с которым он еще не встречался, на основании характеристик этого объекта и/или профиля
пользователя
Рекомендательные системы
Классификация: Логистическая регрессия Байесовские классификаторы Случайный лес
Кластеризация K-Means Иерархическая кластеризация MinHash
Apache Mahout
Понижение размерности: SVD PCA
Рекомендательные алгоритмы: Фильтрация по схожести пользователей Фильтрация по схожести объектов Slope One
И многие другие...
Apache Mahout
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)
Фильтрация по схожести пользователей
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);
Фильтрация по схожести пользователей
Сложность O(MN) На практике – O(M+N), т.к. векторы очень
разрежены Слишком медленный для Веба Предварительное вычисление матрицы
схожести сильно влияет на качество
Фильтрация по схожести пользователей
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)
Фильтрация по схожести объектов
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);
Фильтрация по схожести объектов
Сложность O(N2M) На практике O(NM), т.к. у большинства
пользователей мало оценок Более устойчив к предварительному
вычислению матрицы схожести Применяется Amazon (2003 г.)
Фильтрация по схожести объектов
J=∣A∩B∣∣A∪B∣
Мера Жаккарда
J=∣A∩B∣∣A∪B∣
Ο(min(∣A∣,∣B∣))
Ο(∣A∣+∣B∣)
Мера Жаккарда
A={url1 , url2 ,… , urlk }
h : A → ℕ
hmin ( A )=min x∈ A (h ( x ))
J ( A , B )=P [hmin ( A )=hmin (B )]
MinHash
Сигнатура множества вычисляется один раз
Размер сигнатуры не меняется
Одна хеш-функция имеет высокую
дисперсию, поэтому нужно использовать
среднее нескольких хеш-функций
Особенности MinHash
Фильтрация логов во
временном окне
MAP
Кластеризация
Фильтрация логов во
временном окне
Множество уникальных
URL
MAP
REDUCE
Кластеризация
Фильтрация логов во
временном окне
Множество уникальных
URL
Подсчет значений
хеш-функций
MAP
REDUCE
Кластеризация
Фильтрация логов во
временном окне
Множество уникальных
URL
Подсчет значений
хеш-функций
Вычисление минимума
MAP
REDUCE
Кластеризация
Фильтрация логов во
временном окне
Множество уникальных
URL
Подсчет значений
хеш-функций
Вычисление минимума
Группировка минимумов (кластеры)
MAP
REDUCE
Кластеризация
Фильтрация логов во
временном окне
Множество уникальных
URL
Подсчет значений
хеш-функций
Вычисление минимума
Группировка минимумов (кластеры)
Отсечение небольших кластеров
MAP
REDUCE
Кластеризация
Фильтрация логов во
временном окне
MAP
Рекомендации
Фильтрация логов во
временном окне
Множество уникальных
URL
MAP
REDUCE
Рекомендации
Фильтрация логов во
временном окне
Множество уникальных
URL
Подсчет кликов по группам
MAP
REDUCE
Рекомендации
Фильтрация логов во
временном окне
Множество уникальных
URL
Подсчет кликов по группам
Подсчет кликов по группам
MAP
REDUCE
Рекомендации
Фильтрация логов во
временном окне
Множество уникальных
URL
Подсчет кликов по группам
Подсчет кликов по группам
Группировка новостей
MAP
REDUCE
Рекомендации
Фильтрация логов во
временном окне
Множество уникальных
URL
Подсчет кликов по группам
Подсчет кликов по группам
Группировка новостей
Отсечение непопулярны
х новостей
MAP
REDUCE
Рекомендации
Hadoop кластер из 8 узлов
Временное окно кластеризации – 5 суток (8
ГБ логов)
Время кластеризации – 7 минут
Временное окно рекомендаций – 5 часов
Время генерации рекомендаций – 3.5-4
минуты
Производительность
Кузнецов Сергей Дмитриевич Добров Борис Викторович Когаловский Михаил Рувимович Калиниченко Леонид Андреевич
Благодарности
Вопросы?