Вступление
Cloudera Impala поддерживает интерактивные запросы с малой задержкой к наборам данных Hadoop, которые хранятся либо в распределенной файловой системе Hadoop (HDFS), либо в HBase, распределенной базе данных NoSQL для Hadoop. Идея Impala — использовать Hadoop в качестве движка хранения, но отойти от алгоритмов MapReduce. Вместо этого Impala использует распределенные запросы — концепцию, унаследованную от массивных баз данных параллельной обработки. В результате Impala поддерживает SQL-подобный язык запросов (так же, как Apache Hive), но может выполнять запросы в 10-100 раз быстрее, чем Hive, который преобразует их в MapReduce. Вы можете найти более подробную информацию о Impala в одном из предыдущих сообщений .
R является одним из самых популярных программ с открытым исходным кодом для статистических вычислений и графического программного обеспечения. Он может работать с различными источниками данных, начиная с файлов, разделенных запятыми, и заканчивая веб-содержимым, на которое ссылаются 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-команды, которые мы показали в интерпретаторе командной строки, см. Рисунок ниже.
Вы также можете построить графическое представление вашего набора данных, как показано ниже. Диаграмма иллюстрирует график цен на акции Google в 2013 году:
Фактические команды 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 обеспечивают отличную комбинацию для аналитика данных для эффективной обработки массивных наборов данных, а также могут поддерживать графическое представление наборы результатов.