0

我以交互模式在弹性 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 中解析结果...

有人对我如何做到这一点有任何建议吗?

4

1 回答 1

1

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

另一种选择是HiPy,它是一个很棒的项目,可能足以满足您的所有需求。HiPy 的目的是支持在 Python 中以编程方式构建 Hive 查询并更轻松地管理查询,包括使用转换脚本的查询。

HiPy 可以在查询构建、转换脚本和后处理的单个脚本中进行分组。这有助于脚本的可追溯性、文档化和可重用性。一切都出现在一个地方,Python 注释可用于记录脚本。

Hive 查询是通过组合一些 Python 对象来构造的,这些对象表示诸如 Columns、Tables 和 Select 语句之类的东西。在此过程中,HiPy 会跟踪生成的查询输出的模式。

转换脚本可以包含在 Python 脚本的主体中。HiPy 将负责向 Hive 提供脚本代码,以及数据与 Python 数据类型之间的序列化和反序列化。如果任何数据列包含 JSON,HiPy 也会负责将其转换为 Python 数据类型。

查看文档了解详细信息!

于 2012-12-21T12:04:31.843 回答