【问题标题】:Do I need a reducer if I just need to insert records into a database?如果我只需要将记录插入数据库,是否需要减速器?
【发布时间】:2017-09-29 16:02:14
【问题描述】:

我在 S3 上有大量想要并行处理的日志文件。我可能会丢弃不需要的记录,否则我只会将记录分批插入数据库。我不一定需要多个键/值对,所以我将一个键映射到所有记录并将其传递给减速器。减速器将只批处理记录并进行数据库调用。只在映射器中完成这一切是否可行?

【问题讨论】:

    标签: hadoop mapreduce


    【解决方案1】:

    根据您的描述,是的,您可以在映射器中执行此操作。您可以收集一批记录并确定何时有足够的时间进行批量插入。 cleanup() 方法可用于最后一批,您可能没有收集完整的一批,需要确保插入剩余的记录。

    从映射器执行此操作的一个问题是,您对并发运行的数量控制较少,如果输入拆分,它将基于数量。所以你们中有很多人都试图同时插入数据库,这可能是一个问题。使用 reducer,您可以更好地控制将要运行的数量。

    你没有说你正在使用什么数据库。过去使用 reducer 对我有帮助的一个案例是在使用分布式数据库时,在这种情况下是 Accumulo,但这可能适用于 HBase,也可能适用于 Cassandra。

    Accumulo 平板服务器分布在一个 hadoop 集群周围。因此,一张表将被拆分为多个平板电脑。使用 BatchWriter,您可以从映射器或化简器插入表。但是,如果您从映射器执行此操作,则插入本质上会在集群中随机写入,这会导致更多的网络流量和更多的压缩。使用 reducer,您可以获取目标表的拆分点并使用它们对数据进行分区。这导致平板电脑的所有数据最终都在同一个减速器中。当您以这种方式对数据进行分组时,从 reducer 批量写入会导致插入速度更快。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-09
      • 1970-01-01
      • 1970-01-01
      • 2021-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多