Pyspark Sql:无法 运行 在 Kerberized 集群上查询。没有权限

Pyspark Sql: fail to run query on Kerberized Cluster. Permission denied

我运行下面的pyspark代码:

MySpark.py

# -*- coding: utf-8 -*-
from pyspark import SparkConf, SparkContext
from pyspark.sql import HiveContext

sconf = SparkConf().setAppName('test')
sc = SparkContext(conf=sconf)
sqlContext = HiveContext(sc)

df1 = sqlContext.sql("show databases")
df1.show()

df2 = sqlContext.sql("select * from mydb.mytable")
df2.show()

I 运行 MySpark 使用以下命令:

spark-submit MySpark.py --keytab myuser.keytab --principal myuser@MYDOMAIN.COM --spark.ssl.enabled=true

df1.show() 正常执行。 但是 df2.show() returns 出现以下异常:

org.apache.hadoop.security.AccessControlException: Permission denied: user=myuser, access=READ_EXECUTE, inode="/user/hive/warehouse/mydb.db/mytable":hive:hive:drwxrwx--x

首先我认为“myuser”没有读取数据库“mydb”的权限。但后来我使用了直线,我能够 运行 查询:

beeline -u "jdbc:hive2://name.domain.com:10000/default;principal=hive/_HOST@MYDOMAIN.COM;ssl=true"

Beeline version 2.1.1-cdh6.3.4 by Apache Hive
0: jdbc:hive2://name.domain.com:1000> select * from mydb.mytable;

'select' 按预期执行。所以 'myuser' 似乎有权读取数据库。 我是否遗漏了有关 kerberos 身份验证的内容?

Spark 不接受任何类型的身份验证。这将取决于 hdfs 身份验证。所以请检查 Ranger 是否有适当的 hdfs 权限和 hive database/table 权限。

我能够解决问题。我的用户没有权限从 HDFS 中的此数据库中读取。