博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HBase之四--(2):spring hadoop 访问hbase
阅读量:4880 次
发布时间:2019-06-11

本文共 5273 字,大约阅读时间需要 17 分钟。

1、  环境准备:

Maven

Eclipse

Java

Spring

2、 Maven  pom.xml配置

org.apache.hbase
hbase-client
1.3.0
jdk.tools
jdk.tools
org.apache.hadoop
hadoop-common
2.7.3
jdk.tools
jdk.tools
org.springframework.data
spring-data-hadoop
2.0.2.RELEASE

 

 

3、 Spring和hadoop、hbase相关配置文件

其中标红的是spring  hadoop xml命名空间配置。

Hadoop hbase相关配置文件如下:

对应的properties如下:

spring hbasetemplate配置如下:

fs.default.name=hdfs://10.202.34.200:8020
hbase.rootdir=hdfs://10.202.34.200:8020/hbase hbase.zookeeper.quorum=10.202.34.200 hbase.zookeeper.property.clientPort=2181 hbase.zookeeper.property.dataDir=/hbase hbase.cluster.distributed=true zookeeper.session.timeout=180000 hbase.zookeeper.property.tickTime=4000 dfs.replication=3 hbase.regionserver.handler.count=100 hbase.hregion.max.filesize=10737418240 hbase.regionserver.global.memstore.upperLimit=0.4 hbase.regionserver.global.memstore.lowerLimit=0.35 hfile.block.cache.size=0.2 hbase.hstore.blockingStoreFiles=20 hbase.hregion.memstore.block.multiplier=2 hbase.hregion.memstore.mslab.enabled=true hbase.client.scanner.timeout.period=6000000 hbase.client.write.buffer=20971520 hbase.hregion.memstore.flush.size=268435456 hbase.client.pause=20 hbase.client.retries.number=11 hbase.client.max.perserver.tasks=50 hbase.client.max.perregion.tasks=10

 

Hbasetemplate使用代码示例:

1
2
3
4
5
6
7
8
9
10
11
Tile t = hbaseTemplate.get(
"GW_TILES"
"0_1_1"
new 
RowMapper<Tile>() {
 
            
@Override
            
public 
Tile mapRow(Result result, 
int 
rowNum) 
throws 
Exception {
                
// TODO Auto-generated method stub
                 
                
Tile t = 
new 
Tile();
                
t.setData(result.getValue(
"T"
.getBytes(), 
"key"
.getBytes()));
                
return 
t;
            
}
        
});

  

Hbasetemplate 常用方法简介:

      hbaseTemplate.get("GW_TILES", "0_1_1", new RowMapper  常用于查询,使用示例如下所示:

1
2
3
4
5
6
7
8
9
10
11
Tile t = hbaseTemplate.get(
"GW_TILES"
"0_1_1"
new 
RowMapper<Tile>() {
 
            
@Override
            
public 
Tile mapRow(Result result, 
int 
rowNum) 
throws 
Exception {
                
// TODO Auto-generated method stub
                 
                
Tile t = 
new 
Tile();
                
t.setData(result.getValue(
"T"
.getBytes(), 
"key"
.getBytes()));
                
return 
t;
            
}
        
});

  hbaseTemplate.execute(dataIdentifier, new TableCallback 常用于更新操作,使用示例如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
return 
hbaseTemplate.execute(dataIdentifier, 
new 
TableCallback<Boolean>() {
 
            
@Override
            
public 
Boolean doInTable(HTableInterface table) 
throws 
Throwable {
                
// TODO Auto-generated method stub
                
boolean 
flag = 
false
;
                
try
{
                
Delete delete = 
new 
Delete(key.getBytes());
                
table.delete(delete);
                
flag = 
true
;
                
}
catch
(Exception e){
                    
e.printStackTrace();
                
}
                
return 
flag;
            
}
        
});

备注:spring hbasetemplate针对hbase接口做了强大的封装,普通功能可以使用它强大的接口,同时复杂的功能,还可以使用hbase原生的接口,如:HTableInterface、Result等。其类方法如下图:

同时hbasetemplate封装了hbase连接池等,它的创建和释放通过配置来自动管理。

示例:

package com.sf.study.hbase;import org.apache.hadoop.hbase.KeyValue;import org.apache.hadoop.hbase.client.Result;import org.apache.hadoop.hbase.util.Bytes;import org.springframework.beans.factory.BeanFactory;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import org.springframework.data.hadoop.hbase.HbaseTemplate;import org.springframework.data.hadoop.hbase.RowMapper;public class SpringHbaseTest {    public static void main(String[] agrs) {        // 在xml配置文件中找到htemplate        ApplicationContext context = new ClassPathXmlApplicationContext(new String[] { "classpath:/com/sf/study/META-INF/config/biz-hbase.xml" });        BeanFactory factory = (BeanFactory) context;        HbaseTemplate htemplate = (HbaseTemplate) factory.getBean("hbaseTemplate");        // 使用find方法查找 fvp_dev_duan为表名 ,info为列族名称及family        htemplate.find("fvp_dev_duan", "info", new RowMapper
() { // result为得到的结果集 public String mapRow(Result result, int rowNum) throws Exception { // 循环行 for (KeyValue kv : result.raw()) { // 得到列族组成列qualifier String key = new String(kv.getQualifier()); // 得到值 String value = new String(kv.getValue()); System.out.println(key + "= " + Bytes.toString(value.getBytes())); } return null; } }); }}

 结果:

D= 10000092161011592W"7958687*209��n�

 

转载于:https://www.cnblogs.com/duanxz/p/4512864.html

你可能感兴趣的文章
写在读研初期
查看>>
开环增益对负反馈放大电路的影响
查看>>
MySQL-ERROR 2003
查看>>
SQL Server2012-SSIS的包管理和部署
查看>>
JavaScript内置对象
查看>>
如何把js的循环写成异步的
查看>>
ER图是啥?
查看>>
too many include files depth = 1024错误原因
查看>>
HTTP协议详解(三)
查看>>
Android零基础入门第84节:引入Fragment原来是这么回事
查看>>
解析SQL Server之任务调度
查看>>
参考资料地址
查看>>
08.路由规则中定义参数
查看>>
Pandas截取列部分字符,并据此修改另一列的数据
查看>>
java.lang.IllegalArgumentException
查看>>
【Spark】编程实战之模拟SparkRPC原理实现自定义RPC
查看>>
接口实现观察者模式
查看>>
四则运算完结篇
查看>>
Objective-C中的类目,延展,协议
查看>>
Python标准模块--Iterators和Generators
查看>>