hive不能与hive以外的任何用户访问数据

gr8qqesn  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(352)

我正在hadoop上运行hive,并使用bdutil版本1.3.1在google云存储上成功安装了。我运行了以下命令:

./bdutil -e platforms/hdp/ambari_env.sh deploy

作为配置单元用户,我能够轻松地创建/删除数据库和表:

hive> create database db_final location 'gs://cip-hadoop-dev-data/apps/hive/warehouse/db_final';
OK
Time taken: 1.816 seconds

但如果我尝试以任何其他用户的身份访问数据库,则会出现以下错误:

hive> use db_final;
FAILED: SemanticException MetaException(message:java.security.AccessControlException: Permission denied: user=andy, path="gs://cip-hadoop-dev-data/apps/hive/warehouse/db_final":hive:hive:drwx------)

我可以看出这是一个权限错误,因为文件权限是700,上面列出了这一点,并通过命令行确认:

[andy@hadoop-m ~]$ hdfs dfs -ls gs:///apps/hive/warehouse/
drwx------   - andy andy          0 2015-09-11 01:46 gs:///apps/hive/warehouse/db_final

我已尝试使用hdfs命令更改文件的权限,但它们保持不变:

[andy@hadoop-m ~]$ sudo hdfs dfs -chmod 750 gs:///apps/hive/warehouse/db_final
[andy@hadoop-m ~]$ hdfs dfs -ls gs:///apps/hive/warehouse/
drwx------   - andy andy         0 2015-09-11 01:46 gs:///apps/hive/warehouse/db_final

我还将数据库上的select权限授予了用户,虽然成功了,但在尝试使用数据库时仍会出现相同的错误。
这似乎有点类似于这个问题,但我使用的是bdutil的最新版本,所以我不知道是否是同一个问题。我还确认dfs.permissions.enabled设置为false。
因此,如果我以配置单元用户的身份运行它,一切看起来都正常,但我不想将配置单元用户名/密码发送给需要访问数据库的所有人。
我还应该调查什么?
谢谢你的帮助

whlutmcx

whlutmcx1#

事实上,部分问题是gcs连接器实际上没有posix/hdfs权限;它只报告静态权限,而实际上使用oauth2凭据进行身份验证,oauth2凭据不绑定到gce vm上的linux帐户。
我们最近添加了一个功能,允许使用 fs.gs.reported.permissions : https://github.com/googlecloudplatform/bigdata-interop/commit/93637a136cdb7354b1a93cc3c7a61c42b0bc78a6
它尚未在官方版本中发布,但您可以尝试按照以下说明构建快照:https://github.com/googlecloudplatform/bigdata-interop

mvn -P hadoop2 package

然后用新版本替换现有的gcs连接器文件。或者,对于快速测试,您可以使用我们提供的临时快照构建,只需记住提供的链接将在其截止日期后停止工作,并且快照构建尚未针对生产工作负载进行验证。如果您只想首先验证快照构建的概念证明,那么很快就会有一个官方版本提供一个干净的jarfile构建。
一旦替换了jar文件,就可以尝试修改 core-site.xml 设置 fs.gs.reported.permissions 像这样的 755 甚至 777 作为权限;请注意,将gcs connector报告的权限设置为permissive实际上不会泄漏比其他权限更大的访问权限,因为gcs访问权限仅以oauth2凭据为条件(如果您在gce vm上,则可能通过服务帐户)。唯一的目标是找到一个报告的权限,使您使用的hadoop工具高兴(有些工具可能会抱怨) 777 过于宽容)。

相关问题