CDHはkerberosを開き、JavaはHbaseに接続する

5178 ワード

CDHの使用中、要求に応じてKerberosセキュリティ認証権限を開き、javaのapiを使用してhbaseを接続する方法.
   まず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が参照されている可能性があります.不要なものは自分で削除できます.