HBase批量加载(使用configureIncrementalLoad helper方法)将作业配置为创建与hbase表中的区域一样多的reducer任务。因此,如果有几百个区域,那么该作业将产生几百个减速器任务。这可能会在一个小集群上变得非常缓慢。
使用MultipleOutputFormat或其他什么方法可以解决问题吗?
由于
答案 0 :(得分:1)
很容易出现网络瓶颈。确保你正在压缩你的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)。
答案 1 :(得分:0)
当我们使用HFileOutputFormat时,无论你设置什么,它都会覆盖reducer的数量。 reducer的数量等于该HBase表中的区域数量。 因此,如果要控制减速器的数量,请减少区域数量。
您会找到示例代码here:
希望这会有用:)