还原前的mapreduce过滤器

icnyk63a  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(469)

我有一个hadoopmapreduce工作,它可以拆分不同类型的文档(地点、人员、组织、算法等)。对于每个文档,我都有一个标记,标识文档的类型和指向其他文档的链接,但是在任务中到达链接的页面之前,我不知道链接的文档是哪种类型的。
在Map阶段,我先标识当前页面的链接和种类,然后将链接的信息和当前文档的内容用emmit作为值,并将其标记为单个reducer,键为null,可写值为“currentdoc::type::link”。
在reducer阶段,它使用值的“currentdoc::type”按类型对所有文档进行分组,然后只在属于某些类型的文档的“document::link”之间发出一个关系。
然而,我有一个内存问题,因为所有的最后一步是在一个减速机只执行。
这是一种方法,在Map过程之后、reduce任务之前执行分组任务,以标识所有带有标记的文档,然后将它们分发给不同的reducer。
我的意思是将所有文档/标签分组为“currentdoc::type”,在一个arraywritable文本中。然后将“currentdoc::link”元组作为键和arraywritable作为值发送给reducer,以便在reduce阶段以并行方式执行一些过滤。
谢谢你的帮助!

oxalkeyp

oxalkeyp1#

不幸的是,这个系统并没有按您期望的方式工作。
我们无法更改Map器、还原器和合并器的功能。
hadoop允许用户指定要在map输出上运行的combiner函数,combiner函数的输出形成reduce函数的输入。换言之,调用组合器函数0、1或多次应该可以从减速机产生相同的输出。
合并器无法合并来自多个Map的数据。让我们把工作交给我吧。
为了你的问题,
1) 使用customer partitioner并决定应该使用哪个reducer来处理特定的键(currentdoc::type)
2) 合并器将数据与Map器中的数据合并
3) outfromMap器将被重定向到特定的缩减器,具体取决于密钥分区(洗牌)
4) reducer将合并从各个Map器接收的密钥数据

分合器工作规程

相关问题