一、源码分析
/**
*
* hbase 采用aop的拦截器,将hbase table绑定对应的线程在被调用之前;
* 一旦对应的调用方法获取结果之后将关闭并移除
* 如果有一个已经绑定的table(来自前面的call或者transaction),
* 那么 interceptor 只是简单的操作
* 同时interceptor经常与HbaseSynchronizationManager结合使用
* @author Costin Leau
*/
public class HbaseInterceptor extends HbaseAccessor implements MethodInterceptor {
private static final Log log = LogFactory.getLog(HbaseInterceptor.class);
// 是否进行异常转换(1、输出异常链信息 2、输出原始异常信息)
private boolean exceptionConversionEnabled = true;
// hbase要进行绑定的table name
private String[] tableNames;
// 判断table name 集合是否为空
public void afterPropertiesSet() {
super.afterPropertiesSet();
Assert.notEmpty(tableNames, "at least one table needs to be specified");
}
public Object invoke(MethodInvocation methodInvocation) throws Throwable {
// 存放table name 与 hbase table 关联映射
Set<String> boundTables = new LinkedHashSet<String>();
// 通过HbaseSynchronizationManager判断对应的table name
// 是否已经绑定
// 若是没有绑定 则根据tableName、hbase Configuration
// 、charset、table factory构建HTableInterface对象
// 完成绑定之后,执行方法调用;并返回处理结果
for (String tableName : tableNames) {
if (!HbaseSynchronizationManager.hasResource(tableName)) {
boundTables.add(tableName);
HTableInterface table = HbaseUtils.getHTable(tableName, getConfiguration(), getCharset(), getTableFactory());
HbaseSynchronizationManager.bindResource(tableName, table);
}
}
try {
Object retVal = methodInvocation.proceed();
return retVal;
} catch (Exception ex) {
// 根据exceptionConversionEnabled的内容
// 输出异常信息链
if (this.exceptionConversionEnabled) {
throw convertHBaseException(ex);
}
else {
// 若是exceptionConversionEnabled为false
// 则只输出原始异常
throw ex;
}
} finally {
// 方法调用完成之后 要将前面绑定的table
// 执行release操作
for (String tableName : boundTables) {
HTableInterface table = (HTableInterface) HbaseSynchronizationManager.unbindResourceIfPossible(tableName);
if (table != null) {
HbaseUtils.releaseTable(tableName, table);
}
else {
log.warn("Table [" + tableName + "] unbound from the thread by somebody else; cannot guarantee proper clean-up");
}
}
}
}
//
private Exception convertHBaseException(Exception ex) {
return HbaseUtils.convertHbaseException(ex);
}
public void setTableNames(String[] tableNames) {
this.tableNames = tableNames;
}
/**
* Sets whether to convert any {@link IOException} raised to a Spring DataAccessException,
* compatible with the <code>org.springframework.dao</code> exception hierarchy.
* <p>Default is "true". Turn this flag off to let the caller receive raw exceptions
* as-is, without any wrapping.
* @see org.springframework.dao.DataAccessException
*
* @param exceptionConversionEnabled enable exceptionConversion
*/
public void setExceptionConversionEnabled(boolean exceptionConversionEnabled) {
this.exceptionConversionEnabled = exceptionConversionEnabled;
}
}
该类主要使用hbase table之前完成bind的操作;完成table name到具体的hbase table之间的映射;不过在执行完成对应的操作之后来释放绑定的资源
分享到:
相关推荐
Java操作hbase完成hbase数据文件下载
spring boot 对 hbase 客户端2.2.2 连接的支持,包含客户端的配置,及map直接操作数据库,极大的方便对大数据的管理!!!
phoenix +hbase+spring 整合技术 phoenix +hbase+spring 整合技术 phoenix +hbase+spring 整合技术 根据需要 下载 集成的jar phoenix-core-4.13.0-HBase-0.98.jar
Spring-Boot-HBase-RESTful Spring-Boot-HBase-RESTful ##安装 brew install hadoop hbase zookeeper## HBase入门 start-hbase.sh start sudo /usr/local/Cellar/zookeeper/3.4.8/bin/zkServer start参考示例代码: ...
基于SpringMVC+Spring+HBase+Maven搭建的Hadoop分布式云盘系统.zip 语言:Java 框架:springMVC 数据库:HBASE 可以作为毕业设计
Spring for Apache Hadoop 提供了 Spring 框架用于创建和运行 Hadoop MapReduce、Hive 和 Pig 作业的功能,包括 HDFS 和 HBase。如果你需要简单的基于 Hadoop 进行作业调度,你可添加 Spring for Apache Hadoop 命名...
基于hadoop+hbase+springboot实现的分布式网盘系统,适合本科毕业设计 资源包含的整个demo在Hadoop,和Hbase环境搭建好了,可以启动起来。 技术选型 1.Hadoop 2.Hbase 3.SpringBoot ...... 系统实现的功能 1.用户...
大数据hbase测试项目, String boot + hadoop + hbase 的一个测试项目 1.jdk路径不能有空格,中文 2.spring 示例官方xml配置中需有调整,避免 delete xxx 异常。 3.maven本地版本不能小于cm上hadoop、hbase版本。
2-1 HBase简介及其在大数据生态圈的位置 2-2 HBase数据存储模型及与关系型数据库的区别 2-3 Hadoop伪分布式集群安装 2-4 HBase伪分布式集群安装 2-5 HBase基础架构 2-6 HBase阶段小结 第3章 HBase原理与实战 介绍...
web端用spring mvc4.0.5 hadoop+hbase 伪分布实验环境 已实现用户注册 登陆 网盘管理:上传文件 创建文件夹 修改文件及文件夹 分享文件及文件夹 删除文件及文件夹 仿百度文库浏览文档 和下载文件功能
大数据企业实训项目:基于SpringMVC+Spring+HBase+Maven搭建的Hadoop分布式云盘系统。使用Hadoop HDFS作为文件存储系统、HBase作为数据存储仓库,采用SpringMVC+Spring框架实现,包括用户注册与登录、我的网盘、关注...
基于Hadoop分布式云盘系统使用Hadoop HDFS作为文件存储系统、HBase作为数据存储仓库,采用SpringMVC+Spring框架实现,包括用户注册与登录、我的网盘、关注用户、我的分享、我收到的分享等五大功能模块。其中我的网盘...
基于SpringMVC+Spring+HBase+Maven搭建的Hadoop分布式云盘系统。使用Hadoop HDFS作为文件存储系统、HBase作为数据存储仓库,采用SpringMVC+Spring框架实现,包括用户注册与登录、我的网盘、关注用户、我的分享、我...
Hadoop_and_Hbase_搭建_云存储_概述
源码主要用于学习:1. Spring Boot+Hadoop+Hive+Hbase实现数据基本操作,Hive数据源使
基于SpringMVC+Spring+HBase+Maven搭建的Hadoop分布式云盘系统。使用Hadoop HDFS作为文件存储系统、HBase作为数据存储仓库,采用SpringMVC+Spring框架实现,包括用户注册与登录、我的网盘、关注用户 毕业设计是高等...
DELI:HBase / NoSQL的日志结构二级索引介绍DELI是NoSQL系统的二级索引。 它当前支持全局索引,并且适用于类似HBase的NoSQL系统,在该系统中,通过... sudo docker run -i -t tristartom/deli-hadoop-hbase-ubuntu /bi
Hbase Spring boot实战分布式文件存储用于大数据处理的基本技术