一、背景介绍
Impala是Cloudera公司开发的基于Hadoop平台的MPP分布式查询引擎,由于查询过程中不启用MapReduce任务,而是直接在内存中进行计算,所以查询性能要比Hive高出几十倍。
在舆情系统中,我们使用Impala来处理大量的电商平台商品、评论等数据,为舆情系统提供了强大的计算能力。
下面我们来一起看一下舆情系统的程序是如何访问Impala的。
二、Impala的Python客户端Impyla
舆情系统是基于Python语言开发的,Cloudera公司官方提供了基于Python语言的Impala客户端:Impyla(https://github.com/cloudera/impyla)。
Impyla具有轻量化、易安装、标准化等特点,通过与HiveServer2服务连接来访问Impala和Hive数据库,支持Kerberos、LDAP和SSL。
三、安装Impyla
Impyla支持通过pip进行安装,在生产环境中使用时,建议首先通过virtualenvwrapper来管理不同环境中的依赖包版本(可参考:http://ae.yyuap.com/pages/viewpage.action?pageId=920474)。
Impyla的安装命令如下:
pip install impyla
也可以通过源码方式进行安装,具体命令如下:
git clone https://github.com/cloudera/impyla.git
cd impyla
python setup.py install
四、使用Impyla查询数据
Impyla的使用方式与连接MySQL或SQLite等数据库的操作方式类似,下面看一下示例程序:
from impala.dbapi import connect
conn = connect(host=’ip_address’, port=21050)
cursor = conn.cursor()
cursor.execute('SELECT * FROM mytable LIMIT 100')
results = cursor.fetchall()
在上面这段程序中,首先在程序中载入Impyla的对象,之后建立与Impala的连接,使用创建连接后得到的对象执行指定的SQL语句,最后调用fetchall()方法来获取全部数据,以便做后续处理。
五、数据格式转换
同时,Impyla还支持将查询结果转换为pandas的DataFrame格式,pandas是基于Python语言的数据分析和科学计算工具,数据转换成DataFrame格式后可以方便的用于跟matplotlib、scikit-learn等数据分析工具的集成。
示例如下:
from impala.util import as_pandas
df = as_pandas(cur)