从应用程序运行弹性Mapreduce Hive查询

时间:2012-12-21 04:31:13

标签: api hive elastic-map-reduce

我在交互模式下使用弹性mapreduce运行Hive:

./ elastic-mapreduce --create --hive-interactive

并以脚本模式:

./ elastic-mapreduce --create --hive-script --arg s3://mybucket/myfile.q

我希望在我自己的服务器上有一个应用程序(最好是PHP,R或Python)能够启动弹性mapreduce集群并运行几个Hive命令,同时以可解析的形式获取它们的输出。

我知道启动群集可能需要一些时间,因此我的应用程序可能必须在单独的步骤中执行此操作并等待群集准备就绪。但有没有办法做这样一些具体的假设例子:

  1. 创建Hive表customer_orders
  2. 运行Hive查询“SELECT dt,count(*)FROM customer_orders GROUP BY dt”
  3. 等待结果
  4. 解析PHP中的结果
  5. 运行Hive查询“SELECT MAX(id)FROM customer_orders”
  6. 等待结果
  7. 在PHP中解析结果 ...
  8. 有没有人对我如何做到这一点有任何建议?

1 个答案:

答案 0 :(得分:1)

您可以使用MRJOB。它允许您在Py​​thon 2.5+中编写MapReduce作业并在多个平台上运行它们。

替代方案是HiPy,这是一个非常棒的项目,应该足以满足您的所有需求。 HiPy的目的是支持在Python中以编程方式构建Hive查询并更轻松地管理查询,包括使用转换脚本进行查询。

  

HiPy支持在单个查询脚本中组合在一起   构造,转换脚本和后处理。这有助于   脚本的可追溯性,文档和可重用性。一切   出现在一个地方,Python注释可用于记录   脚本。

     

Hive查询是通过编写一些Python对象来构造的,   表示诸如Columns,Tables和Select语句之类的东西。   在此过程中,HiPy会跟踪结果的架构   查询输出。

     

转换脚本可以包含在Python的主体中   脚本。 HiPy将负责提供脚本代码   Hive以及数据的序列化和反序列化   Python数据类型。如果任何数据列包含JSON,则HiPy需要   小心地将其转换为Python数据类型或从Python数据类型转换。

查看Documentation了解详情!