Google Cloud 上的 Hive 无法使用 hive 以外的任何用户访问数据

Hive on Google Cloud cant access data with any user other than hive

我在 Hadoop 上 运行ning Hive,并使用 bdutil 版本 1.3.1 成功安装在 Google Cloud Storage 上。我 运行 下面的命令:

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

作为 hive 用户,我可以毫不费力地创建/删除数据库和表:

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

我也给用户g运行ted SELECT数据库权限,这成功了,但是当我尝试使用数据库时仍然得到同样的错误。

这个好像有点像,不过我用的是最新版的bdutil,不知道是不是同一个问题。我还确认 dfs.permissions.enabled 设置为 false。

因此,如果我 运行 作为 hive 用户,一切似乎都正常,但我不想将 hive 用户名/密码发送给需要访问数据库的每个人。

我还应该尝试/研究什么?

感谢您的帮助

确实,部分问题是 GCS 连接器实际上没有 posix/hdfs 权限;它只报告静态权限,而它实际上使用与 GCE VM 上的 linux 帐户无关的 oauth2 凭据进行身份验证。

我们最近添加了一项功能,允许使用 fs.gs.reported.permissions 修改 GCS 连接器报告的权限:https://github.com/GoogleCloudPlatform/bigdata-interop/commit/93637a136cdb7354b1a93cc3c7a61c42b0bc78a6

尚未正式发布,但您可以尝试按照此处的说明构建快照:https://github.com/GoogleCloudPlatform/bigdata-interop

mvn -P hadoop2 package

然后用您的新版本替换现有的 GCS 连接器 jar 文件。或者,对于快速测试,您可以使用 temporary snapshot build we have,请记住提供的 link 将在截止日期后停止工作,并且快照构建尚未针对生产工作负载进行验证。如果您只想首先使用快照构建验证概念验证,那么应该很快就会有一个正式版本,它将提供一个干净的 jarfile 构建。

一旦您替换了 jarfile,您可以尝试修改 core-site.xml 以将 fs.gs.reported.permissions 设置为类似 755 甚至 777 的权限;请注意,将 GCS 连接器报告的权限设置为宽松实际上不会泄漏比其他方式更大的访问权限,因为 GCS 访问仅以 oauth2 凭据为条件(如果您在 GCE VM 上,则可能通过服务帐户)。唯一的目标是找到报告的权限,使您使用的 Hadoop 工具快乐(某些工具可能会抱怨 777 过于宽松)。