Cloudera Impala支持Hadoop数据集上的低延迟交互式查询,这些数据集可以存储在Hadoop分布式文件系统(HDFS)或Hadoop的分布式NoSQL数据库HBase中。Impala的想法是使用Hadoop作为存储引擎,但远离MapReduce算法。相反,Impala使用分布式查询,这是一种从大规模并行处理数据库继承而来的概念。因此,Impala支持类SQL语言的查询(与Apache Hive相同),但可以比Hive更快地执行查询,将它们转换为MapReduce。您可以在之前的文章中找到有关Impala的更多详细信息。
R语言是最受欢迎的开源统计计算和图形软件之一。它可以处理各种数据源,从逗号分隔的文件(csv)到由URL引用到关系数据库的网页内容到NoSQL(例如MongoDB或Cassandra)以及Hadoop。
由于通用的Impala ODBC驱动程序,R也可以与Impala集成。该解决方案将提供在Hadoop数据集上运行的快速交互式查询,然后可以在R内进一步处理或使数据可视化。
Cloudera Impala ODBC驱动程序
如下图所示,Impala运行在存储在HDFS或HBase中的数据集的顶部,用户可以通过多种方式与它交互。
一种选择是使用作为impala软件包一部分的impala-shell,并提供命令行界面。其他选择是使用Hue(Cloduera的Hadoop用户体验产品),这是一个基于Web浏览器的UI,提供查询编辑器以及能够针对Pig,Hive或Impala运行查询的其他功能。第三种选择是使用ODBC驱动程序并连接一些着名的流行BI工具Impala。
Cloudera为一些最受欢迎的领先分析和数据可视化工具(如Tableau,QlikView或Microstrategy)提供接口。它还可以提供通用的ODBC驱动程序,可用于连接各种工具。在这篇文章中,我们将会使用ODBC来演示如何集成R和Cloudera Impala。
安装R,RStudio服务器,Impala ODBC和RODBC
这篇文章介绍了 Impala安装。要在Linux环境中安装R(使用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有一个桌面版本以及一个基于Web浏览器的替代品,称为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驱动程序可以正常工作,并且可以在R中安装RODBC软件包(它将在本文后面展示),您还需要安装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
最后一步是为R安装RODBC软件包。您可以使用R命令行工具执行此操作:
$ R
>install.packages("RODBC")
现在我们准备开始使用R和Impala分析我们的Hadoop数据集。我们将演示他们如何使用股票价格信息一起工作。您可以从http://finance.yahoo.com(股票代码:GOOG)下载Google股票价格。下载表格文件后,您需要从文件中删除第一行(标题),然后使用Hadoop文件系统shell(HDFS Shell)将其加载到HDFS中。
$ 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 Shell来创建我们的表。Impala有类SQL的查询语言,所以您可以使用熟悉的’CREATE TABLE‘命令。外部命令标明物理数据文件不在Impala中进行管理; 即使删除表格,这些文件也会保存在HDFS目录中。
在创建表之后,我们可以运行’SHOW TABLES‘语句来验证表可以从Impala访问。我们也可以从impala-shell 运行一条’SELECT‘语句来显示股票表中的几行。
$ 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命令行工具。为了在R上运行相同的Impala SELECT语句,我们需要从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,它可以作为桌面应用程序或通过Web浏览器运行。如果是第二个选项,可以通过http://hostname:8787访问RStudio,并且可以使用您的Linux用户名和密码进行登录。
在从浏览器访问RStudio之前,您还需要在您的主目录中的.Renviron文件中设置以下环境变量:
$ cat .Renviron
LD_LIBRARY_PATH=/usr/local/lib:/opt/cloudera/impalaodbc/lib/64
ODBCINI=/etc/odbc.ini
SIMBAINI=/etc/cloudera.impalaodbc.ini
现在您可以登录到RStudio并执行与我们在命令行工具中相同的R命令,请参见下图。
您还可以绘制数据集的图形表示,如下所示。该图显示了2013年Google股票价格的线形图:
生成此图的实际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接口,这使它可以与许多流行的商业智能工具和统计软件(如R. Together R和Impala)进行集成,为数据分析师高效处理海量数据集提供了一个很好的组合,并且它还可以支持图形化表示结果集。