Слайд 1Использование Hadoop и Mahout
в машинном обучении
Созыкин Андрей Владимирович
к.т.н.
зав.кафедрой высокопроизводительных компьютерных
технологий
Слайд 2Hadoop и Mahout Созыкин А.В.
Big Data
Big Data – задачи обработки больших
объемов данных:
Терабайты и петабайты
Высокая скорость обработки – невозможно сделать традиционными подходами
Оценки аналитиков Gartner и IDC:
Big Data входит в ТОП 10 наиболее важных тенденций развития информационных технологий
Рынок Big Data один из самых быстрорастущих
MapReduce – одна из наиболее популярных моделей обработки данных в Big Data
Слайд 3Hadoop и Mahout Созыкин А.В.
План
Основы MapReduce и Apache Hadoop
Экосистема Hadoop
Машинное обучение в Apache Mahout
Слайд 4Hadoop и Mahout Созыкин А.В.
История Hadoop и MapReduce
Технологию MapReduce придумали в
Google для системы поиска в Интернет:
Цель – хранить и обрабатывать большие объемы данных на обычных компьютерах, объединенных сетью
Goggle не распространяет свою реализацию MapReduce
Jeffrey Dean, Sanjay Ghemawat. MapReduce: Simplified Data Processing on Large Clusters
Sanjay Ghemawat, Howard Gobioff, Shun-Tak Leung. The Google File System
Apache Hadoop – открытая реализация MapReduce:
Разработан на основе идей Google
Написан на Java
http://hadoop.apache.org/
Слайд 5Hadoop и Mahout Созыкин А.В.
Кто использует Hadoop
Кто использует Hadoop:
Самый большой
кластер Hadoop в Yahoo!:
4500 серверов
Используется для поисковой системы и подбора рекламных объявлений
Слайд 6Hadoop и Mahout Созыкин А.В.
Основные технологии Hadoop
HDFS (Hadoop Distributed File
System) – хранение данных
MapReduce – обработка данных
Слайд 7Hadoop и Mahout Созыкин А.В.
HDFS
Файл
Слайд 8Hadoop и Mahout Созыкин А.В.
HDFS
Файл
64МБ
64МБ
64МБ
Слайд 9
Hadoop и Mahout Созыкин А.В.
HDFS
Файл
64МБ
64МБ
64МБ
Слайд 10
Hadoop и Mahout Созыкин А.В.
HDFS
Data Node 1
Data Node 2
Data Node 3
Data
Node 4
Data Node 5
Data Node 6
Name
Node
1, 4, 6
1, 3, 5
1, 2, 5
Слайд 11Hadoop и Mahout Созыкин А.В.
Работа с HDFS
Блоки файлов в HDFS распределены
по разным серверам:
Нельзя смонтировать HDFS
Не работают стандартные команды ls, cp, mv и т.п.
Необходимо использовать специальную команду:
$ hadoop dfs –cmd
Примеры:
$ hadoop dfs -ls
Found 3 items
-rw-r--r-- 1 hadoop supergroup 0 2011-06-22 13:58 /user/hadoop/file1
-rw-r--r-- 1 hadoop supergroup 0 2011-06-22 13:58 /user/hadoop/file2
-rw-r--r-- 1 hadoop supergroup 0 2011-06-22 13:58 /user/hadoop/file3
$ hadoop dfs -put /tmp/file4
$ hadoop dfs -cat file4
Hello, world!
Слайд 12Hadoop и Mahout Созыкин А.В.
Особенности HDFS
HDFS – специализированная файловая система, оптимизированная
для параллельной потоковой работы с большими файлами
Подходит не для всех задач!
Модель Write Once Read Many:
Нельзя изменять файл, можно только добавлять в конец
Большой размер блока:
По-молчанию 64 МБ (часто 128 или 256 МБ)
Не эффективен произвольный доступ (базы данных и т.п.)
Слайд 13Hadoop и Mahout Созыкин А.В.
MapReduce
MapReduce – технология распределенных вычислений
Цель MapReduce
– разделить логику приложения и организацию распределенного взаимодействия:
Программист реализует только логику приложения
Распределенная работа в кластере обеспечивается автоматически
MapReduce работает с данными как с парами Ключ:Значение:
смещение в файле: текст
идентификатор пользователя: профиль
пользователь: список друзей
временная метка: событие в журнале
Источник: http://www.youtube.com/watch?v=SS27F-hYWfU
Слайд 14Hadoop и Mahout Созыкин А.В.
Функции Map и Reduce
Источник: http://developer.yahoo.com/hadoop/tutorial/module4.html
Слайд 15Hadoop и Mahout Созыкин А.В.
Пример MapReduce: WordCount
Задача: посчитать, сколько раз слово
встречается в файле
Количество обращений к Web-страницам
Количество просмотра видео или прослушивания песни
Исходные данные:
Текстовые файлы
Каждый файл делится на пары: Смещение:Тест
Пример:
Цель MapReduce – разделить логику приложения и организацию распределенного взаимодействия. Программист реализует только логику приложения
Слайд 16Hadoop и Mahout Созыкин А.В.
WordCount: функция Map
Исходные данные:
Цель MapReduce –
разделить логику приложения и организацию распределенного взаимодействия. Программист реализует только логику приложения
Результаты обработки:
<цель, 1>, , <разделить, 1>, <логику,1>, <приложения, 1>, <и, 1>, <организацию, 1>, <распределенного, 1>, <взаимодействия, 1>, <программист, 1>, <реализует, 1>, <только,1>, <логику, 1>, <приложения, 1>
Сортировка и группировка по ключу:
, <взаимодействия, 1>, <и, 1>, <логику,1>, <логику, 1>, <организацию, 1>, <приложения, 1>, <приложения, 1>, <программист, 1>, <разделить, 1>, <распределенного, 1>, <реализует, 1>, <только,1>, <цель, 1>.
Слайд 17Hadoop и Mahout Созыкин А.В.
WordCount: функция Reduce
Пары с одинаковыми ключами
передаются в одну функцию Reduce:
→
<взаимодействия, 1> → <взаимодействия, 1>
<и, 1> → <и, 1>
<логику,1>, <логику, 1> → <логику, 2>
<организацию, 1> → <организацию, 1>
<приложения, 1>, <приложения, 1> → <приложения, 2>
<программист, 1> → <программист, 1>
<разделить, 1> → <разделить, 1>
<распределенного, 1> → <распределенного, 1>
<реализует, 1> → <реализует, 1>
<только,1> → <только,1>
<цель, 1> → <цель, 1>
Слайд 18Hadoop и Mahout Созыкин А.В.
Модель MapReduce
MapReduce – странный подход к
решению задачи WordCount
Есть более простые и интуитивно понятные решения
Достоинства MapReduce:
Возможность автоматического распараллеливания – функции Map и Reduce могут обрабатывать элементы списка параллельно не зависимо друг от друга
Масштабируемость – данные могут размещаться на разных серверах (в HDFS) и обрабатываться также на разных серверах
Отказоустойчивость – при выходе из строя сервера функции Map или Reduce запускаются на другом сервере
Недостатки MapReduce:
Фиксированный алгоритм обработки данных
Высокие накладные расходы на распараллеливание
Слайд 19Hadoop и Mahout Созыкин А.В.
Перемещение вычислений к данным
Слайд 20Hadoop и Mahout Созыкин А.В.
Пример запуска задачи Hadoop
$ hadoop jar
hadoop-examples-*.jar grep input output 'dfs[a-z.]+'
hadoop-examples-*.jar – Имя архива с примерами из дистрибутива Hadoop
grep – Имя команды в архиве с примерами
input – Каталог входных данных (в HDFS)
output – Каталог выходных данных (в HDFS)
'dfs[a-z.]+' – Шаблон для поиска
Слайд 21Hadoop и Mahout Созыкин А.В.
Экосистема Hadoop
MapReduce – мощная модель программирования,
но низкоуровневая
Реализация практически полезных алгоритмов требует высоких трудозатрат
Hadoop сложен в установке и администрировании
На основе Hadoop сложилась экосистема:
Программные продукты для решения различных прикладных задач, использующие Hadoop для масштабирования
Дистрибутивы Hadoop
Облачный хостинг для Hadoop
Слайд 22Hadoop и Mahout Созыкин А.В.
Экосистема Hadoop
Pig – декларативный язык анализа
данных
Hive – анализ данных с использованием языка, близкого к SQL
Oozie – поток работ в Hadoop
Hbase – база данных (нереляционная), аналог Google Big Table
Mahout – машинное обучение
Sqoop – перенос данных из РСУБД в Hadoop и наоборот
Flume – перенос логов в HDFS
Zookeeper, MRUnit, Avro, Giraph, Ambari, Cassandra, HCatalog, Fuse-DFS и т.д.
Слайд 23Hadoop и Mahout Созыкин А.В.
Дистрибутивы Hadoop
Apache
hadoop.apache.org
Оригинальный дистрибутив, только Hadoop
Альтернативные дистрибутивы:
Совместно
Hadoop, HBase, Pig, Hive, Mahout, Sqoop, Zookeeper и др.
Средства автоматизации установки и администрирования, мониторинг, безопасность
Поставщики альтернативных дистрибутивов:
Cloudera
MapR
Hortonworks
Intel
Слайд 24Hadoop и Mahout Созыкин А.В.
Облачный хостинг Hadoop
Amazon Elastic MapReduce (Amazon EMR)
http://aws.amazon.com/elasticmapreduce/
Партнерство с MapR
Apache Hadoop on Rackspace
http://www.rackspace.com/knowledge_center/article/apache-hadoop-on-rackspace-private-cloud
Партнерство с Hortonworks
Microsoft Windows Azure
http://www.windowsazure.com/en-us/home/scenarios/big-data/
Qubole Data Service
http://www.qubole.com/qubole-data-service
Web-интерфейс для анализа данных с Hadoop, Hive, Pig и др. на Amazon EMR
Слайд 25Hadoop и Mahout Созыкин А.В.
Apache Mahout
Масштабируемая библиотека машинного обучения (machine learning)
Режимы работы:
В кластере Hadoop
Отдельно на одном компьютере
Mahout – слово из индийского языка, означает погонщик слонов
Открытые исходные коды:
Написан на Java
Лицензия Apache 2.0
Страница проекта:
http://mahout.apache.org/
Слайд 26Hadoop и Mahout Созыкин А.В.
Машинное обучение в Mahout
Коллаборативная (совместная) фильтрация
Рекомендации
Кластеризация
Объединение
объектов в группы (кластеры, заранее не известные)
Примеры: Google News объединяет новости на одну тему
Алгоритмы в Mahout: K-Means, Fuzzy K-Means, Mean Shift, Dirichlet, Canopy и др.
Классификация:
Определение принадлежности объекта к заданному классу (классы известны заранее)
Примеры: определение спама, определение тематики текста (текст о политике, спорте и т.п.)
Алгоритмы в Mahout: Logistic Regression, Naive Bayes, Support Vector Machines, Online Passive Aggressive и др.
Слайд 27Hadoop и Mahout Созыкин А.В.
Рекомендации
Слайд 28Hadoop и Mahout Созыкин А.В.
Актуальность рекомендаций
Хорошая система рекомендаций может существенно повысит
доход от продаж и рекламы
$1M NetflixPrize:
Компания Netflix устроила соревнования по улучшению алгоритма рекомендации DVD
Размер приза: 1 миллион долларов
Условие получения приза: улучшить алгоритм рекомендации на 10%
Приз получила команда «BellKor’s Pragmatic Chaos» в
2009 г.
Соревнования проходили с 2006 по 2009 г.
Каждый год выплачивался приз за прогресс $50 000
http://www.netflixprize.com/
Слайд 29Hadoop и Mahout Созыкин А.В.
Способы рекомендаций
На основе контента
Пример: пользователь выбрал книгу
Пушкина, значит можно рекомендовать ему другую книгу Пушкина или классическую литературу
Недостаток: система рекомендаций сильно зависит от домена и непереносима
На основе предпочтений
Рекомендации на основе оценок пользователей
Объекты рекомендации могут быть любыми
Можно реализовать общую систему, не зависимую от домена
Реализован в Mahout
Слайд 30Hadoop и Mahout Созыкин А.В.
Предпочтение
Рекомендации в Mahout выдаются на основе предпочтений
пользователей
Предпочтение в Mahout:
Пользователь (целое число)
Объект (целое число)
Предпочтение (число двойной точности)
Пример данных о предпочтениях для Mahout из проекта GroupLens (Университет Минесоты) – оценка пользователями фильмов:
196 242 3 881250949
186 302 3 891717742
22 377 1 878887116
244 51 2 880606923
user id | item id | rating | timestamp
(Не используется
в Mahout)
Слайд 31Hadoop и Mahout Созыкин А.В.
Подходы к рекомендации
На основе пользователей:
Найти пользователей с
похожими вкусами
Посмотреть, что нравится этим пользователям
Рекомендовать объекты в соответствии с предпочтениями похожих пользователей
Недостатки: подход плохо масштабируется, предпочтения быстро меняются
На основе объектов:
Найти объекты, похожие на те, которые понравились пользователю
Рекомендовать наиболее популярные из них
Преимущества: хорошо масштабируется, оценки объектов меняются редко. Рекомендации можно генерировать в автономном режиме (с использованием Hadoop)
Слайд 32Hadoop и Mahout Созыкин А.В.
Рекомендации на основе пользователей
public static void main(String[] args)
throws Exception {
DataModel model = new FileDataModel (new File("u.data"));
UserSimilarity similarity = new PearsonCorrelationSimilarity (model);
UserNeighborhood neighborhood =
new NearestNUserNeighborhood (2, similarity, model);
Recommender recommender = new GenericUserBasedRecommender (
model, neighborhood, similarity);
List recommendations = recommender.recommend(1, 1);
for (RecommendedItem recommendation : recommendations) {
System.out.println(recommendation);
}
}
RecommendedItem [item:643, value:4.27682]
Слайд 33Hadoop и Mahout Созыкин А.В.
Рекомендации на основе пользователей
Источник: Sean Owen, Robin Anil,
Ted Dunning, and Ellen Friedman. Mahout in Action
Слайд 34Hadoop и Mahout Созыкин А.В.
Выбор похожих пользователей
Как определить, что вкусы пользователей
похожи?
Мера «похожести» - число от -1 до 1.
1 – вкусы пользователей совпадают
0 – у пользователей нет общих вкусов
-1 – вкусы пользователей противоположны
Mahout использует несколько алгоритмов расчета «похожести»:
Коэффициент Пирсона
Евклидово расстояние
Корреляция Спирмена
Коэффициент Танимото
Логарифмическое правдоподобие
Слайд 35Hadoop и Mahout Созыкин А.В.
«Соседние» пользователи
Источник: Sean Owen, Robin Anil, Ted Dunning,
and Ellen Friedman. Mahout in Action
Фиксированное число соседей
(NearestNUserNeighborhood )
Соседи в пределах границы
(ThresholdUserNeighborhood)
Слайд 36Hadoop и Mahout Созыкин А.В.
Выбор параметров
Какой тип «похожести» пользователей лучше?
Какой
тип «соседства» лучше?
Критерии оценки:
Однозначного ответа нет
Результаты разные для разных данных
Проводите эксперименты с разными параметрами!
Источник: Sean Owen, Robin Anil, Ted Dunning, and Ellen Friedman. Mahout in Action
Слайд 37Hadoop и Mahout Созыкин А.В.
Рекомендации на основе объектов
public static void main(String[] args)
throws Exception {
DataModel model = new FileDataModel (new File("u.data"));
ItemSimilarity itemSimilarity = new LogLikelihoodSimilarity(dataModel);
ItemBasedRecommender recommender =
new GenericItemBasedRecommender(dataModel, itemSimilarity);
List recommendations =
recommender.recommend(1, 1)
for (RecommendedItem recommendation : recommendations) {
System.out.println(recommendation);
}
}
RecommendedItem [item:271, value:4.27682]
Слайд 38Hadoop и Mahout Созыкин А.В.
Mahout и Hadoop
Источник: Sean Owen, Robin Anil, Ted
Dunning, and Ellen Friedman. Mahout in Action
Слайд 39Hadoop и Mahout Созыкин А.В.
Mahout и Hadoop
Mahout может работать как отдельно,
так и в кластере Hadoop
Запуск рекомендации Mahout в Hadoop выполняется с помощью класса RecommenderJob
Данные о предпочтениях должны быть записаны в HDFS
Полученные рекомендации записываются в HDFS
Рекомендации можно перенести в базу данных с помощью sqoop
Слайд 40Hadoop и Mahout Созыкин А.В.
Пример запуска Mahout в Hadoop
$ hadoop jar mahout-core-0.7-job.jar
\
org.apache.mahout.cf.taste.hadoop.item.RecommenderJob \
-Dmapred.input.dir=input
-Dmapred.output.dir=output
--usersFile users_list.txt
Возможные параметры:
Dmapred.input.dir – каталог с данными о предпочтениях (в HDFS, может быть несколько файлов)
Dmapred.output.dir – каталог, куда записываются сгенерированные рекомендации (в HDFS)
--usersFile – файл с идентификаторами пользователей, для которых нужно сгенерировать рекомендации
--similarityClassname – имя класса, который реализует расчет «похожести»
--numRecommendations – количество рекомендаций на одного пользователя
Слайд 41Hadoop и Mahout Созыкин А.В.
Итоги
MapReduce – программная модель для обработки больших
объемов данных (BigData)
Hadoop – открытая реализация MapReduce
Экосистема Hadoop
Mahout – машинное обучение в Hadoop:
Рекомендации, классификация, кластеризация
Рекомендации в Mahout:
Предпочтения: пользователь, объект, оценка
Рекомендации на основе пользователей и на основе объектов
«Похожесть» пользователей и объектов
«Соседство» пользователей
Запуск Mahout RecommenderJob в Hadoop
Слайд 42Hadoop и Mahout Созыкин А.В.
Вопросы?
Контакты
Андрей Созыкин
avs@imm.uran.ru
www.asozykin.ru