我遇到了Mapreduce的复杂问题。我试图匹配2个并不总是在同一行中存在的唯一值。一旦我将它们映射出来,我就需要计算该映射的唯一事件总数。
我正在处理的日志文件是100GB +未压缩的,并且数据分为两部分,我需要将它们放在一起。事件分布在许多不同的日志文件中。我认为描述问题的最简单方法是显示日志样本。
[2010/09/23 12:02am] AAAAAAAAAA BBBBBBBBBB Event message type A [2010/09/23 12:02am] BBBBBBBBBB Event message type B [2010/09/23 12:03am] BBBBBBBBBB Event message type B [2010/09/23 12:09am] BBBBBBBBBB [2010/09/23 12:01am] CCCCCCCCCC DDDDDDDDDD Event message type A [2010/09/23 12:05am] DDDDDDDDDD Event message type A [2010/09/23 12:06am] DDDDDDDDDD Event message type C
第2列和第3列是永不匹配的唯一ID。我需要绘制链接到第2列和第3列的第4列中的唯一项目数。第二列始终至少存在一次。第3列始终存在。第四列可能存在也可能不存在。我仍然想把第四列算作未知事件。实际的唯一值数量达到数百万,总记录线数达到数十亿。
上述解决方案应该是。
AAAAAAAAAA,BBBBBBBBBB,A 1 AAAAAAAAAA,BBBBBBBBBB,B 2 AAAAAAAAAA,BBBBBBBBBB,Unknown 1 CCCCCCCCCC,DDDDDDDDDD,A 2 CCCCCCCCCC,DDDDDDDDDD,C 1
我曾考虑在2个单独的mapreduces中分解第2和第3列,但将这些结果重新组合在一起是多毛的。不知道如何将最终的Mapreduce结合起来组合这些值。第二列将遍布文件中的所有位置。它可能会在凌晨1点再次出现在凌晨1点。
有关如何使用Hadoop mapreduce解决此问题的任何建议?我正在使用Hadoop流,不懂Java。
答案 0 :(得分:2)
我建议你这样做:
所以你开始(你所展示的内容略有不同):
[2010/09/23 12:01am] BBBBBBBBBB Event message type B
[2010/09/23 12:02am] AAAAAAAAAA BBBBBBBBBB Event message type A
[2010/09/23 12:03am] BBBBBBBBBB Event message type B
[2010/09/23 12:09am] BBBBBBBBBB
[2010/09/23 12:01am] DDDDDDDDDD Event message type A
[2010/09/23 12:05am] CCCCCCCCCC DDDDDDDDDD Event message type A
[2010/09/23 12:06am] DDDDDDDDDD Event message type C
步骤1将使用“BBBBBBBBBB”作为键并进行辅助排序(See the Hadoop example和the explanation in Tom's book)以确保具有“AAAAAAAAAA”的记录是“第一个”到达减速机。 在reducer中,您为所有记录提供与第一个相同的“第二列”值(“AAAAAAAAAA”)。您不进行聚合,只需完成记录。这意味着如果没有事件,也会添加“未知”。
所以在第一步之后你会有这样的事情:
AAAAAAAAAA BBBBBBBBBB Event message type B
AAAAAAAAAA BBBBBBBBBB Event message type A
AAAAAAAAAA BBBBBBBBBB Event message type B
AAAAAAAAAA BBBBBBBBBB Unknown
CCCCCCCCCC DDDDDDDDDD Event message type A
CCCCCCCCCC DDDDDDDDDD Event message type A
CCCCCCCCCC DDDDDDDDDD Event message type C
然后在第二步中,您基本上与众所周知的“Wordcount”示例相同 将整个“AAAAAAAAAA BBBBBBBBBBB事件消息类型B”作为您的“单词”。
为您提供所需的输出:
AAAAAAAAAA BBBBBBBBBB Event message type B 2
AAAAAAAAAA BBBBBBBBBB Event message type A 1
AAAAAAAAAA BBBBBBBBBB Unknown 1
CCCCCCCCCC DDDDDDDDDD Event message type A 2
CCCCCCCCCC DDDDDDDDDD Event message type C 1
HTH