【问题标题】:Hadoop strange behaviour: reduce function doesn't get all values for a keyHadoop 奇怪的行为:reduce 函数无法获取键的所有值
【发布时间】:2014-11-02 08:52:05
【问题描述】:

在我的 Hadoop 项目中,我正在读取文本文件的行,每行都有多个名称。第一个名字代表我的用户名,其余的是朋友列表。 然后我创建对 (username,friend) ,在 map 函数中,每对都有一个键“Key[name1][name2]”,其中 name1,2 是用户名,朋友名按字母顺序排列。 通常,在阅读 userA 行和 userB 行之后,并且他们在好友列表中都有彼此,我会得到 2 个具有不同值的相同键,在这种情况下是: KeyUserAUserB : "UserA,UserB" 和 KeyUserAUserB : “用户 B,用户 A”。 我在 reduce 函数中所期望的是,在某一时刻, KeyUserAUserB 作为 key 和一对 "UserA,UserB","UserB,UserA" 作为 values 。所以值迭代器将有 2 个元素。 但是,在 reducer 函数中,我分别获得了两次 KeyUserAUserB 和一个值。这不是我对 Hadoop 的期望......

我还注意到在我的 userlogs 中,我有 4 个“m”文件夹,在前 2 个文件夹中,我有帮助我识别上述内容的日志。在两个“m”日志中,map 函数的输出 (System.out) 与 reduce function 的输出交织在一起。我不知道这是否与我的异常有关,但我希望减少输出保留在“r”文件夹中。 此外,对于上面的示例,KeyUserAUserB 的一个日志打印在一个“m”日志文件中,另一个 KeyUserAUserB 打印在另一个日志文件中......虽然在某些情况下,KeyUserAUserB 会同时带有两个值的减速器,我发现至少有一种情况,它永远不会同时带有两个值(而且具有相同键的那 2 对键值对驻留在不同的“m”日志文件中)。

我注意到的另一件事是,Reduce 函数的输出收集不会将值直接发送到输出文件,而是再次将它们作为同一个 Reduce 函数的输入传递...

您如何看待这种行为,可能的原因是什么?

【问题讨论】:

    标签: hadoop mapreduce


    【解决方案1】:

    最后。整个意外行为是因为我使用了组合器 class= reducer 类。在评论该行之后,一切都按预期进行。

    【讨论】:

      猜你喜欢
      • 2020-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多