如果我只需要将记录插入数据库,是否需要减速器?

时间:2017-09-28 15:15:05

标签: hadoop mapreduce

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

1 个答案:

答案 0 :(得分:0)

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

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

您不会说出您正在使用的数据库。过去使用减速器帮助我的情况是使用分布式数据库,在这种情况下是Accumulo,但这可能适用于HBase,也许适用于Cassandra。

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