Настраиваем связку Apache Zeppelin + Oracle

Давно ищу удобный инструмент для выполнения ad hoc SQL-запросов в БД Oracle, с возможностью быстрого построения различных типов графиков на полученных данных. Все, что может облегчить оперативное создание отчетов, как говорится «на лету». Совсем недавно наткнулся на вот такой инструмент как Apache Zeppelin. Короткий обзор возможностей в документации на сайте и демо-видео показал, что это штука достаточно интересная и имеет смысл более плотно исследовать ее и настроить доступ из Apache Zeppelin к СУБД Oracle.

8808d9a5477f42a78d03e357988aea60.png

Вводная часть


Взрывной рост индустрии Big Data, Machine Learing потребовал новых инструментов и подходов для работы с большими массивами данных. Появились такие экосистемы и программные продукты Big Data как Hadoop, Spark, Storm, Elasticsearch и др… Десятки различных фрэймворков для машинного обучения с предустановленными алгоритмами. Ведущие университеты мира создают множество бесплатных курсов по машинному обучению и работе с Big Data.

Появились также и инструменты, которые решают задачи по визуализации данных. Хотел бы выделить два инструмента: это экосистема языка программирования R, созданная для статистической обработки данных и работы с графикой. И Weka – набор средств визуализации и алгоритмов для интеллектуального анализа данных и решения задач прогнозирования. Кстати, разработки обоих инструментов/языков программирования стартовали в 1993 году и оба из Новой Зеландии :). Ну и конечно, это множество других средств визуализации, которые практически каждая команда, предлагающая уже конечный продукт, делает сама под себя с использованием популярных фрэймворков для визуализации данных: D3.js, JfreeChart, HighCharts.js и другие.

Отдельно хотелось бы выделить направление интерактивных оболочек для работы с большими данным и машинного обучения. Самый известный и популярный инструмент — это продукт Python-сообщества – IPython. Судя по количеству упоминаний (сам я с ним плотно не работал), является стандартом де-факто в среде специалистов по машинному обучению. С 2014 создатель IPython начал новый проект Jupyter Notebook, цель которого создать полностью независимый от языка программирования интерактивный shell. Также, в этом направлении активно работают компании DataBricks, Beaker, которые развивают направление интерактивных shell инструментов для Data Scientist с упором на облака. Кроме Jupyter Notebook, есть и другие аналогичные инструменты, например Spark Notebook.

Итак, Apache Zeppelin – это один из представителей направления интерактивных оболочек для работы с Big Data и машинного обучения.

Работа над созданием Zeppelin была начата в недрах южнокорейской софтверной компании NFLabs в 2012-2013 годах (подробнее история создания от разработчика системы здесь).

Изначально цель была создать пользовательский интерфейс для разнообразных систем SQL over Hadoop, таких как Hive, Presto и Shark etc. Потом стало понятно, что существует потребность в создании более мощного инструмента для Data Scientist для совместной работы на больших проектах, не ограниченных только SQL. Поэтому была реализована встроенная интеграция с Apache Spark фрэймворком и возможность совместной работы в Notebook через WEB.

Возможности Apache Zeppelin:


  • WEB-доступ к интерактивной консоли, SQL доступ к данным, Scala, Java итд.;
  • концепция хранения результатов анализа и визуализаций в виде записной книжки (Notebook);
  • визуализация данных с помощью различных типов графиков;
  • возможности по созданию сводных таблиц (Pivot);
  • динамическая установка параметров запросов в специальных формах (Dynamic Form);
  • возможности по подключению других окружений исполнения, SQL-backend с помощью Interpreter API;


Установка Apache Zeppelin


Системные требования и инструкция по установке Apache Zeppelin доступны на странице проекта на GitHub или на сайте проекта.

Можно настроить окружение Apache Zeppelin и с помощью Vagrant на своей клиентской машине:
1. github.com/arjones/vagrant-spark-zeppelin
2. github.com/felixcheung/vagrant-projects

или Docker:
hub.docker.com/r/internavenue/centos-zeppelin/~/dockerfile

В своей работе я использовал Vagrant + ручную компиляцию из исходных кодов. Вы можете выбрать любой из предложенных способов.

Настройка связки Apache Zeppelin + Oracle


Качаем JDBC драйвер от Oracle (например ojdbc7.jar) по ссылке (требуется регистрация на сайте) и выкладываем драйвер по путям CLASSPATH. В случае Apache Zeppelin выкладываем файл драйвера в корневую директорию (/usr/zeppelin). Для Apache Spark – в SPARK_HOME/lib (теоретически загружать jdbc драйвер можно динамически, с использованием Dependency loader, но добиться видимости классов в SparkContext у меня не получилось).

