[英]HBase bulk load spawn high number of reducer tasks - any workaround
HBase批量加载(使用configureIncrementalLoad helper方法)将作业配置为创建与hbase表中的区域一样多的reducer任务。 因此,如果有几百个区域,那么该工作将产生几百个减速器任务。 在小型群集上,这可能会变得非常慢。
通过使用MultipleOutputFormat或其他方法,是否可以解决任何问题?
谢谢
使网络成为瓶颈很容易。 确保您正在压缩HFile和中间MR数据。
job.getConfiguration().setBoolean("mapred.compress.map.output", true); job.getConfiguration().setClass("mapred.map.output.compression.codec", org.apache.hadoop.io.compress.GzipCodec.class, org.apache.hadoop.io.compress.CompressionCodec.class); job.getConfiguration().set("hfile.compression", Compression.Algorithm.LZO.getName());
您的数据导入大小可能足够小,您应该在其中使用基于Put的格式。 这将调用普通的HTable.Put API并跳过reducer阶段。 请参见TableMapReduceUtil.initTableReducerJob(table,null,job)。
当我们使用HFileOutputFormat时,无论您设置什么,它都会覆盖化简器的数量。 减速器的数量等于该HBase表中的区域数量。 因此,如果要控制减速器的数量,请减少区域的数量。
您将在此处找到示例代码:
希望这会有用:)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.