繁体   English   中英

HBase批量加载产生大量的reducer任务-任何解决方法

[英]HBase bulk load spawn high number of reducer tasks - any workaround

HBase批量加载(使用configureIncrementalLoad helper方法)将作业配置为创建与hbase表中的区域一样多的reducer任务。 因此,如果有几百个区域,那么该工作将产生几百个减速器任务。 在小型群集上,这可能会变得非常慢。

通过使用MultipleOutputFormat或其他方法,是否可以解决任何问题?

谢谢

  1. 按地区分阶段进行还原可为您带来很多长期利益。 导入的数据联机后,您将获得数据位置信息。 您还可以确定区域何时已负载均衡到另一台服务器。 我不会那么粗粒度。
  2. 由于reduce阶段只写一个文件,因此您应该能够设置NumReduceTasks(硬盘数量)。 这可能会加快速度。
  3. 使网络成为瓶颈很容易。 确保您正在压缩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()); 
  4. 您的数据导入大小可能足够小,您应该在其中使用基于Put的格式。 这将调用普通的HTable.Put API并跳过reducer阶段。 请参见TableMapReduceUtil.initTableReducerJob(table,null,job)。

当我们使用HFileOutputFormat时,无论您设置什么,它都会覆盖化简器的数量。 减速器的数量等于该HBase表中的区域数量。 因此,如果要控制减速器的数量,请减少区域的数量。

您将在此处找到示例代码:

希望这会有用:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM