记一次生产环境presto删表失败的问题

时间:2022-07-10 20:02:16

场景,开发用java程序连接presto创建一个表,这个表在hdfs的权限为:

记一次生产环境presto删表失败的问题

然后用presto去删除这个表

记一次生产环境presto删表失败的问题

报错,没有权限删除,查看上一级目录权限,发现权限正常

记一次生产环境presto删表失败的问题

直连hive删表

记一次生产环境presto删表失败的问题

发现正常. 然后使用developer直连hive 创建表,用presto删除还是报错没有权限。

连接hive 元数据MySQL

select t.OWNER, p.PRINCIPAL_NAME, count(1)  from TBLS t      join TBL_PRIVS p on p.TBL_ID=t.TBL_ID  group by t.OWNER, p.PRINCIPAL_NAME;

查看表的属主  select OWNER ,TBL_NAME  from TBLS  where TBL_NAME="t_5d550e8bce6a1952f8a8af7c" ;

记一次生产环境presto删表失败的问题

再次用presto(jmx.configure 记一次生产环境presto删表失败的问题

)创建表

记一次生产环境presto删表失败的问题

发现 common对应的count增加了,但是developer的没有增加。

问题就明了了。 presto默认是以启动presto的用户来做hive元数据的也就是这里的common用户, 但是存储用户是以jmx.configure 里面配置的用户来设定的。所以 在presto里面(developer用户进入)删除这个表会提示权限不够

解决方法修改 jmx.config

记一次生产环境presto删表失败的问题然后以common用户启动presto

最新结论

presto 有两个用户配置

第一个是记一次生产环境presto删表失败的问题 这个配置影响的是数据 在hdfs里面写入的属主

第二个是

记一次生产环境presto删表失败的问题这个配置目前测试并没有什么用!!!

另外 java程序的配置文件 以及你本地连接presto用的是什么用户  那么这个用户就是 hive里面创建的表的元数据的属主。

查看表的属主  select OWNER ,TBL_NAME  from TBLS  where TBL_NAME="t_5d550e8bce6a1952f8a8af7c" ;