Spring for Apache Hadoop 的 reference HBase支持部分

<!--[if !supportLists]-->7.1. <!--[endif]-->HBase

SHDP通过hbase-configuration命名空间元素为HBase提供了基本的配置。

<!—default bean id is ‘hbaseConfiguration’ that uses the existing ‘hadoopConfiguration’ object -->

<hdp:hbase-configuration configuration-ref=”hadoopCconfiguration” />

上面的声明不仅仅是简单地创建了一个HBase配置对象,它还管理这个HBase后端的连接:当应用的上下文关闭时断开连接,所以HBase任何打开的连接都可以通过stop-proxydelete-connection属性进行调整。

<!--delete associated connections but do not stop the proxies-->

<hdp:hbase-configuration stop-proxy=”flase” delete-connection=”true” >

       foo=bar

       property=value

</hadp:hbase-configuration>

另外,可以设置HBase Server使用的ZooKeeper端口当连接到一个远程实例时非常有用(注意,可以完整地配置HBase包括Zookeeper的主机端口HBase)。

<!—spacify Zookeeper host/port - ->

<hdp:hbase-configuration zk-quorm=”${hbase.host}” zk-port=”${hbase.port}” />

像其他的元素一样,可以向这个配置设定额外的属性。实际上,hbase-configuration提供了和hadoop 配置一样的属性配置。

<hdp:hbase-configuration properties-ref=”some-props-bean” properties-location=”classpath:/conf/testing/hbase.properties” />

7.1. DAO支持

Spring FrameWork里最受欢迎和最强大的一个功能是数据访问对象(DAO)。它使处理数据访问技术变得简单和一致,并且以最小的代价进行调换或者连系上述持久化存储(不用担心捕捉的异常,样板式的代码或者以及资源的获取和处理)。我们建议阅读Spring Framework的参考文档而不是在此重申DAO支持的价值所在。

SHDP通过org.springframework.data.hadoop.hbase包为Apache HBase提供了同样的功能:HbaseTemplate与其他几个回调函数例如TableCallbackRowMapperResultExtractor 一起为查找HBase的表、运行查询、扫描器准备、结果分析剔除了底层冗长无趣的细节,使开发者专注于真正的工作。

DAO支持的核心是HbaseTemplate—一个与HBase交互的高层抽象类。Template需要一个HBase的配置,一旦设置完成,template就是线程安全的,可以在同一时间内多个实例间重用。

// default HBase configuration

<hdp:hbase-configuration/>

//  hbase的配置链接到template

<bean id=”htemplate” class=”org.springframework.data.hadoop.hbase.HbaseTemplate” p:configuration-ref=”hbaseConfiguration”/>

Template为对表的运算逻辑或者产生结果或者行提取提供了通用的回调函数,而且为一般操作提供了工具方法。下面是template如何使用的例子:

// writing to ‘MyTable’

template.execute(“MyTable”, new TableCallback<Object>(){

       @Override

       Public 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;

}

});

 

// 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();

}

});

第一段代码展示了通用的TableCallback,它完成了table的定位和资源的清理,因此用户代码就无需再做了。注意回调函数的签名—HBase API抛出的任何异常都被自动捕捉,转换为Spring DAO的异常,并且资源清理被显式地执行。第二个例子展示了专用的查询方法这个例子中是find方法,如方法名所示找到所有符合给定条件的行用户代码可以对每一个记录进行操作(一般是一些类型转换排序或者映射)。如果需要获取整个结果集,可以使用ResultsExtractor代替RowMapper

        除template外,这个包通过HbaseInterceptorHbaseSyncronizationManager类提供了自动将HBase表绑定给当前线程的支持。意味着,每个在HBase上执行DAO操作的类都可以被HbaseInterceptor包装,因此每个在用的表一旦被发现都会绑定给这个线程,任何后来对这个类的调用都可以避免查找表。调用结束时,表被自动关闭,所以在请求之间没有泄露。

猜你喜欢

转载自karo-lee.iteye.com/blog/2209667