Добавляем в веб-проект аналитику и интеллект на базе Apache Spark::Журнал СА 1-2.2018
www.samag.ru
     
Поиск  
              
 www.samag.ru    Web  0 товаров , сумма 0 руб.
E-mail
Пароль  
 Запомнить меня
Регистрация | Забыли пароль?
Сетевой агент
О журнале
Журнал «БИТ»
Информация для ВАК
Звезды «СА»
Подписка
Где купить
Авторам
Рекламодателям
Магазин
Архив номеров
Форум
Вакансии
Спроси юриста
Игры
Контакты
   
Слайд шоу  
Представляем работы Виктора Чумачева
Виктор Чумачев – известный московский художник, который сотрудничает с «Системным администратором» уже несколько лет. Именно его забавные и воздушные, как ИТ, иллюстрации украшают многие серьезные статьи в журнале. Работы Виктора Чумачева хорошо знакомы читателям в России («Комсомольская правда», «Известия», «Московские новости», Коммерсант и др.) и за рубежом (США, Германия). Каждый раз, получая новый рисунок Виктора, мы в редакции улыбаемся. А улыбка, как известно, смягчает душу. Поэтому смотрите на его рисунки – и пусть у вас будет хорошее настроение!
1001 и 1 книга  
29.10.2018г.
Просмотров: 231
Комментарии: 0
Информатика. Учебник, 4-е издание, цветное, переработанное и дополненное

 Читать далее...

20.09.2018г.
Просмотров: 521
Комментарии: 0
Байесовские модели

 Читать далее...

20.09.2018г.
Просмотров: 391
Комментарии: 0
Элегантный SciPy

 Читать далее...

20.09.2018г.
Просмотров: 461
Комментарии: 0
Олимпиадное программирование

 Читать далее...

20.09.2018г.
Просмотров: 416
Комментарии: 0
Akka в действии

 Читать далее...

Дискуссии  
17.09.2014г.
Просмотров: 19569
Комментарии: 3
Красть или не красть? О пиратском ПО как о российском феномене

Тема контрафактного ПО и защиты авторских прав сегодня актуальна как никогда. Мы представляем ...

 Читать далее...

03.03.2014г.
Просмотров: 21840
Комментарии: 1
Жизнь под дамокловым мечом

Политические события как катализатор возникновения уязвимости Законодательная инициатива Государственной Думы и силовых структур, ...

 Читать далее...

23.01.2014г.
Просмотров: 30427
Комментарии: 3
ИТ-специалист будущего. Кто он?

Так уж устроен человек, что взгляд его обращен чаще всего в Будущее, ...

 Читать далее...


  Опросы

Друзья сайта  

Форум системных администраторов  

sysadmins.ru

 Добавляем в веб-проект аналитику и интеллект на базе Apache Spark

Архив номеров / 2018 / Выпуск №1-2 (182-183) / Добавляем в веб-проект аналитику и интеллект на базе Apache Spark

Рубрика: Разработка /  Машинное обучение

Александр Календарев АЛЕКСАНДР КАЛЕНДАРЕВ, ведущий программист AD-1, akalend@mail.ru

Добавляем в веб-проект
аналитику и интеллект на базе Apache Spark

Добавляем в веб-проект аналитику и интеллект на базе Apache SparkМожно сказать, что наступает век интеллектуального интернета, где каждое веб-приложение имеет интеллектуальный блок принятия решений (ИБПР). В данной статье мы рассмотрим ИБПР на базе Apache Spark

Просто о сложном

В современном информационном пространстве важную роль играют системы принятия решений (СПР), что повышает конкуренцию веб-проектов. Это и рекомендательные системы, основанные на оценках пользователя, таких проектах, как Netfix, Яндекс.Музыка, Кинопоиск. Это системы оценки платежеспособности заемщика. Такие проекты есть в любом банке. Это рекомендательные системы продвижения и сбыта товаров, секции: «С этим товаром также покупают...», «Мы вам рекомендуем обратить внимание на...». Это разного рода рекламные системы, которые стремятся показать баннеры и ролики соответствующей целевой аудитории. Основную роль в интеллектуальных СПР играет машинное обучение.

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

  • кластеризация;
  • категоризация;
  • коллаборативная фильтрация.

Чтоб определить группы пользователей, применяется кластеризация. Это задача разбиения множества объектов на группы, называемые кластерами. Внутри каждой группы должны быть объекты со сходными показателями (фактор).

Например, мы хотим иметь данные о скачивании музыки двух жанров: рок и шансон. Представим эти данные в виде графика. По оси Х будем откладывать количество скачиваний шансона, а по Y – рока.

