最近在做web项目使用到了Hadoop,HBase,在这里对Spring For Hadoop(SHDP)的使用做个总结,主要使用了SHDP中提供的一些封装好的HBase模块。

Spring For Hadoop--Working With HBase的介绍

SHDP对HBase和Spring进行了整合,开发者可以通过这个框架可以很轻易地对HBase进行操作。(可以联想使用Spring+Hibernate那样来操作数据库)

SHDP提供了通过hbase-configuration来设置HBase的配置文件:如:

<!-- default bean id is 'hbaseConfiguration' that uses the existing 'hadoopCconfiguration' object -->
<hdp:hbase-configuration configuration-ref="hadoopCconfiguration" />
通过上面的声明可以更容易的创建HBase的Configrution对象,除此之外还支持管理HBase的连接:
当application Context关闭时,HBase中所有打开的连接都可以通过stop-proxy和delete-connetcion属性来调整。
<!-- delete associated connections but do not stop the proxies --><hdp:hbase-configuration stop-proxy="false" delete-connection="true">
foo=bar
property=value
</hdp:hbase-configuration>
另外,还可以通过指定zk的端口号来让客户端连接HBase
<!-- specify ZooKeeper host/port -->
<hdp:hbase-configuration zk-quorum="${hbase.host}" zk-port="${hbase.port}">
当然也通过引入其他配置文件的属性来为这个配置文件添加配置,如:
<hdp:hbase-configuration properties-ref="some-props-bean" properties-location="classpath:/conf/testing/hbase.properties"/>
DAO的支持
SHDP通过org.springframework.data.hadoop.hbase包为HBase提供为DAO的支持,通过HbaseTemplate 和其他几个回调函数如TableCallbackRowMapper ,ResultsExtractor可以轻易的实现HBase表的查询,数据的查询,扫描器的准备和一些结果的分析,极大的提高了开发效率
此DAO的核心是HbaseTemplate ,一个与HBase进行交互的高层抽象类,这个类的使用需要设置HBase的配置,一旦设置成功后就HbaseTemplate就是线程安全的,可以在同一时间内被多个实例重复使用(间接的达到了HBase连接池的效果,HBase连接池在一些需要频繁的访问HBase的web项目非常重要!!!!)
// default HBase configuration
<hdp:hbase-configuration/> // wire hbase configuration (using default name 'hbaseConfiguration') into the template
<bean id="htemplate" class="org.springframework.data.hadoop.hbase.HbaseTemplate" p:configuration-ref="hbaseConfiguration"/>
HbaseTemplate 还为表的执行逻辑或者结果及行的提取提供了通用的回调函数
// writing to 'MyTable'
template.execute("MyTable", new TableCallback<Object>() {
@Overridepublic Object doInTable(HTable table) throws Throwable {
Put p = new Put(Bytes.toBytes("SomeRow"));
p.add(Bytes.toBytes("SomeColumn"), Bytes.toBytes("SomeQualifier"), Bytes.toBytes("AValue"));
table.put(p);
return null;
}
});
这段代码展示了TableCallback 的使用,它完成了表的查找和资源的清理,而无需使用者里显式的处理,注意,在用不用回调函数时,HBase API抛出的异常都将被自动捕捉并且转换为Spring DAO的异常,而资源的清理也将被显式的调用。
 
此外HbaseTemplate 还为一些常用的操作提供了已经包装好的方法,用户可以直接使用而无需自己写回调函数
// read each row from 'MyTable'
List<String> rows = template.find("MyTable", "SomeColumn", new RowMapper<String>() {
@Override
public String mapRow(Result result,int rowNum) throws Exception{
return result.toString();
}
}));
(上面两段代码熟悉Spring和Hibernater可以轻易地联想到Spring提供的HibernateCallback和HibernaterTemplate)
 
除了HbaseTemplate 外,org.springframework.data.hadoop.hbase通过HbaseInterceptorHbaseSynchronizationManager
类支持自动将HBase表绑定给当前线程,也就是说,每个在HBase上执行的DAO操作的类都会被HbaseInterceptor
包装,因此一旦发现有在使用的表都将被绑定给当前线程,之后再使用这张表时就无需再查找表了(同样也达到了
HBase连接池的效果),调用结束后,表将被自己关闭。
 
参考资料:Spring For Hadoop官方文档
 

