自定义地图减少Hive上的程序,规则是什么?输入输出怎么样?

时间:2011-05-30 16:24:06

标签: hadoop mapreduce hive

我被困了几天,因为我想根据我对hive的查询创建一个自定义地图缩减程序,我发现谷歌搜索后没有很多例子,我仍然对规则感到困惑。

创建自定义mapreduce程序的规则是什么,mapper和reducer类怎么样?

任何人都可以提供任何解决方案吗?

我想用Java开发这个程序,但是我仍然卡住了,然后在收集器中格式化输出时,如何在mapper和reducer类中格式化结果?

有人想给我一些关于这种东西的例子和解释吗?

1 个答案:

答案 0 :(得分:23)

基本上有两种方法可以将自定义映射器/缩减器添加到配置单元查询中。

  1. 使用transform
  2.   

    SELECT TRANSFORM(stuff1,stuff2)FROM table1使用'script'AS thing1,   thing2

    其中stuff1,stuff2是table1中的字段,脚本是接受我稍后描述的格式的任何可执行文件。 thing1,thing2是脚本

    的输出
    1. 使用map并缩小
    2. FROM (
          FROM table
          MAP table.f1 table.f2
          USING 'map_script'
          AS mp1, mp2
          CLUSTER BY mp1) map_output
        INSERT OVERWRITE TABLE someothertable
          REDUCE map_output.mp1, map_output.mp2
          USING 'reduce_script'
          AS reducef1, reducef2;
      

      这稍微复杂一些,但可以提供更多控制。这有两个部分。在第一部分中,映射器脚本将从table接收数据并将其映射到字段mp1和mp2。然后将这些内容传递给reduce_script,此脚本将在密钥上接收已排序的输出,我们在CLUSTER BY mp1中指定了该输出。 请注意,一个减速机将处理多个密钥。 reduce脚本的输出将转到表someothertable

      现在所有这些脚本都遵循一个简单的模式。他们将从标准输出逐行阅读。这些字段将\t分开,它们将以相同的方式写回stdout(由'\ t'分隔的字段)

      查看此博客,有一些不错的例子。

      http://dev.bizo.com/2009/07/custom-map-scripts-and-hive.html

      http://dev.bizo.com/2009/10/reduce-scripts-in-hive.html