На рис. 1 можно выделить два ярко выраженных кластера, которые отмечены красным: «Группа любителей рока» и «Группа любителей шансона». Когда появляется новая мелодия из категории джаз, то ее можно рекомендовать пользователям, которые входят в первый кластер, и шансон – во втором. Далее идет второй шаг.

Рисунок 1. Кластеризация

Рисунок 1. Кластеризация

Категоризация – структурирование схожих по темам документов, формирование обобщающих, классифицирующих категорий таким образом, чтобы объединить документы в группы, и создание модели, которую можно будет применять для классификации новых документов на основании рассчитанных ранее статистических параметров. В нашем случае это присваивание каждой мелодии определенной категории (экспертная оценка). Для музыки это немного сложнее, хотя можно выделить определенные категории путем спектрального и амплитудно-частотного анализа. Для текстового контента все намного проще, выделение категорий происходит по частоте встречаемости и взаимному расположению определенных слов.

В информационном пространстве важную роль играют системы принятия решений, что повышает конкуренцию веб-проектов

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

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

Работа с большим объемом данных предполагает распараллеливание их обработки и склейки результатов. Такой механизм был придуман в Googlе и реализован в рамках проекта Apache Hadoop, который в сочетании с распределенной файловой системой и распределенными хранилищами часто облегчает решение задач параллелизации, предоставляя программистам определенный API.

Коротко об Apache Spark

Обработкой блоков информации осуществляется Apache Spark. Spark – это открытый проект группы Apache, который был реализован в 2014 году. Он позиционируется как инструмент для быстрых кластерных вычислений. В настоящее время проект является наиболее активным из проектов Apache. Он может работать как под управлением кластера (Hadoop YARN или Apache Mesos), так и самостоятельно (локально), т.е. вести обработку данных в пределах одного сервера.

Apache Spark реализован на Scala (v 2.10) и требует VM Java не ниже 1.8. Проще всего запустить готовый docker-контейнер (hub.docker.io) с уже настроенным Apache Spark. Инсталляция и настройка хорошо описаны в «Руководстве пользователя» [1]. Необходимо выставить переменные окружения: JAVA_HOME, SCALA_HOME, SPARK_HOME, добавить в переменную окружения PATH путь до $SPARK_HOME/bin и для интерактивной запустить spark-shell (см. рис. 2). Для запуска интерактивной оболочки на питоне используйте:

bin/pyspar

Рисунок 2. Запуск Spark-shell

Рисунок 2. Запуск Spark-shell

Можно запустить spark-монитор:

spark-class org.apache.spark.deploy.master.Master

Если посмотреть браузером http://localhost:8080, то увидим такую картинку (см. рис. 3).

Рисунок 3. Мониторинг

Рисунок 3. Мониторинг

Spark API поддерживает только три языка: Scala, Java и Python. И еще для исследовательских целей можно использовать R, который тоже поддерживает Spark.

Так как Spark реализован на Scala, то лучше его и использовать. Но в нашем мире много Java-программистов, и очень мало кто пишет на Scala. А натыкаться на грабли не очень-то и хочется. Так как сам Scala использует JVM, то Java-классы прекрасно интегрируются в Spark. Oб обработчиках, реализованных на Python (Jython), такого не скажешь, так как есть некоторые, не совсем совместимые, классы, при использовании которых будет потеря в производительности.

Spark изнутри

В основу Spark легла реализация RDD (Resilient Distributed Dataset), переводится как множество распределенно-гибких данных. По сути, это распределенное множество данных в памяти, но удобнее всего его представить как таблицу. RDD при необходимости можно сериализовать и временно сохранить на диск. Также RDD могут быть разбиты на партиции – это минимальный объем RDD, который будет обработан каждым рабочим узлом распределенной системы.

Все операции делятся на две группы: преобразования (transformations) и действия (actions). Каждое преобразование принимает на вход RDD, производит на нем некоторые вычисления и передает далее снова RDD. Заключающим оператором всегда должно быть действие. Оно уже преобразует полученное RDD в окончательный результат: в виде текстового файла, числа, строки, сериализованных данных, записанных в БД или очередь. Каждая программа в Spark всегда должна заканчиваться действием.

Тут необходимо учесть очень важное замечание, что сама программа начинает выполняться с действия, т.е. если мы работаем с большими объемами данных, то на момент выполнения action наши данные (RDD) должны быть такого размера, чтоб не было переполнения памяти.

Классический пример из документации (подсчет слов):

val textFile = sc.textFile("/home/data/in.txt")
val counts = textFile.flatMap(line => line.split(" "))
                 .map(word => (word, 1))
                 .reduceByKey(_ + _)
                 counts.saveAsTextFile("/home/data/out.txt")

