Статьи

Интеграция R с Cloudera Impala для запросов в реальном времени на Hadoop

Вступление

Cloudera Impala поддерживает интерактивные запросы с малой задержкой к наборам данных Hadoop, которые хранятся либо в распределенной файловой системе Hadoop (HDFS), либо в HBase, распределенной базе данных NoSQL для Hadoop. Идея Impala — использовать Hadoop в качестве движка хранения, но отойти от алгоритмов MapReduce. Вместо этого Impala использует распределенные запросы — концепцию, унаследованную от массивных баз данных параллельной обработки. В результате Impala поддерживает SQL-подобный язык запросов (так же, как Apache Hive), но может выполнять запросы в 10-100 раз быстрее, чем Hive, который преобразует их в MapReduce. Вы можете найти более подробную информацию о Impala в одном из предыдущих сообщений .

является одним из самых популярных программ с открытым исходным кодом для статистических вычислений и графического программного обеспечения. Он может работать с различными источниками данных, начиная с файлов, разделенных запятыми, и заканчивая веб-содержимым, на которое ссылаются URL, в реляционных базах данных для NoSQL (например, MongoDB или Cassandra) и  Hadoop .

Благодаря универсальному драйверу Impala ODBC, R также может быть интегрирован с Impala. Решение обеспечит быстрые интерактивные запросы, выполняемые поверх наборов данных Hadoop, и затем данные могут быть дополнительно обработаны или визуализированы в R.

Драйверы для Cloudera Impala ODBC

Как видно на диаграмме ниже, Impala работает в верхней части набора данных, хранящегося в HDFS или HBase, и пользователи могут взаимодействовать с ним несколькими способами.

Импала-архитектура

Один из вариантов — использовать impala-shell, который является частью пакета impala и предоставляет интерфейс командной строки. Другой вариант — использовать Hue (продукт Cloduera Hadoop User Experience), который представляет собой пользовательский интерфейс на основе веб-браузера, предлагающий редактор запросов среди других функций, способных выполнять запросы к Pig, Hive или Impala. Третьим вариантом является использование драйвера ODBC и подключение некоторые из известных популярных инструментов BI для Impala.

Cloudera предоставляет соединители для некоторых из самых популярных ведущих инструментов аналитики и визуализации данных, таких как Tableau, QlikView или Microstrategy. Он также может предложить общий драйвер ODBC, который можно использовать для подключения различных инструментов. Это программный компонент, который мы будем использовать в посте, чтобы продемонстрировать, как интегрировать R с Cloudera Impala.

Установите R, RStudio Server, Impala ODBC и RODBC

Установка импалы была освещена в этом посте . Чтобы установить R в среде Linux (сейчас будет использоваться Fedora 19), нам нужно выполнить следующие команды:

# Install EPEL package - EPEL stands for Extra package for Enterprise Linux
$ sudo rpm -ivh http://mirror.chpc.utah.edu/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm

$ sudo yum install R
================================================================================
 Package                Arch           Version               Repository    Size
================================================================================
Updating:
 R                      x86_64         3.0.2-1.el6           epel          20 k
Updating for dependencies:
 R-core                 x86_64         3.0.2-1.el6           epel          46 M
 R-core-devel           x86_64         3.0.2-1.el6           epel          90 k
 R-devel                x86_64         3.0.2-1.el6           epel          19 k
 R-java                 x86_64         3.0.2-1.el6           epel          20 k
 R-java-devel           x86_64         3.0.2-1.el6           epel          20 k
 libRmath               x86_64         3.0.2-1.el6           epel         116 k
 libRmath-devel         x86_64         3.0.2-1.el6           epel          24 k

Transaction Summary
================================================================================
Upgrade       8 Package(s)

R поставляется с интерпретатором командной строки, но если вы хотите иметь более удобную среду разработки, вы можете предпочесть использовать RStudio . RStudio имеет настольную версию, а также альтернативу на базе веб-браузера RStudio Server. Их можно бесплатно скачать с сайта RStudio . Мы будем использовать RStudio Server в этом посте.

Чтобы установить RStudio Server, вам необходимо выполнить следующую команду:

