zoukankan      html  css  js  c++  java
  • 大数据组件Kerberos安全访问关键代码

    版本信息

    <version.hbase>2.1.0-cdh6.2.1</version.hbase>
    <version.hadoop>3.0.0-cdh6.2.1</version.hadoop>
    <version.hive.jdbc>2.1.1-cdh6.2.1</version.hive.jdbc>
    

    HDFS访问

     private Configuration createHDFSConfiguration(String cluster){
            Configuration configuration = new Configuration();
            try{
                configuration.addResource(new Path(Objects.requireNonNull(PathUtil.getResourcePath("hdfsconf/"+cluster+"/core-site.xml")).toString()));
                configuration.addResource(new Path(Objects.requireNonNull(PathUtil.getResourcePath("hdfsconf/"+cluster+"/hdfs-site.xml")).toString()));
                //防止打包后与hadoop-common包里的fileSystem冲突导致异常
                configuration.set("fs.hdfs.impl", "org.apache.hadoop.hdfs.DistributedFileSystem");
                //kerberos
                System.setProperty("java.security.krb5.conf", KerberosCheckUtil.getKrb5Conf());
            } catch (Exception e){
                logger.error(cluster + " get hdfs configuration error !",e);
                throw new MyCheckException("cluster + get hdfs configuration error !");
            }
            return configuration;
        }
    
        public HDFSDao(String cluster) {
            init();
            try {
                Configuration hdfsConf = createHDFSConfiguration(cluster);
                UserGroupInformation.setConfiguration(hdfsConf);
                if (UserGroupInformation.isLoginKeytabBased() && UserGroupInformation.getLoginUser().getUserName().equals(KerberosCheckUtil.principal)) {
                    logger.info("hdfs:" + cluster + ",user [{}] is login already!", KerberosCheckUtil.principal);
                } else {
                    UserGroupInformation.loginUserFromKeytab(KerberosCheckUtil.principal, KerberosCheckUtil.getKeyTabFile());
                    logger.info("hdfs:" + cluster + ",user [{}] login successed!",KerberosCheckUtil.principal);
                    new Timer().scheduleAtFixedRate(new TimerTask() {
                        @Override
                        public void run() {
                            try {
                                UserGroupInformation.getLoginUser().checkTGTAndReloginFromKeytab();
                                logger.info("hdfs:" + cluster + ",User [{}]  is relogin from keytab", KerberosCheckUtil.principal);
                            } catch (IOException e) {
                                // TODO Auto-generated catch block
                                logger.error("kerberos reloginFromKeytab error", e);
                            }
                        }
                    }, 0, 300 * 60 * 1000);
                }
                fileSystem = FileSystem.get(hdfsConf);
            } catch (IOException e) {
                e.printStackTrace();
                logger.error("hdfs kerbose登录报错," + KerberosCheckUtil.getKeyTabFile());
                throw new MyCheckException("kerbose登录报错," + KerberosCheckUtil.getKeyTabFile());
            }
        }
    

    HBase访问

    public HBaseDao(String cluster)  {
        init();
    	hbConf = createHbaseConfiguration(cluster);
    	try {
    		//kerberos
    		if (getIsKerberosOnByCluster(cluster)){
    			logger.debug("[KEYTAB]" + KerberosCheckUtil.getKeyTabFile());
    			logger.debug("[KRB5]" + KerberosCheckUtil.getKrb5Conf());
    			try{
    				UserGroupInformation.setConfiguration(hbConf);
    				if (UserGroupInformation.isLoginKeytabBased() && UserGroupInformation.getLoginUser().getUserName().equals(KerberosCheckUtil.principal)) {
    					logger.info("hbase:" + cluster + ",user [{}] is login already!",KerberosCheckUtil.principal);
    				}else {
    					UserGroupInformation.loginUserFromKeytab(KerberosCheckUtil.principal, KerberosCheckUtil.getKeyTabFile());
    					logger.info("hbase:" + cluster + ",user [{}] login successed!",KerberosCheckUtil.principal);
    					new Timer().scheduleAtFixedRate(new TimerTask() {
    						@Override
    						public void run() {
    							try {
    								UserGroupInformation.getLoginUser().checkTGTAndReloginFromKeytab();
    								logger.info("hbase:" + cluster + ",User [{}]  is relogin from keytab", KerberosCheckUtil.principal);
    							} catch (IOException e) {
    								// TODO Auto-generated catch block
    								logger.error("kerberos reloginFromKeytab error", e);
    							}
    						}
    					}, 0, 300 * 60 * 1000);
    				}
    			}catch (IOException e){
    				e.printStackTrace();
    				logger.error("kerbose登录报错," + KerberosCheckUtil.getKeyTabFile());
    				throw new MyCheckException("kerbose登录报错," + KerberosCheckUtil.getKeyTabFile());
    			}
    		}
    		//executor = Executors.newFixedThreadPool(20);
    		conn = ConnectionFactory.createConnection(hbConf);
    		//conn = ConnectionFactory.createConnection(conf,executor);
    	} catch (IOException e) {
    		// TODO Auto-generated catch block
    		logger.error("create hbase connection error", e);
    		throw new MyCheckException("创建链接失败" + e.getMessage());
    	}
    }
    
    private Configuration createHbaseConfiguration(String cluster){
    	Configuration hbaseConf = HBaseConfiguration.create();
    	//调整部分配置
    	String hbaseIp = getHbaseIpByCluster(cluster);
    	hbaseConf.set("hbase.zookeeper.quorum", hbaseIp + ":2181");
    	hbaseConf.set("hbase.master", hbaseIp+":60000");
    	//避免超时
    	hbaseConf.set("hbase.rpc.timeout", "10000");//10s
    	hbaseConf.set("hbase.client.retries.number", "2");
    	hbaseConf.set("hbase.client.operation.timeout", "10000");
    	//kerbose
    	if (getIsKerberosOnByCluster(cluster)) {
    		hbaseConf.set("hadoop.security.authentication", "Kerberos");
    		hbaseConf.set("hbase.security.authentication", "kerberos");
    		//hbaseConf.set("hbase.master", getHbaseIpByCluster(cluster) + ":16000");
    		hbaseConf.set("hbase.master.kerberos.principal", "hbase/_HOST@CVBG.COM");
    		hbaseConf.set("hbase.regionserver.kerberos.principal", "hbase/_HOST@CVBG.COM");
    		System.setProperty("javax.security.auth.useSubjectCredOnly", "false");
    		//System.setProperty("sun.security.krb5.debug", "true");
    		System.setProperty("java.security.krb5.conf", KerberosCheckUtil.getKrb5Conf());
    	}
    	return hbaseConf;
    }
    
    
    ### Hive访问
    
    
    private Configuration createKerberosConfiguration(){
        System.setProperty("java.security.krb5.conf", KerberosCheckUtil.getKrb5Conf());
        Configuration hdfsConf = new Configuration();
        hdfsConf.setBoolean("hadoop.security.authorization", true);
        hdfsConf.set("hadoop.security.authentication", "kerberos");
        return hdfsConf;
    }
    
    public HiveDao(String cluster) {
        init();
        //kerberos认证
        Configuration conf = createKerberosConfiguration();
        try {
            UserGroupInformation.setConfiguration(conf);
            if (UserGroupInformation.isLoginKeytabBased() && UserGroupInformation.getLoginUser().getUserName().equals(KerberosCheckUtil.principal)) {
                logger.info("hive:" + cluster + ",user [{}] is login already!",KerberosCheckUtil.principal);
            }else {
                UserGroupInformation.loginUserFromKeytab(KerberosCheckUtil.principal, KerberosCheckUtil.getKeyTabFile());
                logger.info("hive:" + cluster + ",user [{}] login successed!",KerberosCheckUtil.principal);
                new Timer().scheduleAtFixedRate(new TimerTask() {
                    @Override
                    public void run() {
                        try {
                            UserGroupInformation.getLoginUser().checkTGTAndReloginFromKeytab();
                            logger.info("hive:" + cluster + ",User [{}]  is relogin from keytab", KerberosCheckUtil.principal);
                        } catch (IOException e) {
                            // TODO Auto-generated catch block
                            logger.error("kerberos reloginFromKeytab error", e);
                        }
                    }
                }, 0, 300 * 60 * 1000);
            }
        } catch (Exception e) {
            e.printStackTrace();
            logger.error("kerbose登录报错," + KerberosCheckUtil.getKeyTabFile());
            throw new MyCheckException("kerbose登录报错," + KerberosCheckUtil.getKeyTabFile());
        }
        //配置连接
        dataSource = createConnectionPool(cluster);
    }
    
    
    ### Impala访问
    
    
    public ImpalaDbDao(String cluster) {
        init();
        //kerberos认证
        Configuration conf = createKerberosConfiguration();
        try {
            UserGroupInformation.setConfiguration(conf);
            if (UserGroupInformation.isLoginKeytabBased() && UserGroupInformation.getLoginUser().getUserName().equals(KerberosCheckUtil.principal)) {
                logger.info("impala:" + cluster + ",user [{}] is login already!",KerberosCheckUtil.principal);
            }else {
                UserGroupInformation.loginUserFromKeytab(KerberosCheckUtil.principal, KerberosCheckUtil.getKeyTabFile());
                logger.info("impala:" + cluster + ",user [{}] login successed!",KerberosCheckUtil.principal);
                new Timer().scheduleAtFixedRate(new TimerTask() {
                    @Override
                    public void run() {
                        try {
                            UserGroupInformation.getLoginUser().checkTGTAndReloginFromKeytab();
                            logger.info("impala:" + cluster + ",User [{}]  is relogin from keytab", KerberosCheckUtil.principal);
                        } catch (IOException e) {
                            // TODO Auto-generated catch block
                            logger.error("kerberos reloginFromKeytab error", e);
                        }
                    }
                }, 0, 300 * 60 * 1000);
            }
        } catch (Exception e) {
            e.printStackTrace();
            logger.error("kerbose登录报错," + KerberosCheckUtil.getKeyTabFile());
            throw new MyCheckException("kerbose登录报错," + KerberosCheckUtil.getKeyTabFile());
        }
        //配置连接
        dataSource = createConnectionPool(cluster);
    }
    private Configuration createKerberosConfiguration(){
        System.setProperty("java.security.krb5.conf", KerberosCheckUtil.getKrb5Conf());
        Configuration hdfsConf = new Configuration();
        hdfsConf.setBoolean("hadoop.security.authorization", true);
        hdfsConf.set("hadoop.security.authentication", "kerberos");
        return hdfsConf;
    }
    
    注: KerberosCheckUtil.getKeyTabFile()返回keytab文件路径;KerberosCheckUtil.getKrb5Conf()返回kerberos配置文件路径
  • 相关阅读:
    C# 操作Excel
    分享C#原生ID(流水号)生成功能实现
    Win7 64bit系统下未能加载文件或程序集“System.Data.SQLite”的解决办法
    c# 软件自动在线更新代码
    Win7 64bit系统下未能加载文件或程序集“System.Data.SQLite”的另一解决办法
    ActiveX控件的另类免费签名法(补充)
    ActiveX控件的另类免费签名法
    常用函数以及正则校验
    Delphi键盘按键伪码
    格林治时间
  • 原文地址:https://www.cnblogs.com/darange/p/13693026.html
Copyright © 2011-2022 走看看