Использование Hadoop и Mahout в машинном обучении Созыкин Андрей Владимирович к.т.н. зав.кафедрой высокопроизводительных компьютерных технологий Hadoop и Mahout Созыкин А.В. Big Data • Big Data – задачи обработки больших объемов данных: • Терабайты и петабайты • Высокая скорость обработки – невозможно сделать традиционными подходами • Оценки аналитиков Gartner и IDC: • Big Data входит в ТОП 10 наиболее важных тенденций развития информационных технологий • Рынок Big Data один из самых быстрорастущих • MapReduce – одна из наиболее популярных моделей обработки данных в Big Data 2 Hadoop и Mahout Созыкин А.В. План • Основы MapReduce и Apache Hadoop • Экосистема Hadoop • Машинное обучение в Apache Mahout 3 Hadoop и 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/ 4 Hadoop и Mahout Созыкин А.В. Кто использует Hadoop • Кто использует Hadoop: • Самый большой кластер Hadoop в Yahoo!: • 4500 серверов • Используется для поисковой системы и подбора рекламных объявлений 5 Hadoop и Mahout Созыкин А.В. Основные технологии Hadoop • HDFS (Hadoop Distributed File System) – хранение данных • MapReduce – обработка данных 6 Hadoop и Mahout Созыкин А.В. HDFS Файл 7 Hadoop и Mahout Созыкин А.В. HDFS Файл 64МБ 64МБ 64МБ 8 Hadoop и Mahout Созыкин А.В. HDFS Файл 64МБ 64МБ 64МБ 9 Hadoop и Mahout Созыкин А.В. HDFS Data Node 1 Data Node 2 Data Node 3 Name Node 1, 4, 6 1, 3, 5 1, 2, 5 Data Node 4 Data Node 5 Data Node 6 10 Hadoop и Mahout Созыкин А.В. Работа с HDFS • Блоки файлов в HDFS распределены по разным серверам: • Нельзя смонтировать HDFS • Не работают стандартные команды ls, cp, mv и т.п. • Необходимо использовать • $ hadoop dfs –cmd специальную команду: • Примеры: $ hadoop dfs -ls Found 3 items -rw-r--r-1 hadoop supergroup -rw-r--r-1 hadoop supergroup -rw-r--r-1 hadoop supergroup $ hadoop dfs -put /tmp/file4 $ hadoop dfs -cat file4 Hello, world! 0 2011-06-22 13:58 /user/hadoop/file1 0 2011-06-22 13:58 /user/hadoop/file2 0 2011-06-22 13:58 /user/hadoop/file3 11 Hadoop и Mahout Созыкин А.В. Особенности HDFS • HDFS – специализированная файловая система, оптимизированная для параллельной потоковой работы с большими файлами • Подходит не для всех задач! • Модель Write Once Read Many: • Нельзя изменять файл, можно только добавлять в конец • Большой размер блока: • По-молчанию 64 МБ (часто 128 или 256 МБ) • Не эффективен произвольный доступ (базы данных и т.п.) 12 Hadoop и Mahout Созыкин А.В. MapReduce • MapReduce – технология распределенных вычислений • Цель MapReduce – разделить логику приложения и организацию распределенного взаимодействия: • Программист реализует только логику приложения • Распределенная работа в кластере обеспечивается автоматически • MapReduce работает с данными как с парами Ключ:Значение: • смещение в файле: текст • идентификатор пользователя: профиль • пользователь: список друзей • временная метка: событие в журнале Источник: http://www.youtube.com/watch?v=SS27F-hYWfU 13 Hadoop и Mahout Созыкин А.В. Функции Map и Reduce Источник: http://developer.yahoo.com/hadoop/tutorial/module4.html 14 Hadoop и Mahout Созыкин А.В. Пример MapReduce: WordCount • Задача: посчитать, сколько раз слово встречается в файле • Количество обращений к Web-страницам • Количество просмотра видео или прослушивания песни • Исходные данные: • Текстовые файлы • Каждый файл делится на пары: Смещение:Тест • Пример: • Цель MapReduce – разделить логику приложения и организацию распределенного взаимодействия. Программист реализует только логику приложения 15 Hadoop и Mahout Созыкин А.В. WordCount: функция Map • Исходные данные: • Цель MapReduce – разделить логику приложения и организацию распределенного взаимодействия. Программист реализует только логику приложения • Результаты обработки: • <цель, 1>, <mapreduce,1>, <разделить, 1>, <логику,1>, <приложения, 1>, <и, 1>, <организацию, 1>, <распределенного, 1>, <взаимодействия, 1>, <программист, 1>, <реализует, 1>, <только,1>, <логику, 1>, <приложения, 1> • Сортировка и группировка по ключу: • <mapreduce,1>, <взаимодействия, 1>, <и, 1>, <логику,1>, <логику, 1>, <организацию, 1>, <приложения, 1>, <приложения, 1>, <программист, 1>, <разделить, 1>, <распределенного, 1>, <реализует, 1>, <только,1>, <цель, 1>. 16 Hadoop и Mahout Созыкин А.В. WordCount: функция Reduce • Пары с одинаковыми ключами передаются в одну функцию Reduce: <mapreduce,1> <mapreduce,1> <взаимодействия, 1> <взаимодействия, 1> <и, 1> <и, 1> <логику,1>, <логику, 1> <логику, 2> <организацию, 1> <организацию, 1> <приложения, 1>, <приложения, 1> <приложения, 2> <программист, 1> <программист, 1> <разделить, 1> <разделить, 1> <распределенного, 1> <распределенного, 1> <реализует, 1> <реализует, 1> <только,1> <только,1> <цель, 1> <цель, 1> 17 Hadoop и Mahout Созыкин А.В. Модель MapReduce • MapReduce – странный подход к решению задачи WordCount • Есть более простые и интуитивно понятные решения • Достоинства MapReduce: • Возможность автоматического распараллеливания – функции Map и Reduce могут обрабатывать элементы списка параллельно не зависимо друг от друга • Масштабируемость – данные могут размещаться на разных серверах (в HDFS) и обрабатываться также на разных серверах • Отказоустойчивость – при выходе из строя сервера функции Map или Reduce запускаются на другом сервере • Недостатки MapReduce: • Фиксированный алгоритм обработки данных • Высокие накладные расходы на распараллеливание 18 Hadoop и Mahout Созыкин А.В. Перемещение вычислений к данным 19 Hadoop и 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.]+' – Шаблон для поиска 20 Hadoop и Mahout Созыкин А.В. Экосистема Hadoop • MapReduce – мощная модель программирования, но низкоуровневая • Реализация практически высоких трудозатрат полезных алгоритмов требует сложен в установке и администрировании • На основе Hadoop сложилась экосистема: • Hadoop • Программные продукты для решения различных прикладных задач, использующие Hadoop для масштабирования • Дистрибутивы Hadoop • Облачный хостинг для Hadoop 21 Hadoop и 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 и т.д. 22 Hadoop и Mahout Созыкин А.В. Дистрибутивы Hadoop • Apache • hadoop.apache.org • Оригинальный дистрибутив, только Hadoop • Альтернативные дистрибутивы: • Совместно Hadoop, HBase, Pig, Hive, Mahout, Sqoop, Zookeeper и др. • Средства автоматизации установки и администрирования, мониторинг, безопасность • Поставщики дистрибутивов: • • • • альтернативных Cloudera MapR Hortonworks Intel 23 Hadoop и Mahout Созыкин А.В. Облачный хостинг Hadoop • Amazon Elastic MapReduce (Amazon EMR) • http://aws.amazon.com/elasticmapreduce/ • Партнерство с MapR • Apache Hadoop on Rackspace • http://www.rackspace.com/knowledge_center/article/apachehadoop-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 24 Hadoop и Mahout Созыкин А.В. Apache Mahout • Масштабируемая библиотека машинного обучения (machine learning) • Режимы работы: • В кластере Hadoop • Отдельно на одном компьютере • Mahout – слово из индийского языка, означает погонщик слонов • Открытые исходные коды: • Написан на Java • Лицензия Apache 2.0 • Страница проекта: • http://mahout.apache.org/ 25 Hadoop и 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 и др. 26 Hadoop и Mahout Созыкин А.В. Рекомендации 27 Hadoop и Mahout Созыкин А.В. Актуальность рекомендаций • Хорошая система рекомендаций может существенно повысит доход от продаж и рекламы • $1M NetflixPrize: • Компания Netflix устроила соревнования по улучшению алгоритма рекомендации DVD • Размер приза: 1 миллион долларов • Условие получения приза: улучшить алгоритм рекомендации на 10% • Приз получила команда «BellKor’s Pragmatic Chaos» в 2009 г. • Соревнования проходили с 2006 по 2009 г. • Каждый год выплачивался приз за прогресс $50 000 • http://www.netflixprize.com/ 28 Hadoop и Mahout Созыкин А.В. Способы рекомендаций • На основе контента • Пример: пользователь выбрал книгу Пушкина, значит можно рекомендовать ему другую книгу Пушкина или классическую литературу • Недостаток: система рекомендаций сильно зависит от домена и непереносима • На основе предпочтений • Рекомендации на основе оценок пользователей • Объекты рекомендации могут быть любыми • Можно реализовать общую систему, не зависимую от домена • Реализован в Mahout 29 Hadoop и 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) 30 Hadoop и Mahout Созыкин А.В. Подходы к рекомендации • На основе пользователей: • Найти пользователей с похожими вкусами • Посмотреть, что нравится этим пользователям • Рекомендовать объекты в соответствии с предпочтениями похожих пользователей • Недостатки: подход плохо масштабируется, предпочтения быстро меняются • На основе объектов: • Найти объекты, похожие на те, которые понравились пользователю • Рекомендовать наиболее популярные из них • Преимущества: хорошо масштабируется, оценки объектов меняются редко. Рекомендации можно генерировать в автономном режиме (с использованием Hadoop) 31 Hadoop и 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<RecommendedItem> recommendations = recommender.recommend(1, 1); for (RecommendedItem recommendation : recommendations) { System.out.println(recommendation); } } RecommendedItem [item:643, value:4.27682] 32 Hadoop и Mahout Созыкин А.В. Рекомендации на основе пользователей Источник: Sean Owen, Robin Anil, Ted Dunning, and Ellen Friedman. Mahout in Action 33 Hadoop и Mahout Созыкин А.В. Выбор похожих пользователей • Как определить, что вкусы пользователей похожи? • Мера «похожести» - число от -1 до 1. • 1 – вкусы пользователей совпадают • 0 – у пользователей нет общих вкусов • -1 – вкусы пользователей противоположны • Mahout использует несколько алгоритмов расчета «похожести»: • • • • • Коэффициент Пирсона Евклидово расстояние Корреляция Спирмена Коэффициент Танимото Логарифмическое правдоподобие 34 Hadoop и Mahout Созыкин А.В. «Соседние» пользователи Фиксированное число соседей (NearestNUserNeighborhood ) Соседи в пределах границы (ThresholdUserNeighborhood) Источник: Sean Owen, Robin Anil, Ted Dunning, and Ellen Friedman. Mahout in Action 35 Hadoop и Mahout Созыкин А.В. Выбор параметров • Какой тип «похожести» пользователей лучше? • Какой тип «соседства» лучше? • Критерии оценки: Источник: Sean Owen, Robin Anil, Ted Dunning, and Ellen Friedman. Mahout in Action • Однозначного ответа нет • Результаты разные для разных данных • Проводите эксперименты с разными параметрами! 36 Hadoop и 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<RecommendedItem> recommendations = recommender.recommend(1, 1) for (RecommendedItem recommendation : recommendations) { System.out.println(recommendation); } } RecommendedItem [item:271, value:4.27682] 37 Hadoop и Mahout Созыкин А.В. Mahout и Hadoop Источник: Sean Owen, Robin Anil, Ted Dunning, and Ellen Friedman. Mahout in Action 38 Hadoop и Mahout Созыкин А.В. Mahout и Hadoop • Mahout может работать как отдельно, так и в кластере Hadoop • Запуск рекомендации Mahout в Hadoop выполняется с помощью класса RecommenderJob • Данные о предпочтениях должны быть записаны в HDFS • Полученные рекомендации записываются в HDFS • Рекомендации можно перенести в базу данных с помощью sqoop 39 Hadoop и 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 – количество рекомендаций на одного пользователя 40 Hadoop и Mahout Созыкин А.В. Итоги • MapReduce – программная модель для обработки больших объемов данных (BigData) • Hadoop – открытая реализация MapReduce • Экосистема Hadoop • Mahout – машинное обучение в Hadoop: • Рекомендации, классификация, кластеризация • Рекомендации в Mahout: • Предпочтения: пользователь, объект, оценка • Рекомендации на основе пользователей и на основе объектов • «Похожесть» пользователей и объектов • «Соседство» пользователей • Запуск Mahout RecommenderJob в Hadoop 41 Hadoop и Mahout Созыкин А.В. Вопросы? Контакты Андрей Созыкин [email protected] www.asozykin.ru 42