目录
Java连接HBase相关操作
前提条件:Hadoop启动、HBase启动、Zookeeper启动(若使用hbase自带的zookeeper则可忽略这一步骤)、Kerberos启动、Kerberos主体信息未过期、导入相关包。
1. 获取HBase连接
无权限情况下的获取连接
/**
* 创建默认连接
*
* @param ip ip
* @param port 端口
* @return Connection
* @throws IOException
*/
public Connection getDefaultConnection(String ip, Integer port) throws IOException {
Configuration configuration = new Configuration();
configuration.set("hbase.zookeeper.quorum", ip + ":" + port);
return ConnectionFactory.createConnection(configuration);
}
使用kerberos认证的情况下获取HBase的连接
/**
* 获取Kerberos认证下的HBase的连接
*
* @param ip ip
* @param port 端口
* @param principal 主体(用户名) test/admin@TEST.COM
* @param krbConf kerberos域信息配置文件 /etc/krb5.conf
* @param kadmKeyTab 主体安全凭据文件(密码) /Kerberos/krb5kdc/kadm5.keytab
* @return Connection
* @throws IOException
*/
public static Connection getKerberosConnection(String ip, Integer port, String principal,
String krbConf, String kadmKeyTab) throws IOException {
// 设置krb5.conf kerberos域信息配置文件
System.setProperty("java.security.krb5.conf", krbConf);
// 打开kerberos认证日志(可以选择不打开,这里打开方便查看认证报错日志,便于修改问题)
System.setProperty("sun.security.krb5.debug", "true");
// 新建配置文件
Configuration conf = HBaseConfiguration.create();
// hadoop配置kerberos安全认证
conf.set("hadoop.security.authentication", "kerberos");
// hbase配置kerberos安全认证
conf.set("hbase.security.authentication", "kerberos");
// hbase master配置kerberos安全凭据认证
conf.set("hbase.master.kerberos.principal", principal);
// hbase master配置kerberos安全证书keytab文件位置
// conf.set("hbase.master.keytab.file", kadmKeyTab);
// hbase regionserver配置kerberos安全凭据认证
conf.set("hbase.regionserver.kerberos.principal", principal);
// hbase regionserver配置kerberos安全证书keytab文件位置
// conf.set("hbase.regionserver.keytab.file", kadmKeyTab);
// 配置zookeeper
conf.set("hbase.zookeeper.quorum", ip + ":" + port);
// hadoop的kerberos认证核心: UserGroupInformation类
UserGroupInformation.setConfiguration(conf);
UserGroupInformation.loginUserFromKeytab(principal, kadmKeyTab);
System.out.println("kerberos验证成功!");
Connection connection = ConnectionFactory.createConnection(conf);
System.out.println("hbase连接成功!");
return connection;
}
控制台打印输出:
kerberos验证成功!
hbase连接成功!
注意:若配置kerberos和hbase的主体不一致,只需要传入不同的主体和kerberos的keytab文件(hbase主体对应的keytab文件在配置中直接验证,可不用传入),并修改下述内容
// hmaster配置kerberos安全凭据认证
conf.set("hbase.master.kerberos.principal", hbasePrincipal);
// regionserver配置kerberos安全凭据认证
conf.set("hbase.regionserver.kerberos.principal", hbasePrincipal);
// kerberos认证
UserGroupInformation.loginUserFromKeytab(kerberosPrincipal, kadmKeyTab);
2. 获取HBase的命名空间nameSpace
/**
* 获取命名空间
*
* @param connection connection
* @throws IOException
*/
public static void getHbaseNameSpace(