SpringBoot使用Hbase
一,引入依赖
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-client</artifactId>
<version>2.3.2</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
</exclusions>
</dependency>
二,配置文件添加自己的属性
hbase:
zookeeper:
quorum: 10.xxx.xx.153,10.xxx.xx.154,10.xxx.xx.155
property:
clientPort: 2181
master:
port: 9001
三,配置类注入HBASE配置
package com.hbase.config;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @ClassName: HBaseConfig
* @author: Leemon
* @Description: TODO
* @date: 2023/4/12 18:06
* @version: 1.0
*/
@Configuration
@RefreshScope
public class HBaseConfig {
@Value("${hbase.zookeeper.quorum}")
private String zookeeperQuorum;
@Value("${hbase.zookeeper.property.clientPort}")
private String clientPort;
@Value("${hbase.master.port}")
private String masterPort;
@Bean
public org.apache.hadoop.conf.Configuration hbaseConfiguration() {
org.apache.hadoop.conf.Configuration conf = HBaseConfiguration.create();
conf.set("hbase.zookeeper.quorum", zookeeperQuorum);
conf.set("hbase.zookeeper.property.clientPort", clientPort);
// 如果hbase是集群,这个必须加上
// 这个ip和端口是在hadoop/mapred-site.xml配置文件配置的
conf.set("hbase.master", zookeeperQuorum + ":" + masterPort);
conf.set("hbase.client.keyvalue.maxsize", "20971520");
conf = HBaseConfiguration.create(conf);
return conf;
}
}
四,配置Hbase连接池
这里没有使用懒加载模式,减少启动后第一次访问时访问时间过长
package com.hbase.config;
import lombok.extern.slf4j.Slf4j;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import java.io.IOException;
import java.util.Enumeration;
import java.util.Vector;
/**
* @ClassName: HbaseConnectionPool
* @author: Leemon
* @Description: TODO
* @date: 2023/4/13 9:45
* @version: 1.0
*/
@Component
@Slf4j
public class HbaseConnectionPool {
/**
* 连接池最大的大小
*/
private int nMaxConnections = 20;
/**
* 连接池自动增加的大小
*/
private int nIncrConnectionAmount = 3;
/**
* 连接池的初始大小
*/
private int nInitConnectionAmount = 3;
/**
* 存放连接池中数据库连接的向量,初始时为null
*/
private Vector vcConnections = null;
@Resource
private Configuration hbaseConfiguration;
@PostConstruct
public void init() {
try {
vcConnections = new Vector();
createConnections(nInitConnectionAmount);
} catch (Exception e) {
e.printStackTrace();
}
}
public synchronized Connection getConnection() {
// 确保连接池己被创建
if (vcConnections == null) {
// 连接池还没创建,则返回null
return null;
}
// 获得一个可用的数据库连接
Connection conn = getFreeConnection();
// 如果目前没有可以使用的连接,即所有的连接都在使用中
while (conn == null) {
// 等一会再试
try {
wait(250);
} catch (InterruptedException e) {
e.printStackTrace();
}
// 重新再试,直到获得可用的连接,

文章介绍了如何在SpringBoot项目中集成Hbase,包括引入依赖、配置Zookeeper地址、创建Hbase配置类、配置连接池以及定义操作Hbase的服务类。特别地,文中提到的连接池管理避免了手动管理连接的问题,提高了效率。
最低0.47元/天 解锁文章
1380

被折叠的 条评论
为什么被折叠?