$ sudo yum install --nogpgcheck rstudio-server-0.97.551-x86_64.rpm

================================================================================
 Package           Arch   Version         Repository                       Size
================================================================================
Installing:
 rstudio-server    x86_64 0.97.551-1      /rstudio-server-0.97.551-x86_64  96 M
...

Transaction Summary
===================================================================
Install       3 Package(s)

Чтобы убедиться, что драйвер Impala ODBC будет работать и пакет RODBC может быть установлен в R (как будет показано далее в этом посте), вам также необходимо установить пакеты unixODBC и unixODBC-devel:

$ sudo yum install unixODBC
$ sudo yum install unixODBC-devel

Наконец, вам необходимо установить драйвер Cloudera Impala ODBC. Вы можете скачать его с веб-сайта Cloudera , на момент написания поста последняя версия 2.5 (имя файла драйвера ClouderaImpalaODBC-2.5.5.1005-1.el6.x86_64.rpm). Чтобы установить драйвер Impala ODBC, необходимо выполнить следующую команду после загрузки драйвера:

$ yum --nogpgcheck localinstall ClouderaImpalaODBC-2.5.5.1005-1.el6.x86_64.rpm

Драйвер Impala ODBC требует правильной настройки нескольких файлов (в пакет драйвера встроены файлы шаблонов, которые необходимо отредактировать и скопировать в правильный каталог). Два ключевых файла конфигурации: odbc.init и cloudera.impalaodbc.ini.

odbc.ini должен выглядеть примерно так:

[Impala]
# Description: DSN Description.
# This key is not necessary and is only to give a description of the data source.
Description=Cloudera ODBC Driver for Impala (64-bit) DSN

# Driver: The location where the ODBC driver is installed to.
Driver=/opt/cloudera/impalaodbc/lib/64/libclouderaimpalaodbc64.so

# Values for HOST, PORT, KrbFQDN, and KrbServiceName should be set here.
# They can also be specified on the connection string.
HOST=localhost
PORT=21050
Database=default

В файле конфигурации cloudera.impalaodbc.ini у нас есть следующие настройки:

# SimbaDN / unixODBC
ODBCInstLib=libodbcinst.so

Кроме того, нам нужно определить переменные среды следующим образом:

$ export LD_LIBRARY_PATH=/usr/local/lib:/opt/cloudera/impalaodbc/lib/64
$ export ODBCINI=/etc/odbc.ini
$ export SIMBADN=/etc/cloudera.impalaodbc.ini

Последний шаг — установить пакет RODBC для R. Вы можете сделать это с помощью инструмента командной строки R:

$ R
>install.packages("RODBC")

Анализ наборов данных Hadoop с помощью R и Impala

Теперь мы готовы начать анализ нашего набора данных Hadoop с помощью R и Impala. Мы покажем, как они работают вместе, используя информацию о цене акций. Вы можете скачать, например, цены на акции Google с http://finance.yahoo.com (символ: GOOG). После загрузки электронной таблицы необходимо удалить первую строку (заголовок) из файла, а затем загрузить его в HDFS с помощью оболочки файловой системы Hadoop.

$ hadoop fs -mkdir /user/cloudera/stock
$ hadoop fs -put google.csv /user/cloudera/stock
$ hadoop fs -ls /user/cloudera/stock
Found 1 items
-rw-r--r--   3 cloudera cloudera     126379 2013-11-22 12:22 /user/cloudera/stock/google.csv

Теперь мы можем войти в оболочку Impala для создания нашей таблицы. Impala имеет SQL-подобный язык запросов, поэтому вы можете использовать знакомую команду CREATE TABLE . Внешнее положение указывает на то, что физические файлы данных управляются за пределами Impala; даже если вы удалите таблицу, файлы будут храниться в каталоге HDFS.

После создания таблицы мы можем запустить инструкцию SHOW TABLES, чтобы проверить, доступна ли таблица из Impala. Мы также можем запустить оператор SELECT из impala-shell, чтобы отобразить пару строк из таблицы запасов.

