Spring For Hadoop--Working With HBase(一)

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

  1. 对Spring For Hadoop--Working With HBase的基本认识(结合官方文档和自己的使用心得)
  2. 项目中的使用案例

1.对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官方文档

(下一篇我将对项目中的实战部分做总结,包括这部分的源码及开发中的注意事项)

时间: 2024-11-08 20:23:45

Spring For Hadoop--Working With HBase(一)的相关文章

Hadoop上配置Hbase数据库

已有环境: 1. Ubuntu:14.04.2 2.jdk: 1.8.0_45 3.hadoop:2.6.0 4.hBase:1.0.0 详细过程: 1.下载最新的Hbase,这里我下载的是hbase-1.0.0版本,然后打开终端,输入: tar zxvf hbase-1.0.0.tar.gz解压,然后将hbase放到合适的路径下(可以是用户目录,也可以是根目录,不太清楚是否必须要与hadoop放在用一个根目录下,本人是放在同一个目录下的) 2.修改2个配置文件(这里是伪分布式,单机版不再叙述)

Hadoop配置文件与HBase配置文件

本Hadoop与HBase集群有1台NameNode, 7台DataNode 1. /etc/hostname文件 NameNode: node1 DataNode 1: node2 DataNode 2: node3 ....... DataNode 7: node8 2. /etc/hosts文件 NameNode: 127.0.0.1 localhost #127.0.1.1 node1 #-------edit by HY(2014-05-04)-------- #127.0.1.1 n

Hadoop重启,Hbase出现Master exiting的错误:org.apache.hadoop.hbase.master.HMasterCommandLine: Master exiting

hadoop hdfs 重新启动或者重新格式话,可能会出现一些数据丢失,报错hbase的. 我的是试验环境,所以需要重新清理这些数据. 首先要重新创建hbase在hdfs里面的文件夹: 并把赋予拥有者权限 $ sudo -u hdfs hadoop fs -mkdir /hbase $ sudo -u hdfs hadoop fs -chown hbase /hbase 清理hbase在zookeeper中的缓存数据,缓存的目录在hbase-site.xml中有. hbase启动出现错误: 20

数道云大数据平台解决方案,Hadoop + HDFS+Hive+Hbase大数据开发整体架构设计

波若大数据平台(BR-odp)Hadoop + HDFS+Hive+Hbase大数据开发工具剖析: HDFS:分布式.高度容错性文件系统,能提供高吞吐量的数据访问,非常适合大规模数据集上的应用,大规模的波若大数据平台(BR-odp)用户部署上1000台的HDFS集群.数据规模高达50PB以上 HDFS和MR共同组成Hadoop分布式系统体系结构的核心.HDFS在集群上实现了分布式文件系统,MR在集群上实现了分布式计算和任务处理.HDFS在MR任务处理过程中提供了文件操作和存储等支持,MR在HDF

Hadoop数据存储—Hbase

大家都知道Hadoop是一个数据库,其实说的的就是Hbase.它和我们平常理解的关系型数据库有什么区别呢? 1.它是NoSQL的,它没有SQL的接口,有自己的一套API. 2.关系型数据库可以做汇总,可以进行常规的分析,但是Hbase不可以,它不能做汇总.那么Hbase操作不方便,不能做汇总,不能做分析,有什么作用呢?它的随机读写效率很高,可以存储海量数据,基于某个网点,某个城市,某个机器随机去查询速度快.或者去存储基于时间序列的数据,比如微信.微博.日志的数据,效率很高. 3.它的存储是列式的

Hadoop Hive与Hbase关系 整合

用hbase做数据库,但因为hbase没有类sql查询方式,所以操作和计算数据很不方便,于是整合hive,让hive支撑在hbase数据库层面 的 hql查询.hive也即 做数据仓库 1. 基于Hadoop+Hive架构对海量数据进行查询:http://blog.csdn.net/kunshan_shenbin/article/details/7105319 2. HBase 0.90.5 + Hadoop 1.0.0 集成:http://blog.csdn.net/kunshan_shenb

Hadoop学习之HBase和Hive的区别

Hive是为简化编写MapReduce程序而生的,使用MapReduce做过数据分析的人都知道,很多分析程序除业务逻辑不同外,程序流程基本一样.在这种情况下,就需要Hive这样的用户编程接口.Hive本身不存储和计算数据,它完全依赖於HDFS和MapReduce,Hive中的表纯逻辑表,就是些表的定义等,也就是表的元数据.使用SQL实现Hive是因为SQL大家都熟悉,转换成本低,类似作用的Pig就不是SQL.   HBase为查询而生的,它通过组织起节点内所有机器的内存,提供一个超大的内存Has

hadoop学习笔记----- Hbase理论

HBase Hbase是一个分布式的.面向列的开源数据库,该技术来源于Chang et al所写的Google论文"Bigtable:一个结构化数据的分布式存储系统". 就像Bigtable利用了Google文件系统(File System)所提供的分布式数据存储一样,HBase在Hadoop之上提供了类似于Bittable的能力. HBase是Apache的Hadoop项目的子项目. HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库,另一个不同的是HBase基

Hadoop系列之HBASE(分布式数据库)安装配置

1.hbase安装     cd /root/soft  tar zxvf hbase-0.98.5-hadoop2-bin.tar.gz  mv hbase-0.98.5-hadoop2  /usr/local/hadoop/hbase2.添加环境变量(所有节点都增加)  #vim /etc/profile  export HBASE_HOME=/usr/local/hadoop/hbase  export PATH=$PATH:/usr/local/hadoop/hbase/bin  #so

从零自学Hadoop(21):HBase数据模型相关操作下

阅读目录 序 变量 数据模型操作 系列索引 本文版权归mephisto和博客园共有,欢迎转载,但须保留此段声明,并给出原文链接,谢谢合作. 文章是哥(mephisto)写的,SourceLink 序 上一篇,我们讲述了HBase的数据模型相关操作的上部分.   下面我们开始介绍HBase的数据模型相关操作的下部分. 变量 一:定义变量 这样我们就可以使用t这个变量来代替table1了. t=get_table 'table1' 二:使用 t.put 'row1','cf1:a','v1' t.g