2013-05-10 118 views
2

我在运行在AWS EMR中的hadoop集群上安装了hive 0.8。通过Python客户端的Hive查询

我想做一些数据QA,它涉及到运行一个蜂巢式查询,并将结果提取到python中,其中包含更多的逻辑。

目前,这是通过发送一个配置单元查询作为jobflow步骤,将这些结果转储到主节点上的本地存储,SCP将这些结果送到本地机器,然后用python加载文件并解析结果。总而言之,不是一个非常有趣的过程。

理想情况下,我能做到这一点的类似的方式:

conn = hive.connect(ip, port, user, pw) 
cursor = conn.cursor() 
cursor.execute(query) 
rs = cursor.fetchall() 

看来,这是假想可能。 Hive说它支持它here。还有另外一个SO question,看起来好像在做我想做的事情。

但是,我无法找到文档。特别是,我还没有弄清楚在哪些地方获得这些例子中使用的包装。如果有人能够提供关于如何让python客户端工作的详细指示信息,将会非常有帮助,但如果没有这样做,那么知道在哪里获得这些包会有所帮助。

回答

0

如果你从源代码编译的模块将在这里位于蜂巢(相对于蜂房trunk目录):

./build/dist/lib/py

您应该能够访问如果在PYTHONPATH环境变量中包含该路径,或者使用sys模块将该路径添加到脚本中的python路径中,则为模块。

另请注意,不再有名为'hive'的模块。在示例代码中,您链接的“配置单元”应该替换为“hive_service”。

1

看起来像hive_utils包有你在找什么。查看pypi页面,您可以通过以下方式运行查询:

query = """ 
    SELECT country, count(1) AS cnt 
    FROM User 
    GROUP BY country 
""" 
hive_client = hive_utils.HiveClient(
    server=config['HOST'], 
    port=config['PORT'], 
    db=config['NAME'], 
) 
for row in hive_client.execute(query): 
    print '%s: %s' % (row['country'], row['cnt']) 

安装时还应该安装所需的节俭包。