В данном примере метод saveAsTextFile() – это действие, все остальные методы являются преобразованиями.

В состав Spark входит (см. рис. 4):

  • SparkSQL – это возможность осуществлять преобразования на RDD с помощью стандартных SQL-запросов.
  • Spark MLlib – это библиотека машинного обучения. В ней сосредоточенно почти все из того, о чем шла речь в самом начале статьи. Далее мы более полно рассмотрим ее возможности.
  • Spark Streaming – это возможность обработки данных в потоковом режиме (режим реального времени) (см. рис. 5). Я бы назвал это основным достоинством Spark. Именно благодаря библиотеке Spark Streaming его можно использовать в online-режиме. Spark Streaming подхватывает данные из разных источников, передает их на обработку и по окончании передает поток данных далее. С помощью Spark Streaming можно решать задачи определения спама в соцсетях, осуществлять оптимальные рекламные предложения, определение разных подделок.
  • GraphX – библиотека вычислений на графах. Некоторые модели можно представить в виде графов. С этими графами можно осуществлять трансформации и, используя дерево графов, принимать необходимые решения. Также пакет включает библиотеку распределенных алгоритмов для работы с графами.

Рисунок 4. Состав Spark

Рисунок 4. Состав Spark

Рисунок 5. Spark Streaming

Рисунок 5. Spark Streaming

Немного о MLlib

MLlib – это основная библиотека Spark, содержащая множество процедур, которые подходят для задач обработки данных, построения модели и по ней принятия решения:

  • классификация (org.apache.spark.mllib.classification)
  • регрессия (org.apache.spark.mllib.regression)
  • кластеризация (org.apache.spark.mllib.clustering)
  • тематическое моделирование (org.apache.spark.mllib.tree.model)
  • сингулярное разложение (org.apache.spark.mllib.linalg.SingularValueDecomposition) и анализ по методу главных компонент (org.apache.spark.mllib.linalg.distributed.RowMatrix);
  • проверка гипотез и статистической выборки (org.apache.spark.mllib.stat)

Конечно, в рамки одной статьи не сможет уложиться такой обширный материал, предлагаю просмотреть следующие ресурсы [2-5].

Как это работает в реальных проектах

На рис. 6 изображена принципиальная схема работы в веб-проектах.

Рисунок 6. Принципиальная архитектура использования Spark

Рисунок 6. Принципиальная архитектура использования Spark

Проект можно разделить на две отдельные части: оnline-обработка и оffline-обработка. оffline-обработка происходит, как правило, раз в сутки, где на основании суточных и предыдущих данных строится статистическая или поведенческая модель. Online-часть – это быстрое определение по действиям пользователя его принадлежности к той или иной модели, и на основании этого производится решение о предоставлении ему той или иной услуги. Это может быть показ рекламного баннера, слота с информацией о похожем или сопутствующем товаре, предложение о приобретении кредитной карты. Все системы между собой очень похожи, отличие может быть лишь в использованных технологиях, например в качестве очереди может использоваться Apache Kafka или RabbitMQ, в качестве кэша для хранения сессий может использоваться Redis, Memcache. Для хранения данных может использоваться PgSQL или MySQL, Hbase или Cassandra, а в одном проекте, я знаю, используют ClickHouse (Open Source-разработка от Yandex) как быстрое масштабируемое хранилище для не реляционных данных.

Естественно, у каждого проекта свои особенности, и нет «серебряной пули». На рис. 6 представлена лишь обобщенная схема, обкатанная на одном из проектов. У вас может получиться другая схема. Если тема понравилась, пишите и присылайте пожелания и вопросы в редакцию или лично мне. В следующих статьях я смогу осветить более полно ту или иную часть этой обширной темы. Если у вас есть опыт в этой области, поделитесь им, попробуйте себя в качестве автора.

  1. Programming guidy. Официальная документация – https://spark.apache.org/docs/2.2.0/rdd-programming-guide.html.
  2. Сэнди Риза, Ури Лизерсон, Шон Оуэн, Джош Уиллс. Spark для профессионалов: современные паттерны обработки больших данных. O’Reilly. 2015/ пер. изд-во «Питер».
  3. Nick Pentreath.Machine Learning with Spark. Packt Publishing. 2015.
  4. Holden Karau, Andy Konwinski, Patrick Wendell, and Matei Zaharia. Learning Spark. O’Reilly. 2015.
  5. Big Data Now. O’Reilly Media. Edition 2015.

Ключевые слова: spark, mashine learning, apache.


Комментарии отсутствуют

Добавить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

               Copyright © Системный администратор

Яндекс.Метрика
Tel.: (499) 277-12-41
Fax: (499) 277-12-45
E-mail: sa@samag.ru