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

./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权限,这成功了,但是当我尝试使用数据库时仍然遇到相同的错误。

这似乎有点类似于this issue,但是我使用的是最新版本的bdutil,所以我不知道这是否是同一问题。我还确认dfs.permissions.enabled设置为false。

因此,如果我以配置单元用户身份运行它,一切似乎都可以正常工作,但是我不想将配置单元用户名/密码发送给需要访问数据库的每个人。

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

谢谢你的帮助

最佳答案

确实,部分问题是GCS连接器实际上没有posix / hdfs权限。它仅报告静态权限,而实际上使用不与GCE VM上的linux帐户绑定(bind)的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连接器jarfile。另外,要进行快速测试,可以使用temporary snapshot build we have,请记住,提供的链接将在截止日期后停止工作,并且尚未针对生产工作负载验证快照构建。如果您只想先通过快照构建来验证概念验证,那么应该很快会有一个正式版本,它将提供jarfile的完整构建。

替换jar文件后,您可以尝试修改core-site.xml以将fs.gs.reported.permissions设置为类似于755甚至是777的权限;请注意,将GCS连接器报告的权限设置为允许实际上不会泄漏任何其他访问权限,因为GCS访问仅取决于oauth2凭据(如果您使用的是GCE VM,则可能通过service-account)。唯一的目标是找到一个已报告的许可,该许可使您使用的Hadoop工具感到高兴(某些工具可能抱怨777太宽松)。

09-26 18:24
查看更多