问题描述
|
我被困了几天,因为我想根据我在hive上的查询创建一个自定义的map reduce程序,在谷歌搜索后发现没有很多示例,我仍然对该规则感到困惑。
创建自定义mapreduce程序的规则是什么,mapper和reducer类如何?
谁能提供任何解决方案?
我想用Java开发此程序,但仍然受阻,然后在收集器中格式化输出时,如何在mapper和reducer类中格式化结果?
是否有人想给我一些有关这种事情的例子和解释?
解决方法
从本质上讲,有两种将自定义映射器/化简器添加到配置单元查询的方法。
用
transform
使用\'script \'作为事物1,从表1中选择SELECT TRANSFORM(stuff1,stuff2),
事2
其中stuff1,stuff2是table1中的字段,而script是任何接受我稍后描述的格式的可执行文件。 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
现在,所有这些脚本都遵循一个简单的模式。他们将从stdin逐行读取。这些字段将以ѭ6分隔,并且将以相同的方式写回到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