gpt4 book ai didi

hadoop - 将所有映射器中遇到的最大键作为参数传递给下一个作业

转载 作者:可可西里 更新时间:2023-11-01 14:50:23 24 4
gpt4 key购买 nike

我有一个 Map/Reduce 作业链:

Job1 将带有时间戳的数据作为键,将一些数据作为值进行转换。

对于 Job2,我需要将出现在 Job1 中所有映射器中的最大时间戳作为参数传递。 (我知道如何将参数传递给 Mappers/Reducers)

我可以跟踪 Job1 的每个映射器中的最大时间戳,但是我怎样才能获得所有映射器中的最大值并将其作为参数传递给 Job2?

我想避免仅仅为了确定最大时间戳而运行 Map/Reduce 作业,因为我的数据集的大小在 TB 以上。

有没有办法使用 Hadoop 或 Zookeeper 来完成此任务?

最佳答案

2 个 map 无法相互通信。因此只有 map 的工作(job1)无法获得全局最大值。时间戳。但是,我可以想到以下两种方法。

我假设你的 job1 目前是一个只有 map 的工作,你正在从 map 本身写输出。

一个。将您的映射器更改为使用 MultipleOutputs 而不是 Context 或 OutputCollector 来编写主输出。使用 context.write() 将附加(键,值)对作为(常量,时间戳)发出。这样,您只洗牌(常量,时间戳)对到 reducer 。添加一个计算最大值的 reducer 。在它收到的值中。运行作业,将 reducer 的数量设置为 1。从 mapper 写入的输出将为您提供原始输出,而从 reducer 写入的输出将为您提供全局最大值。时间戳。

B.在 job1 中,写入最大值。每个映射器中的时间戳作为输出。您可以在 cleanup() 中执行此操作。使用 MultipleOutputs 写入原始输出文件夹以外的文件夹。 job1 完成后,假设您在 job1 中有“x”个映射器,则输出文件夹中有“x”个零件文件。您可以在此文件夹上执行 getmerge 以将所有零件文件放入一个本地文件中。此文件将具有'x' 行每行包含一个时间戳。您可以使用独立的 java 程序读取它,找到全局最大值。时间戳并将其保存在某个本地文件中。使用 distrib 缓存将此文件共享到 job2 或传递全局最大值。作为参数。

关于hadoop - 将所有映射器中遇到的最大键作为参数传递给下一个作业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16652155/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com