【问题标题】:Reducer getting multiple keys through sys.stdin?Reducer 通过 sys.stdin 获取多个键?
【发布时间】: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


【解决方案1】:

虽然与单个键关联的所有值都发送到单个 reducer,但该 reducer 可能获取的不仅仅是一个键,因此每个输出文件中都会出现多个键。

【讨论】:

  • 是否有设置每个reducer进程有一个键?
  • 可能有,但最好将你的写作重新编写到这个 API,因为以这种方式限制你的减速器似乎并不是特别像 hadoop-ish。恐怕我个人并不知道,但一定要搜索一下,看看以前是否有人问过这样的问题,如果没有,请自己作为一个单独的问题问。
猜你喜欢
  • 1970-01-01
  • 2021-11-23
  • 2018-04-13
  • 1970-01-01
  • 1970-01-01
  • 2021-12-03
  • 2014-06-23
  • 2011-07-17
  • 1970-01-01
相关资源
最近更新 更多