Impala4.0集成Ranger后HDFS ACL权限导致无法插入Hive表

一、impala4.0集成ranger后无法向hive表中插入数据修改

1.问题描述

通过hive创建的表属主为当前用户,hdfs各级路径在ranger上进行赋权才可通过hive对表进行读写操作。impala集成ranger后,ranger只能管控库表等权限,impala会首先获取hdfs的acl权限进行验证,由于集成了ranger导致路径权限由ranger进行控制而不是acl,导致无法通过impala往hive创建的表里进行写入等操作。

2.解决

将返回hdfs路径acl权限代码进行修改,直接返回具有读写权限

修改fe/src/main/java/org/apache/impala/catalog/HdfsTable.java第795行代码进行修改并重新进行编译

  private static TAccessLevel getAvailableAccessLevel(String tableName,
      Path location, FsPermissionCache permCache) throws IOException {
    Preconditions.checkNotNull(location);
    FileSystem fs = location.getFileSystem(CONF);

    if (assumeReadWriteAccess(fs)) return TAccessLevel.READ_WRITE;
    while (location != null) {
      try {
        FsPermissionChecker.Permissions perms = permCache.getPermissions(location);
//注释以下内容
//        if (perms.canReadAndWrite()) {
//          return TAccessLevel.READ_WRITE;
//        } else if (perms.canRead()) {
//          return TAccessLevel.READ_ONLY;
//        } else if (perms.canWrite()) {
//          return TAccessLevel.WRITE_ONLY;
//        }
//        return TAccessLevel.NONE;
//新增下面一行
        return TAccessLevel.READ_WRITE;
      } catch (FileNotFoundException e) {
        location = location.getParent();
      }
    }

3.更改后jar包下载

链接:https://pan.baidu.com/s/1glO-l9hfAi-EwC1Ml7oU4A?pwd=iarr
提取码:iarr

4.后续改造方向:

1.当HDFS集成ranger时,impala对hdfs路径鉴权走ranger

2.当HDFS不集成ranger时,impala对hdfs路径鉴权走acl

3.通过impala创建表,在hdfs路径属主同hive为建表用户

二、ranger初始化时需要用mysql root账号改造

1.问题描述

当ranger进行初始化时,需要使用mysql root账号进行,这样在生产环境很不合理,容易造成root账号的泄漏,mysql其余数据库也会存在风险,所以需要对ranger进行改造,使其不用root账号进行初始化。

2.解决

经过代码分析,使用root账号主要进行了3个部分的工作,建库,建表,赋权。这些操作都可以让管理员事先进行完提供给我们。所以将dba_script.py中1810-1817行代码删除。

1810                         log("[I] ---------- Creating Ranger Admin db user ---------- ","info")
1811                        xa_sqlObj.create_rangerdb_user(xa_db_root_user, db_user, db_password, xa_db_root_password,dryMode)
1812                         log("[I] ---------- Creating Ranger Admin database ----------","info")
1813                        xa_sqlObj.create_db(xa_db_root_user, xa_db_root_password, db_name, db_user, db_password,dryMode)
1814                         log("[I] ---------- Granting permission to Ranger Admin db user ----------","info")
1815                        if not XA_DB_FLAVOR == "SQLA":
1816                                xa_sqlObj.grant_xa_db_user(xa_db_root_user, db_name, db_user, db_password, xa_db_root_password, is_revoke,dryMode)
1817                         # Ranger Admin DB Host AND Ranger Audit DB Host are Different OR Same

3.更改后流程

1)管理员创建ranger数据库

2)管理员创建ranger数据库的管理用户

3)管理员将ranger数据库赋予管理用户

4)ranger初始化

关注公众号,及时获取大数据干货知识

在这里插入图片描述

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值