Использование Apache Spark в качестве бэкэнд для веб-приложения

У нас есть терабайты данных, хранящихся в HDFS, включая данные о клиентах и ​​поведенческую информацию. Бизнес-аналитики хотят выполнять нарезку и обработку этих данных с помощью фильтров.

Эти фильтры аналогичны фильтрам Spark RDD. Некоторые примеры фильтра: age > 18 and age < 35, date between 10-02-2015, 20-02-2015, gender=male, country in (UK, US, India) и т.д. Мы хотим интегрировать эту функцию фильтра в нашем веб-приложении на основе JSF (или Play).

Аналитики хотели бы поэкспериментировать, применяя/удаляя фильтры и проверяя, соответствует ли количество окончательных отфильтрованных данных. Это повторное упражнение, и максимальное количество людей, использующих это веб-приложение, может быть около 100.

Мы планируем использовать Scala в качестве языка программирования для реализации фильтров. Веб-приложение будет инициализировать один SparkContext при загрузке сервера, и каждый фильтр будет повторно использовать тот же SparkContext.

Является ли Spark хорошим для этого случая использования интерактивного запроса через веб-приложение. Кроме того, идея совместного использования одного SparkContext - это подход, основанный на работе? Другой альтернативой, которую мы имеем, является Apache Hive с движком Tez, использующим формат сжатого файла ORC, и запрос с использованием JDBC/Thrift. Является ли этот вариант лучше, чем Spark, для данной работы?

Ответ 1

Это не лучший вариант использования Spark, но это вполне возможно. Задержка может быть высокой, хотя.

Возможно, вы захотите проверить Spark Jobserver, он должен предложить большинство ваших необходимых функций. Вы также можете получить представление SQL по своим данным с помощью Spark JDBC Thrift.

В общем, я бы посоветовал использовать SparkSQL для этого, он уже обрабатывает много вещей, которые могут вас заинтересовать.

Другой вариант - использовать Databricks Cloud, но он еще не доступен для публики.

Ответ 2

Аналитики хотели бы поэкспериментировать, применяя/удаляя фильтры и проверяя, соответствует ли количество окончательных отфильтрованных данных. Это повторное упражнение, и максимальное количество людей, использующих это веб-приложение, может быть около 100.

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

Кроме того, идея совместного использования одного SparkContext - это подход к работе?

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

Ответ 3

Я хотел бы знать, какое решение вы выбрали в конце.

У меня есть два предложения:

  • следуя идее zeppelin @quickinsights, есть также интерактивный ноутбук jupyter, который уже сейчас установлен. Он сначала разработан для python, но может быть установлено специализированное ядро. Я пытался использовать toree пару месяцев назад. Базовая установка проста:

    pip install jupyter

    pip install toree

    jupyter install toree

    но в то время мне приходилось делать пару низкоуровневых твиков, чтобы заставить его работать (редактирование s.as /usr/local/share/jupyter/kernels/toree/kernel.json). Но это сработало, и я мог использовать искровой кластер из ноутбука scala. Проверьте этот тату, он соответствует тому, что у меня есть память.

  • Большинство (все?) docs по искре говорят о запуске приложения с помощью spark-submit или с использованием искровой оболочки для интерактивного использования (извините, но искры и оболочка scala настолько разочаровывают...). Они никогда не говорят об использовании искры в интерактивном приложении, например, в веб-приложении. Это возможно (я пытался), но есть некоторые проблемы, которые нужно проверить, например, обмениваться искробезопасным, как вы упомянули, а также некоторые проблемы управления зависимостями. Вы можете проверить два прототипа запуска-запуска, которые я использовал для использования искры в веб-приложении spring. Это в java, но я настоятельно рекомендую использовать scala. Я не работал достаточно долго, чтобы многому научиться. Однако я могу сказать, что это возможно, и он работает хорошо (проверено на 12 узлах кластера + приложение, работающее на границе node)

    Просто помните, что искровой драйвер, то есть где работает код с rdd, должен быть физически в том же кластере, что и искровые узлы: между водителем и рабочими существует много сообщений.

Ответ 4

Apache Livy обеспечивает программную, отказоустойчивую, многопользовательскую передачу Spark-заданий из веб-приложений/мобильных приложений (без необходимости использования Spark-клиента), Таким образом, несколько пользователей могут одновременно взаимодействовать с вашим Spark-кластером.

Ответ 5

У нас была похожая проблема в нашей компании. У нас ~ 2-2,5 ТБ данных в виде журналов. Нужно было провести базовую аналитику по этим данным.

Мы использовали следующее:

  • Apache Flink для потоковой передачи данных из источника в HDFS через Hive.

  • Настройте Zeppelin поверх HDFS.

  • Интерфейс SQL для соединения и соединения JDBC для подключения к HDFS через куст.

  • Spark для перевода пакетов данных в автономный режим

Вы можете использовать Flink + Hive-HDFS

Фильтры могут применяться через SQL (да! Все поддерживается в последних выпусках)

Zeppelin может автоматизировать задачу генерации отчетов, и у него есть интересные функции фильтров, которые не изменяют запросы SQL, используя функцию $ {sql-variable}.

Проверьте это. Я уверен, что вы найдете свой ответ :)

Благодарю.