操作hbase的客户端有以下几种方式:
1、原生HBase API:hbase-client 比较底层,需要自己进一步封装api,而且版本号和安装的hbase也要匹配,否则会报错
2、Spring's HBase API:spring-data-hadoop2019年4月5停止维护
3、Phoenix、Spark等:Apache Phoenix 使用SQL的方式来操作HBase
原生HBase API
依赖
<!--hbase-->
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-client</artifactId>
<version>2.4.13</version>
</dependency>
配置
application.yml
#HBase连接的zookeeper配置
hbase:
zookeeper:
quorum: 10.18.222.160
property:
clientPort: 2181
HbaseConfig.java
@Configuration
public class HbaseConfig {
@Value("${hbase.zookeeper.quorum}")
private String zookeeperQuorum;
@Value("${hbase.zookeeper.property.clientPort}")
private String clientPort;
@Bean
public HBaseBaseService getHbaseService() {
System.setProperty("hadoop.home.dir", "E:\\ProgramFiles\\hadoop-common-2.2.0-bin-master");
System.setProperty("HADOOP_USER_NAME", "hbase");
org.apache.hadoop.conf.Configuration conf = HBaseConfiguration.create();
conf.set("hbase.zookeeper.quorum", zookeeperQuorum);
conf.set("hbase.zookeeper.property.clientPort", clientPort);
return new HBaseBaseService(conf);
}
}
工具类
@Slf4j
public class HBaseBaseService {
/**
* 声明静态配置
*/
private Configuration conf = null;
private Connection connection = null;
public HBaseBaseService(Configuration conf) {
this.conf = conf;
try {
connection = ConnectionFactory.createConnection(conf);
} catch (IOException e) {
log.error("获取HBase连接失败");
}
}
/**
* 创建表
*
* @param tableName 表名
* @param columnFamily 列族名
* @return 是否创建成功
*/
public boolean creatTable(String tableName, List<String> columnFamily) {
Admin admin = null;
try {
admin = connection.getAdmin();
List<ColumnFamilyDescriptor> familyDescriptors = new ArrayList<>(columnFamily.size());
columnFamily.forEach(cf -> familyDescriptors.add(ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes(cf)).build()));
TableDescriptor tableDescriptor = TableDescriptorBuilder.newBuilder(TableName.valueOf(tableName))
.setColumnFamilies(familyDescriptors)
.build();
if (admin.tableExists(TableName.valueOf(tableName))) {
log.info("table Exists!");
} else {
admin.createTable(tableDescriptor);
log.info("create table Success!");
}
} catch (IOException e) {
log.error(MessageFormat.format("创建表{0}失败", tableName), e);
return false;
} finally {
close(admin, null, null);
}
return true;
}
/**
* 预分区创建表
*
* @param tableName 表名
* @param columnFamily 列族名的集合
* @param splitKeys 预分期region
* @return 是否创建成功
*/
public boolean createTableBySplitKeys(String tableName, List<String> columnFamily, byte[][] splitKeys) {
Admin admin = null;
try {
if (StringUtils.isBlank(tableName) || columnFamily == null
|| columnFamily.size() == 0) {
log.error("===Parameters tableName|columnFamily should not be null,Please check!===");
return false;
}
admin = connection.getAdmin();
if (admin.tableExists(TableName.valueOf(tableName))) {
return true;
} else {
List<ColumnFamilyDescriptor> familyDescriptors = new ArrayList<>(columnFamily.size());
columnFamily.forEach(cf -> {
familyDescriptors.add(ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes(cf)).build());
});
TableDescriptor tableDescriptor = TableDescriptorBuilder.newBuilder(TableName.valueOf(tableName))
.setColumnFamilies(familyDescriptors)
.build();
//指定splitkeys
admin.createTable(tableDescriptor, splitKeys);
log.info("===Create Table " + tableName
+ " Success!columnFamily:" + columnFamily.toString()
+ "===");
}
} catch (IOException e) {
log.error("", e);
return false;

本文介绍了操作HBase的三种方式,包括原生HBaseAPI、Spring的HBaseAPI(已停止维护)和ApachePhoenix。重点展示了使用原生HBaseAPI进行配置和操作,如创建表、预分区、查询与更新数据、删除数据等方法。
最低0.47元/天 解锁文章
1370

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



