首先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是构建在Hadoop文件系统(HDFS)之上的开源NoSQL数据库,它为非结构化和半结构化数据提供了高并发、低延迟的随机读写能力。HBase基于Google的Bigtable设计,适用于大数据分析和实时查询。 Java API是与HBase...
"Mapper Reducer.png"可能解释了如何使用MapReduce作业对HBase表进行扫描、过滤和聚合操作。 5. **Region切分**: 当Region的大小达到预设阈值时,HBase会自动执行Region切分,将一个大Region拆分为两个小Region,...
通过以上详细的分析和解释,我们可以清晰地了解到从Hadoop向HBase进行数据迁移的具体步骤和技术要点,包括MapReduce的使用、数据插入机制、HBase表的创建以及Mapper类的实现细节。这对于理解和实施Hadoop与HBase之间...
**HBase** 是构建在Hadoop之上的非关系型数据库(NoSQL),设计用于大规模、实时的数据访问。它是一个列族数据库,支持随机读写,适用于大数据分析场景。HBase利用Hadoop的HDFS作为底层存储,通过Zookeeper进行协调...
- **学习曲线**:虽然 HBase 提供了类似 SQL 的操作语言,但对于初次使用的用户来说仍有一定的学习门槛。 - **依赖性**:为了运行 HBase,需要配置 ZooKeeper,这是一个针对大型分布式系统的协调服务。 **2.5 应用...
这个示例,"MR_HBase-Hadoop中的MapReduce使用示例,输入(DBInputFormat),输出(DBOutputFormat)",主要展示了如何利用MapReduce与HBase进行交互,进行数据的读取和写入。下面将详细介绍相关的知识点。 1. **...
Phoenix是一个高性能的SQL层,构建于Apache HBase之上,允许用户通过标准的SQL语法查询和操作HBase。Phoenix将SQL查询转换为HBase的扫描,从而提高了查询速度,尤其适合大数据量的场景。在本项目中,Phoenix提供了与...
MapReduce编程模型的学习,会涉及编写Mapper和Reducer类,理解InputFormat和OutputFormat的作用,以及如何使用JobTracker和TaskTracker进行任务调度。 PPT部分可能包含理论讲解和案例分析。理论部分可能涉及Hadoop...
在这个项目中,Hbase可能被用来存储非关系型数据,提供高并发和低延迟的数据访问。 2. **Mysql**: Mysql是一款广泛使用的开源关系型数据库管理系统。在这个项目中,Mysql可能作为传统的关系型数据存储,用于支持...
本篇文章将深入探讨如何使用SpringBoot框架,结合MyBatis和Phoenix,通过高效连接池HikariCP来实现对HBase数据库的高效操作。我们将详细讲解每个组件的角色以及它们之间的协同工作方式,帮助开发者更好地理解和应用...
Phoenix通过将SQL查询转化为HBase的Scan操作,显著提高了对HBase的数据访问性能,尤其适用于高并发读取场景。其优点在于为不熟悉HBase API的开发者提供了一种更友好的接口,使得数据分析和管理更为便捷。 MapReduce...
- **Netty异步io通信框架**:学习Netty框架的特点及其在高并发服务器开发中的应用。 - **Zookeeper实现netty分布式架构的高可用**:利用Zookeeper保障Netty服务的高可用性。 #### 九、消息队列Kafka - **kafka是...
* MapReduce 优化:可以通过调整Mapper和Reducer的并发度、内存分配、缓存策略等来提高计算性能。 * YARN 优化:可以通过调整 Container 的资源分配、队列调度策略等来提高资源利用率。 HBase 机制 HBase 是一个...
本资源为大数据基础到中高级教学资源,适合稍微有点大数据或者java基础的人群学习,资源过大,上传乃是下载链接,不多说,上目录: 1_java基础2 l3 a2 a$ t7 J2 b+ `- p 2_java引入ide-eclipse 3_java基础知识-循环...
MapReduce的工作原理,包括Mapper和Reducer阶段,以及Shuffle和Sort过程,都是面试中的热点问题。 Java作为大数据开发的主要语言,其基础语法、多线程、集合框架、IO流和异常处理等知识是面试的基础。对于高级特性...
7. Hadoop开发与调试:学习如何使用Hadoop开发工具,如Eclipse插件或IntelliJ IDEA插件,以及如何编写和测试MapReduce程序,理解和使用Hadoop命令行工具进行数据操作。 8. 性能优化:Hadoop应用的性能优化是关键,...
9. **Hadoop实战**:学习如何使用Hadoop解决实际问题,例如日志分析、推荐系统、社交网络分析等。 10. **优化技巧**:包括数据局部性优化、内存调优、任务并发度调整等,以提高Hadoop集群的性能。 通过这个压缩包...
【Hadoop期末操作备忘录】是一份针对学习和使用Hadoop技术的学生或专业人士的重要参考资料。这份备忘录旨在帮助用户在期末复习阶段系统地回顾和掌握Hadoop的核心概念、关键组件以及实际操作技巧,从而在考试或项目中...
- **Phoenix简介**:Phoenix是Apache软件基金会的开源项目,它为HBase提供了高性能的SQL查询能力,允许开发者使用标准的SQL语法来操作HBase表。 - **JDBC支持**:Phoenix通过JDBC接口提供了对HBase的访问,使得...
数据输入通过InputFormat类进行,Map阶段将输入数据切分成键值对,由Mapper处理,Reduce阶段由Reducer接收Mapper的输出,进行聚合计算。 五、Hadoop的优化与实践 实际应用中,为了提升性能,我们需要考虑数据块...