1、前言
大家在开发Flink的时候,很多时候会把某些固定的维度信息存储在Hbase或者Redis等这些第三方库里,已方便来跟流发生关联查询输出。本文将从如何本地搭建一个Hbase环境开始讲起,到如何构建一个Hbase公共调用类,到如何构建一个异步调用Hbase的公共代码,再到最后实际调用代码后的输出。
2、本地利用Docker搭建HBase环境
2.1、下载Hbase镜像
docker pull harisekhon/hbase
2.2、启动Hbase镜像:
docker run -d -h myhbase -p 2181:2181 -p 8080:8080 -p 8085:8085 -p 9090:9090 -p 9095:9095 -p 16000:16000 -p 16010:16010 -p 16020:16020 -p 16201:16201 -p 16301:16301 --name hbase harisekhon/hbase
Hbase 端口映射图:
2.3、本地添加host
打开/etc/hosts ,如下图所示,添加一行
127.0.0.1 myhbase
此时在浏览器中输入hbase访问的地址,可以看到hbase的页面
http://localhost:16010/master-status
3、访问Hbase
3.1、图形化工具访问Hbase
如下的图形化工具,Mac和Windows都可以访问。
如果需要图形化工具的,评论区留下邮箱,本人看到了会第一时间发送
3.2、Java工具类访问
直接上代码,可以直接使用
package com.horse.utils.hbase;
import com.alibaba.fastjson.JSONObject;
import com.google.common.base.CaseFormat;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.beanutils.BeanUtils;
import org.apache.flink.util.StringUtils;
import org.apache.hadoop.hbase.*;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.util.Bytes;
import java.io.IOException;
import java.util.List;
/**
* @author :aaronChen
* @date :Created in 2022-02-22 16:51
* @description :
* @modifiedBy :
*/
@Slf4j
public class HBaseUtils {
public static Connection getHBaseConnection() {
try {
// 1.获取配置文件信息
Configuration configuration = HBaseConfiguration.create();
configuration.set("hbase.zookeeper.quorum", "localhost");
// configuration.set("hbase.zookeeper.property.clientPort", "2181");//可写可不写,默认为2181
// 2.创建连接对象
return ConnectionFactory.createConnection(configuration);
} catch (IOException e) {
log.error("获取Hbase相关基础信息失");
e.printStackTrace();
}
return null;
}
// static {
// try {
// // 1.获取配置文件信息
// Configuration configuration = HBaseConfiguration.create();
// configuration.set("hbase.zookeeper.quorum", "localhost");
// configuration.set("hbase.zookeeper.property.clientPort", "2181");//可写可不写,默认为2181
//
// // 2.创建连接对象
// connection = ConnectionFactory.createConnection(configuration);
//
// // 3.创建Admin对象
// admin = connection.getAdmin();
//
// } catch (IOException e) {
// log.error("获取Hbase相关基础信息失");
// e.printStackTrace();
// }
// }
/**
* @param tableName
* @return true or false
* @throws IOException
* @author aaronChen
* @description 判断表是否存在
*/
public static boolean isTableExist(String tableName, Admin admin) throws IOException {
// 1.判断表是否存在
boolean exists = admin.tableExists(TableName.valueOf(tableName));
// 2.返回结果
return exists;
}
/**
* @param tableName 需要创建的hbase表名,格式必须要是 命名空间:tablename
* @param cfs