前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >将R与Cloudera Impala集成,以实现Hadoop上的实时查询

将R与Cloudera Impala集成,以实现Hadoop上的实时查询

作者头像
Nikoace
发布2018-05-29 15:52:32
4.3K0
发布2018-05-29 15:52:32

介绍

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做为样例),我们需要执行以下命令:

代码语言:javascript
复制
# 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,您需要执行以下命令:

代码语言:javascript
复制
$ 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软件包:

代码语言:javascript
复制
$ 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驱动程序,需要在下载驱动程序后运行以下命令:

代码语言:javascript
复制
$ yum --nogpgcheck localinstall ClouderaImpalaODBC-2.5.5.1005-1.el6.x86_64.rpm

Impala ODBC驱动程序需要正确配置几个文件(驱动程序包中嵌入了需要编辑并复制到正确目录的模板文档)。这两个关键配置文件分别是odbc.init和cloudera.impalaodbc.ini。

odbc.ini应该看起来像这样:

代码语言:javascript
复制
[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配置文件中,我们有以下设置:

代码语言:javascript
复制
#SimbaDN / unixODBC
ODBCInstLib = libodbcinst.so

另外,我们需要定义如下的环境变量:

代码语言:javascript
复制
$ 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命令行工具执行此操作:

代码语言:javascript
复制
$ R
>install.packages("RODBC")

使用R和Impala分析Hadoop数据集

现在我们准备开始使用R和Impala分析我们的Hadoop数据集。我们将演示他们如何使用股票价格信息一起工作。您可以从http://finance.yahoo.com(股票代码:GOOG)下载Google股票价格。下载表格文件后,您需要从文件中删除第一行(标题),然后使用Hadoop文件系统shell(HDFS Shell)将其加载到HDFS中。

代码语言:javascript
复制
$ 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‘语句来显示股票表中的几行。

代码语言:javascript
复制
$ 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执行以下命令:

代码语言:javascript
复制
$ 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文件中设置以下环境变量:

代码语言:javascript
复制
$ 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命令如下所示:

代码语言:javascript
复制
> 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)进行集成,为数据分析师高效处理海量数据集提供了一个很好的组合,并且它还可以支持图形化表示结果集。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 介绍
  • 使用R和Impala分析Hadoop数据集
  • 结论
相关产品与服务
大数据
全栈大数据产品,面向海量数据场景,帮助您 “智理无数,心中有数”!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档