环境
Ambari HDFS,Hive, Ranger
Presto
Hive 表中数据库为tableautest,表msg_push,其路径权限如下
[umecron@umetrip-hdp26-147xxx ~]$ hadoop fs -ls /apps/hive/warehouse/tableautest.db
Found 4 items
drwxrwxrwx - umecron hadoop 0 2019-03-19 19:35 /apps/hive/warehouse/tableautest.db/flt_status
drwx--x--x - hdfs hadoop 0 2019-03-19 19:35 /apps/hive/warehouse/tableautest.db/msg_push
drwxrwxrwx - umecron hadoop 0 2019-03-19 19:37 /apps/hive/warehouse/tableautest.db/pnr
drwxrwxrwx - umecron hdfs 0 2019-04-28 10:56 /apps/hive/warehouse/tableautest.db/testformat
问题
无论以何种用户启动Presto以及其Cli,查询表msg_push时都提示要以“hive”用户访问HDFS路径。
尝试一:Presto 官网文档
https://prestodb.github.io/docs/current/connector/hive.html
修改/opt/app/presto-server/etc/jvm.config
重启Presto,命令: ./launcher.py restart
进程显示HADOOP_USER_NAME已指定,但通过presto cli 查询msg_push仍然报相同错误。。。
尝试二:根据Presto文档https://prestodb.github.io/docs/current/connector/hive-security.html
设置/opt/app/presto-server/etc/catalog/hive.properties
重启Presto,通过presto cli 查询msg_push仍然报相同错误。。。
尝试三:
由于presto cli命令行中错误信息有限,尝试通过Presto监控UI 查看报错信息,是否有其他额外信息。
点击该查询项,查看详细信息
http://10.5.XXX.XXX:8084/ui/query.html?20190731_050335_00003_6kt66
红框中显示有关于hive metastore的信息。
回忆尝试一中文档关于hive metastore部分:
https://prestodb.github.io/docs/current/connector/hive.html
其中有参数hive.metastore.username,尝试下。
设置/opt/app/presto-server/etc/catalog/hive.properties
重启Presto后,查询成功!
貌似解决问题了??
按照之前理解Presto读取HDFS目录时,是以启动Presto进程的用户来读取的:“Presto will access HDFS using the OS user of the Presto process”,并且可以通过设置HADOOP_USER_NAME来指定用户。但现在好像只能通过设置hive.metastore.username,来修改访问HDFS的用户。而且根据文档解释,该参数是访问Hive metastore的用户:“The username Presto will use to access the Hive metastore.”
后来看到https://community.hortonworks.com/questions/76812/ranger-and-hiveserver2enabledoas-configuration.html
是由于Ambari集群中启用Ranger时,参数设置为了hive.server2.enable.doAs=false,导致无论客户端以哪个用户启动,实际都以hive用户访问HDFS。