我被困了几天,因为我想根据我对hive的查询创建一个自定义地图缩减程序,我发现谷歌搜索后没有很多例子,我仍然对规则感到困惑。
创建自定义mapreduce程序的规则是什么,mapper和reducer类怎么样?
任何人都可以提供任何解决方案吗?
我想用Java开发这个程序,但是我仍然卡住了,然后在收集器中格式化输出时,如何在mapper和reducer类中格式化结果?
有人想给我一些关于这种东西的例子和解释吗?
答案 0 :(得分:23)
基本上有两种方法可以将自定义映射器/缩减器添加到配置单元查询中。
transform
SELECT TRANSFORM(stuff1,stuff2)FROM table1使用'script'AS thing1, thing2
其中stuff1,stuff2是table1中的字段,脚本是接受我稍后描述的格式的任何可执行文件。 thing1,thing2是脚本
的输出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