Добавляем в веб-проект аналитику и интеллект на базе Apache Spark::Журнал СА 1-2.2018
www.samag.ru
     
Поиск   
              
 www.samag.ru    Web  0 товаров , сумма 0 руб.
E-mail
Пароль  
 Запомнить меня
Регистрация | Забыли пароль?
Журнал "Системный администратор"
Журнал «БИТ»
Подписка
Архив номеров
Где купить
Наука и технологии
Авторам
Рекламодателям
Контакты
   

  Опросы
  Статьи

Дата-центры  

Дата-центры: есть ли опасность утечки данных?

Российские компании уже несколько лет испытывают дефицит вычислительных мощностей. Рост числа проектов,

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

Событие  

В банке рассола ждет сисадмина с полей фрактал-кукумбер

Читайте впечатления о слете ДСА 2024, рассказанные волонтером и участником слета

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

Организация бесперебойной работы  

Бесперебойная работа ИТ-инфраструктуры в режиме 24/7 Как обеспечить ее в нынешних условиях?

Год назад ИТ-компания «Крок» провела исследование «Ключевые тренды сервисного рынка 2023». Результаты

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

Книжная полка  

Читайте и познавайте мир технологий!

Издательство «БХВ» продолжает радовать выпуском интересных и полезных, к тому же прекрасно

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

СУБД PostgreSQL  

СУБД Postgres Pro

Сертификация по новым требованиям ФСТЭК и роль администратора без доступа к данным

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

Критическая инфраструктура  

КИИ для оператора связи. Готовы ли компании к повышению уровня кибербезопасности?

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

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

Архитектура ПО  

Архитектурные метрики. Качество архитектуры и способность системы к эволюционированию

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

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

Как хорошо вы это знаете  

Что вам известно о разработках компании ARinteg?

Компания ARinteg (ООО «АРинтег») – системный интегратор на российском рынке ИБ –

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

Графические редакторы  

Рисование абстрактных гор в стиле Paper Cut

Векторный графический редактор Inkscape – яркий представитель той прослойки open source, с

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

День сисадмина  

Учите матчасть! Или как стать системным администратором

Лето – время не только отпусков, но и хорошая возможность определиться с профессией

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

День сисадмина  

Живой айтишник – это всегда движение. Остановка смерти подобна

Наши авторы рассказывают о своем опыте и дают советы начинающим системным администраторам.

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

Виртуализация  

Рынок решений для виртуализации

По данным «Обзора российского рынка инфраструктурного ПО и перспектив его развития», сделанного

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

Книжная полка  

Как стать креативным и востребованным

Издательский дом «Питер» предлагает новинки компьютерной литературы, а также книги по бизнесу

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

Книжная полка  

От создания сайтов до разработки и реализации API

В издательстве «БХВ» недавно вышли книги, которые будут интересны системным администраторам, создателям

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

1001 и 1 книга  
19.03.2018г.
Просмотров: 6225
Комментарии: 0
Машинное обучение с использованием библиотеки Н2О

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

12.03.2018г.
Просмотров: 6931
Комментарии: 0
Особенности киберпреступлений в России: инструменты нападения и защита информации

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

12.03.2018г.
Просмотров: 4212
Комментарии: 0
Глубокое обучение с точки зрения практика

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

12.03.2018г.
Просмотров: 3004
Комментарии: 0
Изучаем pandas

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

12.03.2018г.
Просмотров: 3806
Комментарии: 0
Программирование на языке Rust (Цветное издание)

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

19.12.2017г.
Просмотров: 3818
Комментарии: 0
Глубокое обучение

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

19.12.2017г.
Просмотров: 6315
Комментарии: 0
Анализ социальных медиа на Python

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

19.12.2017г.
Просмотров: 3166
Комментарии: 0
Основы блокчейна

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

19.12.2017г.
Просмотров: 3459
Комментарии: 0
Java 9. Полный обзор нововведений

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

16.02.2017г.
Просмотров: 7275
Комментарии: 0
Опоздавших не бывает, или книга о стеке

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

17.05.2016г.
Просмотров: 10644
Комментарии: 0
Теория вычислений для программистов

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

30.03.2015г.
Просмотров: 12363
Комментарии: 0
От математики к обобщенному программированию

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

18.02.2014г.
Просмотров: 13998
Комментарии: 0
Рецензия на книгу «Читаем Тьюринга»

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

13.02.2014г.
Просмотров: 9123
Комментарии: 0
Читайте, размышляйте, действуйте

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

12.02.2014г.
Просмотров: 7077
Комментарии: 0
Рисуем наши мысли

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

10.02.2014г.
Просмотров: 5386
Комментарии: 3
Страна в цифрах

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

18.12.2013г.
Просмотров: 4613
Комментарии: 0
Большие данные меняют нашу жизнь

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

18.12.2013г.
Просмотров: 3426
Комментарии: 0
Компьютерные технологии – корень зла для точки роста

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

04.12.2013г.
Просмотров: 3154
Комментарии: 0
Паутина в облаках

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

03.12.2013г.
Просмотров: 3399
Комментарии: 0
Рецензия на книгу «MongoDB в действии»

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

02.12.2013г.
Просмотров: 3024
Комментарии: 0
Не думай о минутах свысока

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

Друзья сайта  

 Добавляем в веб-проект аналитику и интеллект на базе 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-45
E-mail: sa@samag.ru