`

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的java client实例

    HBase是构建在Hadoop文件系统(HDFS)之上的开源NoSQL数据库,它为非结构化和半结构化数据提供了高并发、低延迟的随机读写能力。HBase基于Google的Bigtable设计,适用于大数据分析和实时查询。 Java API是与HBase...

    hbase_常用配置参数_以及学习笔记讲解_以及各种原理图.zip

    "Mapper Reducer.png"可能解释了如何使用MapReduce作业对HBase表进行扫描、过滤和聚合操作。 5. **Region切分**: 当Region的大小达到预设阈值时,HBase会自动执行Region切分,将一个大Region拆分为两个小Region,...

    Hadoop数据迁移--从Hadoop向HBase

    通过以上详细的分析和解释,我们可以清晰地了解到从Hadoop向HBase进行数据迁移的具体步骤和技术要点,包括MapReduce的使用、数据插入机制、HBase表的创建以及Mapper类的实现细节。这对于理解和实施Hadoop与HBase之间...

    Hadoop+HBase+Java API

    **HBase** 是构建在Hadoop之上的非关系型数据库(NoSQL),设计用于大规模、实时的数据访问。它是一个列族数据库,支持随机读写,适用于大数据分析场景。HBase利用Hadoop的HDFS作为底层存储,通过Zookeeper进行协调...

    浅谈Hive vs. HBase

    - **学习曲线**:虽然 HBase 提供了类似 SQL 的操作语言,但对于初次使用的用户来说仍有一定的学习门槛。 - **依赖性**:为了运行 HBase,需要配置 ZooKeeper,这是一个针对大型分布式系统的协调服务。 **2.5 应用...

    hadoop中Map-Reduce使用示例,输入(DBInputFormat),输出(DBOu-MR_HBase.zip

    这个示例,"MR_HBase-Hadoop中的MapReduce使用示例,输入(DBInputFormat),输出(DBOutputFormat)",主要展示了如何利用MapReduce与HBase进行交互,进行数据的读取和写入。下面将详细介绍相关的知识点。 1. **...

    springboot+mybaties+phoenix+HikariCP

    Phoenix是一个高性能的SQL层,构建于Apache HBase之上,允许用户通过标准的SQL语法查询和操作HBase。Phoenix将SQL查询转换为HBase的扫描,从而提高了查询速度,尤其适合大数据量的场景。在本项目中,Phoenix提供了与...

    私塾在线学习网 hadoop教程

    MapReduce编程模型的学习,会涉及编写Mapper和Reducer类,理解InputFormat和OutputFormat的作用,以及如何使用JobTracker和TaskTracker进行任务调度。 PPT部分可能包含理论讲解和案例分析。理论部分可能涉及Hadoop...

    demo-druid-master.rar

    在这个项目中,Hbase可能被用来存储非关系型数据,提供高并发和低延迟的数据访问。 2. **Mysql**: Mysql是一款广泛使用的开源关系型数据库管理系统。在这个项目中,Mysql可能作为传统的关系型数据存储,用于支持...

    hikariCP+Phoenix.rar

    本篇文章将深入探讨如何使用SpringBoot框架,结合MyBatis和Phoenix,通过高效连接池HikariCP来实现对HBase数据库的高效操作。我们将详细讲解每个组件的角色以及它们之间的协同工作方式,帮助开发者更好地理解和应用...

    phoenix_wordcount.tar.gz_Hadoop Phoenix_mapReduce_phoenix wordc

    Phoenix通过将SQL查询转化为HBase的Scan操作,显著提高了对HBase的数据访问性能,尤其适用于高并发读取场景。其优点在于为不熟悉HBase API的开发者提供了一种更友好的接口,使得数据分析和管理更为便捷。 MapReduce...

    大数据课程体系

    - **Netty异步io通信框架**:学习Netty框架的特点及其在高并发服务器开发中的应用。 - **Zookeeper实现netty分布式架构的高可用**:利用Zookeeper保障Netty服务的高可用性。 #### 九、消息队列Kafka - **kafka是...

    大数据 76 道面试题及答案.docx

    * MapReduce 优化:可以通过调整Mapper和Reducer的并发度、内存分配、缓存策略等来提高计算性能。 * YARN 优化:可以通过调整 Container 的资源分配、队列调度策略等来提高资源利用率。 HBase 机制 HBase 是一个...

    2017最新大数据架构师精英课程

    本资源为大数据基础到中高级教学资源,适合稍微有点大数据或者java基础的人群学习,资源过大,上传乃是下载链接,不多说,上目录: 1_java基础2 l3 a2 a$ t7 J2 b+ `- p 2_java引入ide-eclipse 3_java基础知识-循环...

    大数据面试经验

    MapReduce的工作原理,包括Mapper和Reducer阶段,以及Shuffle和Sort过程,都是面试中的热点问题。 Java作为大数据开发的主要语言,其基础语法、多线程、集合框架、IO流和异常处理等知识是面试的基础。对于高级特性...

    Hadoop应用开发技术详解

    7. Hadoop开发与调试:学习如何使用Hadoop开发工具,如Eclipse插件或IntelliJ IDEA插件,以及如何编写和测试MapReduce程序,理解和使用Hadoop命令行工具进行数据操作。 8. 性能优化:Hadoop应用的性能优化是关键,...

    hadoop入门共21页.pdf.zip

    9. **Hadoop实战**:学习如何使用Hadoop解决实际问题,例如日志分析、推荐系统、社交网络分析等。 10. **优化技巧**:包括数据局部性优化、内存调优、任务并发度调整等,以提高Hadoop集群的性能。 通过这个压缩包...

    Hadoop期末操作备忘录

    【Hadoop期末操作备忘录】是一份针对学习和使用Hadoop技术的学生或专业人士的重要参考资料。这份备忘录旨在帮助用户在期末复习阶段系统地回顾和掌握Hadoop的核心概念、关键组件以及实际操作技巧,从而在考试或项目中...

    phoenix-mybatis-demo:凤凰-mybatis集成的一些基本知识

    - **Phoenix简介**:Phoenix是Apache软件基金会的开源项目,它为HBase提供了高性能的SQL查询能力,允许开发者使用标准的SQL语法来操作HBase表。 - **JDBC支持**:Phoenix通过JDBC接口提供了对HBase的访问,使得...

    HADOOP权威指南++中文版

    数据输入通过InputFormat类进行,Map阶段将输入数据切分成键值对,由Mapper处理,Reduce阶段由Reducer接收Mapper的输出,进行聚合计算。 五、Hadoop的优化与实践 实际应用中,为了提升性能,我们需要考虑数据块...

Global site tag (gtag.js) - Google Analytics