【问题标题】:Hive queries via Python client通过 Python 客户端进行 Hive 查询
【发布时间】:2013-05-05 17:02:38
【问题描述】:

我在 AWS EMR 中运行的 hadoop 集群上安装了 hive 0.8。

我正在尝试进行一些数据 QA,其中涉及运行配置单元查询并将结果提取到包含更多逻辑的 python 中。

目前,这是通过将 hive 查询作为工作流步骤发送,将这些结果转储到主节点上的本地存储,将这些结果 SCP-ing 到我的本地计算机,然后使用 python 加载文件并解析结果来实现的.总而言之,不是一个非常有趣的过程。

理想情况下,我将能够以类似于以下方式执行此操作:

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

这似乎是可能的。 Hive 说它支持它here。还有另一个SO question 看起来正在做我想做的事情。

但是,我找不到文档。特别是,我无法弄清楚从哪里获得这些示例中使用的包。如果有人能够提供有关如何使 python 客户端正常工作的详细说明,那将非常有帮助,但如果做不到这一点,那么知道从哪里获取这些包将会很有帮助。

【问题讨论】:

    标签: python hive thrift


    【解决方案1】:

    如果您从源代码构建 hive,模块将位于此处(相对于 hive-trunk 目录):

    ./build/dist/lib/py

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

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

    【讨论】:

      【解决方案2】:

      看起来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'])
      

      安装它还应该安装所需的 thrift 包。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多