我想在HBase(0.90.4; Hadoop 0.20)中运行一个Mapper,它会在每个单个输入行的不同HBase表中生成几个(1000 - 10000)个新数据行。
我开始使用TableMapper<ImmutableBytesWritable, Put>
,我假设在map函数中,我会调用context.write(someSingleOutputRowPut)
1000次将数据推送到输出表。
我是否会更好地使用只读映射器并使用批量列表进行手动写入输出表?或者我应该将映射器的输出类型更改为List?或者这样调用context.write很好吗?
编辑:开始收集关于调用context.write几千次的“天真”方法的一些数据,到目前为止看起来不太好(现在我正在尝试更大的数据集)所以有时间尝试随机的东西,看看是什么改善了它。
答案 0 :(得分:0)
使用context.write(...)或使用table.put(...)基本相同。
您应该在写入数据时关闭自动刷新以获得批处理效果。确保在映射器阶段结束时执行刷新,以避免丢失任何数据。
听起来你不需要减速器阶段,你应该保持这种方式,因为它会通过避免混洗,排序和数据传输阶段来提高你的性能。