Hive的权限管理一直是比较弱的,最近在线上发现了一个问题.线上一个ETL开发droptemp database里的一张表,但是发现hdfs上文件还在!

首先明确一下Hive drop table的流程:

0.删除metadata

1.如果没有启用trash则直接删除hdfs文件

2.如果启用trash

a)如果trash目录无权限访问(默认/user/<username>/.trash)文件则成为“僵尸”文件,永远保留在那里

b)否则若用hive command执行或hiveserver开启了impersonation则将文件移动到/user/<username>/.trash下,否则移动到/user/<hiveserver runner>/.trash

线上出现这个问题是因为/user目录的mode700,用户无法创建自己的目录导致删除文件失败,从以上流程可以看到,Hive的权限和HDFS的权限是相分离的,而这个问题实为Hive的Bug一直还没有得到修复(HIVE-1665https://issues.apache.org/jira/browse/HIVE-1665.