我对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许可对我来说只是一场噩梦,请帮助。
答案 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