apache ranger的hive插件在CDH平台中的适配

apache ranger的hive插件在CDH平台中的适配

修正

之前写这篇文章时根据: 《CDH大数据平台集成Apache Ranger安全管理框架解决方案》这篇文章的指导,发现并不太好实现,因为无法获得服务进程的路径。所以我直接修改CDH服务启动脚本,但是发现会影响其他服务的启动。后来我发现上面这篇文章的copyConfigFile放错了地方,修改以后可用

问题描述

我使用的是CDH6.3.0,本来hive版本是2.2.1,后来升级为3.1.2。我们希望使用apache ranger作为权限控制组件。
根据教程,发现hiveserver2启动失败,报不能读取ranger的配置文件。查看可知,配置文件生成到指定的目录下,但是CDH服务每次的配置目录是变化的,所以hiveserver2启动失败的原因是因为配置文件读取不到。
根据: 《CDH大数据平台集成Apache Ranger安全管理框架解决方案》这篇文章的指导,发现并不太好实现,因为无法获得服务进程的路径。

解决方案

在C:\zhanghy\workspace\ranger\agents-common\src\main\java\org\apache\ranger\authorization\hadoop\config\RangerPluginConfig.java文件添加copyConfigFile方法:

// An highlighted block
private void copyConfigFile(String serviceType) {
        // 这个方法用来适配CDH版本的组件,非CDH组件需要跳出

        if (serviceType.equals("presto")){return;}

        // 环境变量
        Map map = System.getenv();
        Iterator it = map.entrySet().iterator();
        while(it.hasNext())
        {
            Map.Entry entry = (Map.Entry)it.next();
            LOG.info("env key: " + entry.getKey() + ", value: " + entry.getValue());
        }

        // 系统变量
        Properties properties = System.getProperties();
        Iterator itr =  properties.entrySet().iterator();
        while(itr.hasNext())
        {
            Map.Entry entry = (Map.Entry)itr.next();
            LOG.info("system key: " + entry.getKey() + ", value: " + entry.getValue());
        }


        String serviceHome = "CDH_" + serviceType.toUpperCase() + "_HOME";
        if ("CDH_HDFS_HOME".equals(serviceHome)) {
            serviceHome = "CDH_HADOOP_HOME";
        }

        serviceHome = System.getenv(serviceHome);

        File serviceHomeDir = new File(serviceHome);

        String userDir = System.getenv("CONF_DIR");

        File destDir = new File(userDir);

        LOG.info("-----Service Home: " + serviceHome);
        LOG.info("-----User dir: " + userDir);
        LOG.info("-----Dest dir: " + destDir);

        IOFileFilter regexFileFilter = new RegexFileFilter("ranger-.+xml");

        Collection<File> configFileList = FileUtils.listFiles(serviceHomeDir, regexFileFilter, TrueFileFilter.INSTANCE);

        for (File rangerConfigFile : configFileList) {
            try {
                FileUtils.copyFileToDirectory(rangerConfigFile, destDir);
            } catch (IOException e) {
                LOG.error("Copy ranger config file failed.", e);
            }
        }
    }

在addResourcesForServiceType方法第一行添加copyConfigFile的调用:

// An highlighted block
private void addResourcesForServiceType(String serviceType) {

        copyConfigFile(serviceType);

        String auditCfg    = "ranger-" + serviceType + "-audit.xml";
        String securityCfg = "ranger-" + serviceType + "-security.xml";
        String sslCfg 	   = "ranger-policymgr-ssl.xml";

        if (!addResourceIfReadable(auditCfg)) {
            addAuditResource(serviceType);
        }

        if (!addResourceIfReadable(securityCfg)) {
            addSecurityResource(serviceType);
        }

        if (!addResourceIfReadable(sslCfg)) {
            addSslConfigResource(serviceType);
        }
    }
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值