HDFS中Hive代理用户的最佳解决方案是什么?

时间:2017-03-29 21:54:58

标签: hadoop permissions hive hdfs yarn

我对HDFS和Hive中的proxyuser设置非常困惑。我在hive-site.xml中启用了doAs选项

<property>
    <name>hive.server2.enable.doAs</name>
    <value>true</value>
</property>

core-site.xml中的proxyuser

<property>
    <name>hadoop.proxyuser.hdfs.hosts</name>
    <value>*</value>
</property>

<property>
    <name>hadoop.proxyuser.hdfs.groups</name>
    <value>*</value>
</property>

但这会导致:

2017-03-29 16:24:59,022 INFO org.apache.hadoop.ipc.Server: Connection from 172.16.0.239:60920 for protocol org.apache.hadoop.hdfs.protocol.ClientProtocol is unauthorized for user hive (auth:PROXY) via hive (auth:SIMPLE)
2017-03-29 16:24:59,023 INFO org.apache.hadoop.ipc.Server: Socket Reader #1 for port 9000: readAndProcess from client 172.16.0.239 threw exception [org.apache.hadoop.security.authorize.AuthorizationException: User: hive is not allowed to impersonate hive]

我没有将proxyuser设置为“hive”,就像大多数示例说的那样,因为core-site.xml是由其他服务共享的,我不喜欢每个服务都将HDFS作为hive访问,但我还是试了一下现在core-site.xml看起来像:

<property>
    <name>hadoop.proxyuser.hive.hosts</name>
    <value>*</value>
</property>

<property>
    <name>hadoop.proxyuser.hive.groups</name>
    <value>*</value>
</property>

我再次推出beeline,但是,这次登录很好,但是当一个命令运行时,纱线抛出异常:

Error: Error while processing statement: FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask. Permission denied: user=hive, access=WRITE, inode="/user/yarn/hive/.staging":hdfs:supergroup:drwxr-xr-x

proxyuser“hive”已被“hdfs”拥有的暂存文件夹拒绝。我不认为将777提供给staging文件夹是一个好主意,因为提供HDFS保护但向所有人打开文件夹是没有意义的。所以我的问题是在Hive,Hdfs和Yarn之间设置权限的最佳解决方案是什么?

Hadoop许可对我来说只是一场噩梦,请帮助。

1 个答案:

答案 0 :(得分:1)

core-site.xml中添加proxyuser条目将允许名为hive的超级用户从任何主机(值为*)进行连接,以模拟属于任何组的用户(值为{ {1}})。

*

通过传递实际的主机名和组名,可以使其更具限制性(请参阅Superusers)。超级用户<property> <name>hadoop.proxyuser.hive.hosts</name> <value>*</value> </property> <property> <name>hadoop.proxyuser.hive.groups</name> <value>*</value> </property> 对FS的访问权限将适用于模拟用户。

对于多用户Hadoop环境,最佳做法是为每个超级用户创建专用目录,并配置关联服务以在其中存储文件。并为所有这些超级用户创建一个组hive,以便在需要时为文件提供组级访问权限。

supergroup中添加此属性以配置超级组

hdfs-site.xml