Hive自定义脚本是否允许2个或更多缩减器?

时间:2013-11-08 23:22:54

标签: python hadoop mapreduce hive

我试图使用Hive自定义脚本来执行我的mapreduce工作。我有以下代码:

 ADD FILE reducer1.py;
    ADD FILE reducer2.py;

    FROM (
        FROM
         (
            SELECT i.time, i.id, i.response
            FROM table_1 i
            WHERE (i.id == 12345)
            CLUSTER BY time
          ) A
          REDUCE A.* USING 'reducer1.py'
          AS (x,y,z)
          CLUSTER BY x,y
    ) B
    REDUCE B.* USING 'reducer2.py'

然而,这个蜂巢工作失败了。当我查看日志时,错误是:

  

“无法运行程序   “/mapred/d02/local/taskTracker/usr/jobcache/job_201311040808_1131/attempt_201311040808_1131_r_000000_0/work/./rtbmapper_auctionsimulator_reducer2.py”:   java.io.IOException:error = 2,没有这样的文件或目录   java.lang.ProcessBuilder.start(ProcessBuilder.java:460)

我在第一个开头添加了两个py文件。此外,当我只运行reducer1时,它没有任何问题。我使用了以下代码:

ADD FILE reducer1.py;
FROM
     (
        SELECT i.time, i.id, i.response
        FROM table_1 i
        WHERE (i.id == 12345)
        CLUSTER BY time
      ) A
      REDUCE A.* USING 'reducer1.py'

所以我的问题是:Hive自定义脚本只允许一个reducer吗?非常感谢提前!

1 个答案:

答案 0 :(得分:0)

我可以告诉你是的,Hive绝对可以为每个查询提供多个MapReduce作业,因此不止一个Reducer。从理论上讲,这并没有错。

不幸的是,我无法告诉你这里失败了什么。从错误消息中,出于某种原因,Hive无法找到您的reducer脚本...仔细检查它是您认为的位置。尝试逐个执行每个命令(添加文件...,添加文件...,选择),并确保它们都没有失败或产生奇怪的输出。最后,您可以使用中间表来尝试此操作。第一个查询使用第一个reduce脚本,并输出到临时表。第二个查询在该临时表上运行第二个reduce脚本。

希望这有帮助!