Hadoop 如何在自定义TableInputFormat中将映射器的数量设置为等于区域的数量

Hadoop 如何在自定义TableInputFormat中将映射器的数量设置为等于区域的数量,hadoop,mapreduce,hbase,Hadoop,Mapreduce,Hbase,我有一个覆盖了getSplits()的hbase自定义tableinputformat public List<InputSplit> getSplits(JobContext context) throws IOException { List<InputSplit> splits = new ArrayList<InputSplit>(); for (Scan scan : scans) { List<InputSplit> lo

我有一个覆盖了getSplits()的hbase自定义tableinputformat

public List<InputSplit> getSplits(JobContext context) throws IOException 
{
 List<InputSplit> splits = new ArrayList<InputSplit>(); 
 for (Scan scan : scans) {
   List<InputSplit> localSplits = null;
   setScan(scan);
   localSplits = super.getSplits(context);

   splits.addAll(localSplits);
 }
 return splits;
}
public List getSplits(JobContext上下文)引发IOException
{
列表拆分=新建ArrayList();
用于(扫描:扫描){
List localSplits=null;
设置扫描;
localSplits=super.getSplits(上下文);
splits.addAll(localSplits);
}
返回分裂;
}

在这里,我想设置地图任务的数量等于区域的数量。如何限制映射数?

如果您使用的是TableInputFormat,则
getSplits
返回的分割数应为该表的区域数。我有12个区域(使用bucket预分割),但MR job正在为1500行创建22个映射。每个地图都是CPU密集型的,大多数地图什么都不做。你可以在这里查看源代码:你从哪里得到的区域数?从HBase web监视器?它是像
http://example.com:60010/table.jsp?name=your_table_name
如前所述,我对12个区域进行了预分割