$ impala-shell
[localhost.localdomain:21000] > create external table stock (stock_date string, stock_open float, stock_high float, stock_low float, stock_close_ float, stock_volume int, stock_adjclose float) row format delimited fields terminated by ',' lines terminated by '\n' location '/user/cloudera/stock/';
...
[localhost.localdomain:21000] > show tables;
Query: show tables

+-------+
| name  |
+-------+
| stock |
+-------+
Returned 1 row(s) in 0.01s
[localhost.localdomain:21000] > select * from stock limit 3;
...
+------------+-------------------+-------------------+-------------------+-------------------+--------------+-------------------+
| stock_date | stock_open        | stock_high        | stock_low         | stock_close_      | stock_volume | stock_adjclose    |
+------------+-------------------+-------------------+-------------------+-------------------+--------------+-------------------+
| 2013-11-21 | 1027              | 1038.31005859375  | 1026              | 1034.069946289062 | 1091800      | 1034.069946289062 |
| 2013-11-20 | 1029.949951171875 | 1033.359985351562 | 1020.359985351562 | 1022.309997558594 | 963700       | 1022.309997558594 |
| 2013-11-19 | 1031.719970703125 | 1034.75           | 1023.049987792969 | 1025.199951171875 | 1116400      | 1025.199951171875 |
+------------+-------------------+-------------------+-------------------+-------------------+--------------+-------------------+
Returned 3 row(s) in 0.37s

Следующим шагом является запуск интерпретатора командной строки R. Чтобы запустить тот же оператор Impala SELECT из R, нам нужно выполнить следующие команды из R:

$ R
> library("RODBC");
> conn <- odbcConnect("Impala")
> result <- sqlQuery(conn, "select * from stock limit 3")
> result
  stock_date stock_open stock_high stock_low stock_close_ stock_volume
1 2013-11-21    1027.00    1038.31   1026.00      1034.07      1091800
2 2013-11-20    1029.95    1033.36   1020.36      1022.31       963700
3 2013-11-19    1031.72    1034.75   1023.05      1025.20      1116400
  stock_adjclose
1        1034.07
2        1022.31
3        1025.20

Как упоминалось выше, если вы хотите использовать более удобную среду разработки R с различными расширенными функциями, такими как отладка, управление пакетами, навигация по файловой системе и т. Д., Тогда RStudio — отличный выбор. Его можно запустить как настольное приложение или через веб-браузер, если вы установили RStudio Server. В случае второго варианта доступ к RStudio можно получить через http: // hostname: 8787, и вы можете войти в систему, используя свое имя пользователя и пароль в Linux.

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

$ cat .Renviron 
LD_LIBRARY_PATH=/usr/local/lib:/opt/cloudera/impalaodbc/lib/64
ODBCINI=/etc/odbc.ini
SIMBAINI=/etc/cloudera.impalaodbc.ini

Теперь вы можете войти в RStudio и выполнить те же R-команды, которые мы показали в интерпретаторе командной строки, см. Рисунок ниже.

Импала-R-2

Вы также можете построить графическое представление вашего набора данных, как показано ниже. Диаграмма иллюстрирует график цен на акции Google в 2013 году:

Импала-R-1

Фактические команды R для генерации этого графика следующие:

> library("RODBC");
> conn <- odbcConnect("Impala")
> result <- sqlQuery(conn, "select stock_date, stock_close from stock where stock_date > '2013' order by stock_date asc limit 300")
> result
    stock_date stock_close
1   2013-01-02      723.25
2   2013-01-03      723.67
3   2013-01-04      737.97
...

> plot(result$stock_close, lwd="1", xlab="Days", ylab="Price (USD)")
> lines(result$stock_close, lwd="2")
> axis(1, result$stock_date, labels=result$stock_date)

Вывод

Cloudera Impala — это потрясающая новая технология, обеспечивающая интерактивные запросы в реальном времени в среде Hadoop. Он поддерживает соединители ODBC, что позволяет интегрировать его со многими популярными инструментами BI и статистическим программным обеспечением, такими как R. Вместе R и Impala обеспечивают отличную комбинацию для аналитика данных для эффективной обработки массивных наборов данных, а также могут поддерживать графическое представление наборы результатов.