Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Design patterns 设计MapReduce作业以查找低于给定阈值的最大值_Design Patterns_Hadoop_Mapreduce_Apache Zookeeper - Fatal编程技术网

Design patterns 设计MapReduce作业以查找低于给定阈值的最大值

Design patterns 设计MapReduce作业以查找低于给定阈值的最大值,design-patterns,hadoop,mapreduce,apache-zookeeper,Design Patterns,Hadoop,Mapreduce,Apache Zookeeper,查询: 我正在尝试设计一个查询,以查找给定日期的网页的实时版本 日期作为运行时参数传递。映射器的输入是以下键->值对:webpage\u id->revision\u id和revision\u timestamp 对于每个网页_id,作业必须输出给定日期之前发生的页面的最新修订_id 当前设计: 映射者将丢弃阈值日期后时间戳为revision\u的任何记录,并输出所有其他记录 然后,组合器将对给定网页的所有修订进行排序,并仅输出最新的修订(这是通过使用内部数据结构并在组合器的清理阶段发出键值对

查询:

我正在尝试设计一个查询,以查找给定日期的网页的实时版本

日期作为运行时参数传递。映射器的输入是以下键->值对:webpage\u id->revision\u idrevision\u timestamp

对于每个网页_id,作业必须输出给定日期之前发生的页面的最新修订_id

当前设计:

映射者将丢弃阈值日期后时间戳为
revision\u的任何记录,并输出所有其他记录

然后,组合器将对给定网页的所有修订进行排序,并仅输出最新的修订(这是通过使用内部数据结构并在组合器的清理阶段发出键值对来完成的)

减速机将执行与合并器相同的操作,但取决于合并器的输出

创意:

我想进一步优化工作。我认为用映射程序为给定网页处理的最新版本更新“全局”变量是一个好主意。因此,在映射程序输出记录之前,它将检查该修订是否为该网页的“全球最新”修订,如果不是,则不会发出。如果是,他将发出记录并更新全局变量。我认为这可以减少通过网络传输的记录数量并加快工作速度。您认为这个想法可行吗?它是否有可能提高性能

问题:

有没有办法创建和更新这样的全局变量?据我了解,
ZooKeeper
的一个功能是充当键值存储,但我找不到如何在地图任务中初始化或访问
ZooKeeper
记录/变量的代码示例


是否有其他方法可以提高我的
MapReduce
作业的性能?

据我所知,map/reduce作业之间共享的可变全局状态没有官方方法。当然,使用像zookeeper这样的东西是有可能的,但最有可能的是它会成为你流量的瓶颈。因此,一般不建议这样做。 相反,您可以根据映射程序跟踪网页id->max\u date散列映射,并且仅当当前日期晚于当前跟踪的max\u date时才发出记录。当然,这假设此映射应该适合内存。如果在您的用例中页面id的数量太多,您可能希望预先划分输入(按网页id),这样每个映射器将只接收有限的页面id子集,从而保持最大日期跟踪映射在内存中的可管理性。然后您只需要配置足够数量的映射器