FAQ-任务提示Permission denied如何进行排查

任务执行抛出权限问题错误,一般为用户不具备表或目录的操作权限,以以下报错信息为范例说明排查步骤:

#情况1:缺少表权限
Error while compiling statement: FAILED: HiveAccessControlException Permission denied: user [bdms_grp.mammut.partner02] does not have [SELECT] privilege on [xf/demo/createtime,id]
 

#情况2:缺少目录权限(Hive外表)
Error while compiling statement: FAILED: SemanticException Unable to fetch table pf_text_user. org.apache.hadoop.security.AccessControlException: Permission denied: user=bdms_grp.mammut.partner02, access=EXECUTE, inode="/user/mammut":mammut:hdfs:drwxr-x---
    at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.check(FSPermissionChecker.java:351)
    ……
  
#声明任务执行用户(猛犸执行任务时,会默认在个人用户名前添加bdms_,实际用户名应去除bdms_前缀)
user=bdms_grp.mammut.partner02
  
#声明用户需要的权限,(猛犸中默认可读即具备可执行权限)
does not have [SELECT]
access=EXECUTE
 
#声明用户需要操作的目录(猛犸中对表进行授权会默认对表的LOCATION授予同样权限)
[xf/demo/createtime,id]
node="/user/mammut"

猛犸中表/目录权限仅支持角色级别授权,暂不支持用户级授权,故碰到权限问题,应按照以下流程进行排查:

1、查找当前任务执行用户名,前往项目中心查找用户归属角色,通过查询发现grp.mammut.partner02用户为数据开发角色(如无项目中心–成员管理菜单,需联系项目管理员协助排查或要求项目管理员进行功能权限授权)

2、核查数据开发角色对日志提示的表或目录具备的权限

  • 表权限核查 通过猛犸平台–数据管理–元数据管理–物理视图,搜索表名,查看该表详情中权限状态,如无任务提示权限,则联系项目管理员授予用户归属角色对应权限即可;

  • 目录权限核查 通过猛犸平台--项目中心–目录权限,选中对应目录,查看右侧已授权角色及对应权限,如无任务提示权限,联系项目管理员授予用户归属角色对应权限即可;

关于权限问题,存在一种特殊情况容易导致报错,即分区表中分区目录不是表目录的子目录时,进行表授权时,无法递归授权到分区目录,将会触发表具备权限,但目录无权限,需在表授权后再次进行目录授权;

例如:xf.demo表的目录为 /user/poc/hive_db/xf.db/demo,正常情况下分区目录应为/user/poc/hive_db/xf.db/demo/d=xxx模式,但如果创建分区时指定了分区路径为/user/poc/hive_db/xf.db/other/d=xxx,则在进行表授权后,需再对目录/user/poc/hive_db/xf.db/other/d=xxx进行授权,否则将触发权限异常;