一、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初始化
关注公众号,及时获取大数据干货知识