SHDP--Working With HBase(一)之基本介绍的更多相关文章

  1. Hbase 0.95.2介绍及下载地址

    HBase是一个分布式的.面向列的开源数据库,该技术来源于Google论文“Bigtable:一个结构化数据的分布式存储系统”.就像Bigtable利用了Google文件系统(File System) ...

  2. HBase的Snapshots功能介绍

    HBase的Snapshots功能介绍 hbase的snapshot功能还是挺有用的,本文翻译自cloudera的一篇博客,希望对想了解snapshot 的朋友有点作用,如果翻译得不好的地方,请查看原 ...

  3. HBase - 计数器 - 计数器的介绍以及使用 | 那伊抹微笑

    博文作者:那伊抹微笑 csdn 博客地址:http://blog.csdn.net/u012185296 itdog8 地址链接 : http://www.itdog8.com/thread-215- ...

  4. HBase - Filter - 过滤器的介绍以及使用 | 那伊抹微笑

    博文作者:那伊抹微笑 csdn 博客地址:http://blog.csdn.net/u012185296 itdog8 地址链接 : http://www.itdog8.com/thread-214- ...

  5. HBase 数据迁移方案介绍

    一.前言 HBase数据迁移是很常见的操作,目前业界主要的迁移方式主要分为以下几类: 图1.HBase数据迁移方案 从上面图中可看出,目前的方案主要有四类,Hadoop层有一类,HBase层有三类.下 ...

  6. HBase 数据迁移方案介绍 (转载)

    原文地址:https://www.cnblogs.com/ballwql/p/hbase_data_transfer.html 一.前言 HBase数据迁移是很常见的操作,目前业界主要的迁移方式主要分 ...

  7. HBase - Filter - 过滤器的介绍以及使用

    1 过滤器HBase 的基本 API,包括增.删.改.查等.增.删都是相对简单的操作,与传统的 RDBMS 相比,这里的查询操作略显苍白,只能根据特性的行键进行查询(Get)或者根据行键的范围来查询( ...

  8. HBase 数据迁移方案介绍(转载)

    原文链接:https://www.cnblogs.com/ballwql/p/hbase_data_transfer.html 一.前言 HBase数据迁移是很常见的操作,目前业界主要的迁移方式主要分 ...

  9. HBase Java API类介绍

    几个相关类与HBase数据模型之间的对应关系 java类 HBase数据模型 HBaseAdmin 数据库(DataBase) HBaseConfiguration HTable 表(Table) H ...

  10. HBase系统入门--整体介绍

    转自:http://www.aboutyun.com/thread-8957-1-2.html 问题导读:1.HBase查询与写入哪个更好一些?2.HBase面对复杂操作能否实现?3.Region服务 ...

随机推荐

  1. Android学习总结——去除标题栏

    1.继承app.Activity的Activity去除标题栏 @Override protected void onCreate(Bundle savedInstanceState) { super. ...

  2. HDU 4122 Alice's mooncake shop (单调队列/线段树)

    传送门:http://acm.hdu.edu.cn/showproblem.php?pid=4122 题意:好难读懂,读懂了也好难描述,亲们就自己凑合看看题意把 题解:开始计算每个日期到2000/1/ ...

  3. 飘逸的python - 解决一个有限制的组合需求

    假设有一个团队技能的需求. 这类技能是要集齐所有指定的人就能激活. 但是因为同一个人又2种身份存在,比如杨戬/神杨戬,于是便产生了组合. 这种组合跟普通组合不一样,普通组合可以随意组合.而这种组合是每 ...

  4. Chrome开发者工具详解 (5):Application、Security、Audits面板

    Application面板简介 该面板主要是记录网站加载的所有资源信息,包括存储数据(Local Storage.Session Storage.IndexedDB.Web SQL.Cookies). ...

  5. Jquery on() 动态绑定事件

    之前就一直受这个问题的困扰,在jQuery1.7版本之后添加了on方法,之前就了解过,其优越性高于live(),bind(),delegate()等方法,在此之前项目中想用这个来测试结果发现,居然动态 ...

  6. php + apache + mysql

    http://archive.apache.org/dist/httpd/binaries/win32/   Apache msi 下载地址

  7. 加载为应用程序池‘DefaultAppPool'提供服务的进程失败,应用程序池被禁用【解决方法】

    iis应用程序池不能启动2008年03月13日 星期四 15:29iis应用程序池不能启动.WINDOWS2003 ENT SERVER(64位)环境下(测试过32位系统一样操作无此问题),当打开“应 ...

  8. 0112.1——iOS开发之理解iOS中的MVC设计模式

    模型-视图-控制器(Model-View-Controller,MVC)是Xerox PARC在20世纪80年代为编程语言Smalltalk-80发明的一种软件设计模式,至今已广泛应用于用户交互应用程 ...

  9. 解不定方程ax+by=m的最小解

    给出方程a*x+b*y=c,其中所有数均是整数,且a,b,c是已知数,求满足那个等式的x,y值?这个方程可能有解也可能没解也可能有无穷多个解(注意:这里说的解都是整数解)? 既然如此,那我们就得找出有 ...

  10. leetcode_最长公共前缀

    题目:Write a function to find the longest common prefix string amongst an array of strings. 题解:给出的函数为: ...