1

我有一个想在 HBase (0.90.4; Hadoop 0.20) 中运行的 Mapper,它将为每个单个输入行在不同的 HBase 表中生成几个 (1000 - 10000) 新数据行。

我从一个TableMapper<ImmutableBytesWritable, Put>假设开始,在 map 函数中,我会调用context.write(someSingleOutputRowPut)1000 次以将数据推送到输出表。

拥有一个只读映射器并使用成批的 Puts 列表手动写入我的输出表会更好吗?还是应该将映射器的输出类型更改为列表?或者像这样多次调用 context.write 可以吗?

编辑:开始收集有关调用 context.write 数千次的“幼稚”方法的一些数据,到目前为止看起来并不好(现在我正在尝试更大的数据集,特别是)所以是时候尝试随机的事情了看看有什么改进。

4

1 回答 1

0

使用 context.write(...) 或使用 table.put(...) 本质上是相同的。

您应该在写入数据时关闭自动刷新以产生批处理效果。确保在映射器阶段结束时执行刷新,以避免丢失任何数据。

听起来你不需要减速器阶段,你应该保持这种状态,因为它可以通过避免洗牌、排序和数据传输阶段来提高你的性能。

于 2013-02-25T16:20:24.260 回答