【发布时间】:2013-04-08 23:16:27
【问题描述】:
我知道与 Key 关联的所有值都发送到单个 Reducer。是不是 Reducer 可以通过它的标准输入一次获取多个键?
我的用例是将行拆分为键值对,然后我想将与键关联的所有行发送到 API。我看到多个密钥一次发送到 API。
这是我的工作正在运行的一些示例代码
映射器
def main():
for line in sys.stdin
part1 = get_part1(line)
part2 = get_part2(line)
key = '%s - %s' % (part1, part2)
print '%s\t%s' % (key, line)
减速器
def main():
my_module.sent_to_api(sys.stdin)
【问题讨论】:
-
我认为您正在使用多个减速器,它们能够在多个机器/内核上同时运行,所以我想您完全有可能从各个API 的 reducer。
-
实际上,每个 reducer 都意味着将整个 sys.stdin 文件发送到 API。然后当我通过 API 打开这个文件时,它包含多个密钥。不可能将两个 reducer 插入到一个文件中,所以我只能假设一个 reducer 在它的 sys.stdin 中获得了多个键
-
请记住,虽然与单个键关联的所有值都发送到单个减速器,但该减速器可能获得的不仅仅是那个键。这能解释你所看到的情况吗? (请注意,如果您使用的不是默认分区器,则不一定是这种情况。)
-
感谢 Quetzalcoatl,这可以解释这种行为。我假设每个键的每个 reducer 都会启动一个新进程。谢谢
-
很高兴知道这解释了它,你能把我的答案标记为正确,这样问题就很好地结束了吗?
标签: python hadoop hadoop-streaming