`

hbase学习之使用并发的mapper

阅读更多
   首先hadoop是支持并发的Mapper的,所以hbase没有道理不实现并发的Mapper,这个类是org.apache.hadoop.hbase.mapreduce.MultithreadedTableMapper.

   该类简单理解就是重写了Mapper的run方法
    
/**
   * Run the application's maps using a thread pool.
   */
  @Override
  public void run(Context context) throws IOException, InterruptedException {
    outer = context;
    int numberOfThreads = getNumberOfThreads(context);
    mapClass = getMapperClass(context);
    if (LOG.isDebugEnabled()) {
      LOG.debug("Configuring multithread runner to use " + numberOfThreads +
          " threads");
    }
    executor = Executors.newFixedThreadPool(numberOfThreads);
    for(int i=0; i < numberOfThreads; ++i) {
      MapRunner thread = new MapRunner(context);
      executor.execute(thread);
    }
    executor.shutdown();
    while (!executor.isTerminated()) {
      // wait till all the threads are done
      Thread.sleep(1000);
    }
  }

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

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

/**
   * Set the application's mapper class.
   * @param <K2> the map output key type
   * @param <V2> the map output value type
   * @param job the job to modify
   * @param cls the class to use as the mapper
   */
  public static <K2,V2>
  void setMapperClass(Job job,
      Class<? extends Mapper<ImmutableBytesWritable, Result,K2,V2>> cls) {
    if (MultithreadedTableMapper.class.isAssignableFrom(cls)) {
      throw new IllegalArgumentException("Can't have recursive " +
          "MultithreadedTableMapper instances.");
    }
    job.getConfiguration().setClass(MAPPER_CLASS,
        cls, Mapper.class);
  }

   以上是源代码,引自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。

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

相关推荐

    Hbase学习总结.rar

    Hbase学习总结.rar

    Hbase学习分享资料

    本文首先简单介绍了HBase,然后重点讲述了HBase的高并发和实时处理数据 、HBase数据模型、HBase物理存储、HBase系统架构,HBase调优、HBase Shell访问等。

    HBase学习利器:HBase实战

    HBase开发实战,HBase学习利器:HBase实战

    Hbase学习分享

    本文首先简单介绍了HBase,然后重点讲述了HBase的高并发和实时处理数据 、HBase数据模型、HBase物理存储、HBase系统架构,HBase调优、HBase Shell访问等。

    hbase使用学习中文文档

    这是 Apache HBase的官方文档, Hbase是一个分布式,,版本化(versioned),构建在 Apache Hadoop和 Apache ZooKeeper上的列数据库.

    hbase 学习 hbase原理 hbase资料

    hbase 学习 hbase原理 hbase资料 ,呕心沥血整理的。很实用,不适用可拍砖。。

    hbase学习笔记

    比较详细的HBase学习笔记,精心制作 HBase是一个分布式的、面向列的开源数据库,源于google的一篇论文《bigtable:一个结构化数据的分布式存储系统》。HBase是Google Bigtable的开源实现,它利用Hadoop HDFS作为其...

    HBase学习笔记(个人整理)

    个人笔记整理(带目录),共8个章节:...一.Hbase快速入门 二.Apache HBase配置 三.Hbase数据存储 四.HBase协处理器与二级索引 五.PHOENIX操作HBASE 六.HBase设计与优化 七.HBase与Spark集成 八.Trafodion操作HBase 共146页

    java代码使用thrift2操作hbase示例

    java代码使用thrift2操作hbase示例,thrift2连接hbase添加数据,单条查找,删除数据,根据扫描器查找,修改数据等测试实例

    hbase安装和使用

    本资源为hbase的安装和使用,内含hbase安装工具包,hbase的安装说明,hbase的使用说明 。

    HBase入门与使用

    HBase入门与使用,可以了解如何使用HBase

    多线程 hbase

    多线程 hbase

    HbaseTemplate 操作hbase

    java 利用 sping-data-hadoop HbaseTemplate 操作hbase find get execute 等方法 可以直接运行

    hbase学习-脑图总结

    hbase学习-脑图总结,涵盖了大部分基础知识点,下个脑图查看器即可,方便大家学习

    HBASE学习分享

    HBASE的主要原理解读:包括HBase 读写逻辑、HBase region拆分和合并

    HBase分布式架构处理大数据量(高并发和实时处理)

    本文来自于csdn,介绍了Hadoop的原理,HBase的特点,HBase 的高并发和实时处理数据,数据模型,工作流程等。(一)HDFS主要是用于做什么的?HDFS(HadoopDistributedFileSystem)分布式文件管理系统、是Hadoop项目的...

    Hbase学习总结

    Hbase学习总结,很不错的资源,对你绝对有帮助

    HBase基本操作 Java代码

    HBase基本操作 增删改查 java代码 要使用须导入对应的jar包

    hbase学习资料收集

    文档收集了一些网络上的hbase相关学习资料,对初学者来说是非常宝贵的,省去了在网上找的时间,又省去了看一些无用的资料的麻烦。

    大数据开发之Hbase基本使用及存储设计实战教程(视频+笔记+代码)

    │ Day15[Hbase 基本使用及存储设计].pdf │ ├─02_视频 │ Day1501_Hbase的介绍及其发展.mp4 │ Day1502_Hbase中的特殊概念.mp4 │ Day1503_Hbase与MYSQL的存储比较.mp4 │ Day1504_Hbase部署环境准备.mp4 │ Day...

Global site tag (gtag.js) - Google Analytics