|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Также используется метод коллаборативной фильтрации. Это метод построения прогнозов (рекомендаций), использующий известные предпочтения (оценки) группы пользователей для прогнозирования неизвестных предпочтений другого пользователя. Информация группы пользователей, такая как рейтинги, оценки, клики, покупки, применяется для предоставления рекомендаций другим, схожим по предпочтениям пользователям сайта. Работа с большим объемом данных предполагает распараллеливание их обработки и склейки результатов. Такой механизм был придуман в 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 Можно запустить spark-монитор: spark-class org.apache.spark.deploy.master.Master
Если посмотреть браузером http://localhost:8080, то увидим такую картинку (см. рис. 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):
Рисунок 4. Состав Spark Рисунок 5. Spark Streaming Немного о MLlibMLlib – это основная библиотека Spark, содержащая множество процедур, которые подходят для задач обработки данных, построения модели и по ней принятия решения:
Конечно, в рамки одной статьи не сможет уложиться такой обширный материал, предлагаю просмотреть следующие ресурсы [2-5]. Как это работает в реальных проектахНа рис. 6 изображена принципиальная схема работы в веб-проектах. Рисунок 6. Принципиальная архитектура использования Spark Проект можно разделить на две отдельные части: оnline-обработка и оffline-обработка. оffline-обработка происходит, как правило, раз в сутки, где на основании суточных и предыдущих данных строится статистическая или поведенческая модель. Online-часть – это быстрое определение по действиям пользователя его принадлежности к той или иной модели, и на основании этого производится решение о предоставлении ему той или иной услуги. Это может быть показ рекламного баннера, слота с информацией о похожем или сопутствующем товаре, предложение о приобретении кредитной карты. Все системы между собой очень похожи, отличие может быть лишь в использованных технологиях, например в качестве очереди может использоваться Apache Kafka или RabbitMQ, в качестве кэша для хранения сессий может использоваться Redis, Memcache. Для хранения данных может использоваться PgSQL или MySQL, Hbase или Cassandra, а в одном проекте, я знаю, используют ClickHouse (Open Source-разработка от Yandex) как быстрое масштабируемое хранилище для не реляционных данных. Естественно, у каждого проекта свои особенности, и нет «серебряной пули». На рис. 6 представлена лишь обобщенная схема, обкатанная на одном из проектов. У вас может получиться другая схема. Если тема понравилась, пишите и присылайте пожелания и вопросы в редакцию или лично мне. В следующих статьях я смогу осветить более полно ту или иную часть этой обширной темы. Если у вас есть опыт в этой области, поделитесь им, попробуйте себя в качестве автора.
Ключевые слова: spark, mashine learning, apache. Комментарии отсутствуют
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|