CDHはkerberosを開き、JavaはHbaseに接続する
CDHの使用中、要求に応じてKerberosセキュリティ認証権限を開き、javaのapiを使用してhbaseを接続する方法.
まずCDHに認証を追加する必要があります.このユーザーの.keytabファイルを取得し、クラスタからkrb 5.confファイルをクラスタに接続する必要があるクライアントにコピーします.
その後hbase-site.xmファイルをコピーし、構成情報を使用する必要があります.
下に接続のテストコードが貼られています.
まずCDHに認証を追加する必要があります.このユーザーの.keytabファイルを取得し、クラスタからkrb 5.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> 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/[email protected]");// Hbase-site.xml
conf.set("hbase.regionserver.kerberos.principal","hbase/[email protected]");// 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が参照されている可能性があります.不要なものは自分で削除できます.