Налаштовуємо зв'язку Apache Zeppelin + Oracle

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



Вступна частина

Вибухове зростання індустрії 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(), після чого можна робити запити до джерела даних.



Тепер все готово для виконання запиту з таблиці OBJ



На жаль, повноцінний доступ до даних Oracle в Apache Spark не працює. При спробі вибрати дані з типом даних NUMBER, отримуємо наступну помилку:



Ця проблема відома і описана в 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:



І пробуємо виконати тестовий запит:



Спробуємо візуалізацію даних з історії активних сесій:



Те ж, але з використанням динамічної форми для діапазону зміни своїх даних:



Можна також спробувати динамічно оновлювані в сторінки, наприклад статистику твітів облікового запису: Capture from the Tweets Twitter Gustavo Arjones

Вказуємо параметри програми для доступу до своєї стрічці:



Сам код, який творить магію:



Динамічно оновлювана статистика твітів з вашої стрічки в окремому вікні:



Можливі варіанти використання (додаткові):

— Генератор звітів для 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, команда розробників планує активний розвиток продукту і вихід на більш широку аудиторію.

Використовується:

Спасибі за увагу!

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.