读书人

hbase学习之使用并发的地图per

发布时间: 2012-12-24 10:43:13 作者: rapoo

hbase学习之使用并发的mapper
首先hadoop是支持并发的Mapper的,所以hbase没有道理不实现并发的Mapper,这个类是org.apache.hadoop.hbase.mapreduce.MultithreadedTableMapper.

该类简单理解就是重写了Mapper的run方法


以上是源代码,引自hbase-0.94.1

同时,该类内部还实现了一个private的class MapRunner,该MapRunner持有一个mapper变量,而这个mapper就是我们要执行的mapper,而这个mapper是怎么设置进去的呢?


以上是源代码,引自hbase-0.94.1
可以看出,我们要实现并发的Mapper类一定不能是MultithreadedTableMapper 的子类(本人在试验的时候就因为继承了MultithreadedTableMapper 而抛出异常),通过在提交任务之前调用此静态方法,就可以设定我们真实的Mapper类。

同时
/**   * Set the number of threads in the pool for running maps.   * @param job the job to modify   * @param threads the new number of threads   */  public static void setNumberOfThreads(Job job, int threads) {    job.getConfiguration().setInt(NUMBER_OF_THREADS,        threads);  }

我们还可以调用该方法来设置并发线程的数目,默认的并发数目是10。

此外还要注意,我们使用TableMapReduceUtil来initTableMapperJob中的Mapper class必须是MultithreadedTableMapper。

最后,该类其实还实现了一些其它的内部类和方法来辅助数据的一致性,有兴趣的朋友可以自己看源代码,我这里只抛一个砖。

读书人网 >互联网

热点推荐