Для работы с ojdbc7.jar возможно потребуется настроить Timezone при старте приложения. Если при попытке получить доступ к данным будет получена ошибка вида: ORA-01882: timezone region not found., то в файле настроек Apache Zeppelin /usr/zeppelin/conf/zeppelin-env.sh необходимо будет добавить значение своей, установленной на сервере, timezone. Например так: ZEPPELIN_JAVA_OPTS -Duser.timezone=UTC

Попытка № 1


Первая попытка получить доступ к Oracle была предпринята из окружения Apache Spark. С версии Spark 1.3 работу с БД рекомендуется вести через Spark SQL data source API. Указываем url доступа к БД, таблицу/набор данных и jdbc драйвер для соединения к БД. Проверить какие поля доступны для выборки, и загрузить набор данных как таблицу в память в окружении SQLContext с помощью процедуры registerTempTable(), после чего можно делать запросы к источнику данных.

67fa5bf0d60b477cb27ea4951df35d4c.png

Теперь все готово для выполнения запроса по таблице OBJ

0589feb4cf9a4d6ebb562aa65709e510.png

К сожалению, полноценный доступ к данным Oracle в Apache Spark не работает. При попытке выбрать данные с типом данных NUMBER, получаем следующую ошибку:

172949c9eaa9420e90ed1697c1708a78.png

Данная проблема известна и описана в JIRA проекта Apache Spark: Spark sql jdbc fails for Oracle NUMBER type columns

Пока решения нет, соответственно полноценно, напрямую, работать с данными СУБД Oracle в Apache Spark непросто. Как обходное решение, в СУБД Oracle можно создавать представления, в которых делать конвертацию NUMBER to VARCHAR2 и использовать их для работы из Apache Spark. Но это дополнительные сложности с администрированием, выдачей прав etc.

Попытка № 2


Попробуем получить доступ к СУБД Oracle напрямую, не через Spark. Разработчики придумали систему расширений для этих целей — называется Interpreters. Отдельного плагина для БД Oracle еще нет. Но мы попробуем воспользоваться готовым для Postgresql – ведь это JDBC. Делаем необходимые правки в интерфейсе Zeppelin на закладке Interpreters для psql:

0ed9497eb60f4fcfadbf39bd098dafe8.png

И пробуем выполнить тестовый запрос:

7f9f8fe04d424abcbf7928c51877077a.png

Попробуем визуализацию данных из истории активных сессий:

82137e6b794840dc9f8635543bd247f6.png

То же, но с использованием динамической формы для изменения диапазона выбираемых данных:

e6044a171c754bbfa9534311a3ff704a.png

Можно также попробовать динамически обновляемые в страницы, например статистику твитов аккаунта: Capture Tweets from the Twitter от Gustavo Arjones

Указываем параметры приложения для доступа к своей ленте:

667db302fc8f4e48adbb7d134a2fafac.png

Сам код, который творит магию:

2032ce88b15248d6b2fa16db3c67caf3.png

Динамически обновляемая статистика твитов из вашей ленты в отдельном окне:

f7f9d4aa04bf468799ea78d24db9e283.gif

Возможные варианты использования (дополнительные):


— Генератор отчетов для ad hoc запросов;
— Создание гибко настраиваемых окружений для несложных систем мониторинга и наблюдения за ключевыми показателями ИТ-систем.

Недостатки:


— Пока слабо развито сообщество разработчиков. Количество пишуших код в Apache Zeppelin по сравнению с Jupiter Notebook;
— Набор типов графиков пока маловат, у конкурентов побогаче будет;
— Есть небольшие баги, которых немного, но они не мешают полноценно, без нервотрепки, использовать основной функционал. «It just works».

Apache Zeppelin – интерактивная оболочка для выполнения запросов над Big Data, работы с Machine Learning, последующей визуализации результатов и коллективной разработки.

В связи с ростом объемов данных, новых задач по поиску новых знаний требуют для исследователей удобного инструмента (окружения) для своей работы. Ниша интерактивных оболочек на данный момент одно из перспективных направлений: June 12, 2015, 8 New Big Data Projects To Watch, author: Alex Woodie. Мы наблюдаем интересную тенденцию – это появление гибридных программных комплексов, позволяющих упростить задачи подготовки и анализа больших данных, визуализации и совместной работы для Data Scientist. Удобный интерфейс для визуализации, который предоставляет Apache Zeppelin, также будет полезен администратором и разработчикам БД.

Судя по активности разработчиков по передаче кода в открытый доступ под крыло Apache Foundation в рамках программы Apache Incubator, созданию специализированного портала ZeppelinHub для выкладывания подготовленных Notebook, команда разработчиков планирует активное развитие продукта и выход на более широкую аудиторию.

Используемое ПО:


Спасибо за внимание!

© Habrahabr.ru