您的位置:首页 > 编程语言 > Java开发

CDH开启kerberos,Java连接Hbase

2017-03-15 16:08 411 查看
          在使用CDH过程中,按照要求开启了Kerberos安全认证权限,使用java的api连接hbase的方法。

   首先需要在CDH中添加认证的用户,获取此用户的.keytab文件,从集群上拷贝krb5.conf文件到需要连接集群的客户机。

  然后将hbase-site.xm文件拷贝下来,需要用到里面配置信息。

  下面贴出了连接的测试代码;

   

import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.Cell;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.HColumnDescriptor;
import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.KeyValue;
import org.apache.hadoop.hbase.MasterNotRunningException;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.ZooKeeperConnectionException;
import org.apache.hadoop.hbase.client.Admin;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;
import org.apache.hadoop.hbase.client.Delete;
import org.apache.hadoop.hbase.client.Get;
import org.apache.hadoop.hbase.client.HBaseAdmin;
import org.apache.hadoop.hbase.client.HTable;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.client.ResultScanner;
import org.apache.hadoop.hbase.client.Scan;
import org.apache.hadoop.hbase.client.Table;
import org.apache.hadoop.hbase.filter.Filter;
import org.apache.hadoop.hbase.filter.SingleColumnValueFilter;
import org.apache.hadoop.hbase.util.Bytes;
import org.apache.hadoop.security.UserGroupInformation;
/**
* @Description: TODO(这里用一句话描述这个类的作用) HBase数据库操作实现类
* @author: wh
* @date: 2016-10-10 上午11:16:02
*/
public class HbaseService {
// 声明静态配置
private static Configuration conf = null;
private String ip = "10.134.161.107,10.134.161.108,10.134.161.110";//"192.168.204.214,192.168.204.242,192.168.204.215";10.134.161.107
private String port = "2181";

//private static Logger log = Logger.getLogger(HbaseService.class);
private final static Log log = LogFactory.getLog(HbaseService.class);
public HbaseService(){
//Map<String,List<TparameterConfig>> map = paramResourceService.getChildParamConfigByCode("ZOOKEEPERPZ");
// Configuration();
conf = new Configuration();
//		conf.set("hbase.zookeeper.property.clientPort", port);
//		conf.set("hbase.zookeeper.quorum", ip);

//conf = HBaseConfiguration.create(conf);

}
public String getIp() {
return ip;
}
public void setIp(String ip) {
this.ip = ip;
}
public String getPort() {
return port;
}
public void setPort(String port) {
this.port = port;
conf.set("hbase.zookeeper.property.maxclientcnxns", "300");
conf.set("hbase.ipc.client.socket.timeout.connect","1000");
conf.set("zookeeper.session.timeout", "500");
conf.set("hbase.regionserver.handler.count", "500");
System.setProperty("java.security.krb5.conf","C:/Users/user/Desktop/pwmx/krb5.conf");//windows 环境可以将此文件改成krb5.ini放到C:/Windows目录下;Linux环境放到/etc/文件下,改成krb5.sh文件,系统会自动加载
conf.set("hadoop.security.authentication","kerberos");
conf.set("hbase.master.kerberos.principal","hbase/_HOST@TEST.COM");//从Hbase-site.xml文件中获取配置信息
conf.set("hbase.regionserver.kerberos.principal","hbase/_HOST@TEST.COM");//从Hbase-site.xml文件中获取配置信息
conf.set("hbase.zookeeper.property.clientPort",port);
conf.set("hbase.security.authentication","kerberos");
conf.set("hbase.zookeeper.quorum",ip);
UserGroupInformation.setConfiguration(conf);
try{
UserGroupInformation.loginUserFromKeytab("YJ100001","C:/Users/user/Desktop/pwmx/YJ100001.keytab");//认证用户部分
}catch(IOException e) {
//TODOAuto-generated catch block
e.printStackTrace();
}
conf = HBaseConfiguration.create(conf);
}
public String addNameSpace(String tableName){
if(tableName.indexOf(":")!=-1){
return tableName;
}else
return "pwmx:"+tableName;
}
/**
* @param tableName
* @return
*/
public boolean exitTable(String tableName){

tableName = addNameSpace(tableName);
boolean flag = false;
HBaseAdmin admin = null;
try {
admin = new HBaseAdmin(conf);
try {
if (admin.tableExists(tableName))
flag = true;
} catch (IOException e) {
// TODO Auto-generated catch block
log.error(e);
}
} catch (Exception e1) {
// TODO Auto-generated catch block
log.error(e1);
}

//closeAdmin(admin);
return flag;
}

public static void main(String[] args) throws Exception {

// 创建表
HbaseService hs = new HbaseService();
hs.setPort("2181");
System.out.println("ssssssssssssss");
System.out.println(hs.exitTable("pwmx:test1"));
hs.exitTable("ACLineSegment");
}

}
以上是测试的代码,其中可能引用了多余的jar。不需要的可以自行删除。

   
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  hbase kerberos java