【问题标题】:What's the best solution for Hive proxy user in HDFS?HDFS 中 Hive 代理用户的最佳解决方案是什么?
【发布时间】:2017-03-31 02:57:13
【问题描述】:

我对 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被其他服务共享,我不喜欢每个服务都像hive一样访问HDFS,但我还是试了一下现在 core-site.xml 看起来像:

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

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

我又吃过beeline,不过这次登录没问题,但是在运行命令的时候,yarn抛出了异常:

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

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

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

【问题讨论】:

  • @BruceWayne 你没有回答我的问题。我讨厌 777,我能做的就是将 "/user/yarn/hive" 的所有者设置为 "hive",但是现在历史服务器有问题,当用户 "yarn" 试图访问 "/user/yarn/history /temp/hive”来读取日志,但它是由“hive”拥有的,我又得到了“Permission denied”。
  • @franklinsijo 该文件夹以前不存在,“hive”尝试创建它但遇到权限问题,因为 /user/yarn 归“yarn”所有。但是,我手动创建它并将所有者分配给“hive”,但现在问题发生在“yarn”拥有的历史服务器上,并试图访问由“hive”创建的日志文件。
  • 不,hive的仓库在“/user/hive/warehouse”下,归hive所有。
  • @franklinsijo 是的,staging-dir 是在 /user/yarn 下的 mapred-site.xml 中设置的,我认为这是合理的,因为它被设计为由 yarn 管理。
  • @franklinsijo,这可能是个好主意,但仍然不能解决我的问题。即使我们能够绕过文件夹限制,历史服务器仍然无法访问由 hive 创建的 .jhist。

标签: hadoop permissions hive hdfs hadoop-yarn


【解决方案1】:

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

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

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

这可以通过传递实际的主机名和组名来限制更多(参考Superusers)。超级用户hive 对FS 的访问权限将适用于模拟用户。

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

hdfs-site.xml中添加这个属性来配置超级组

<property>
   <name>dfs.permissions.superusergroup</name>
   <value>supergroup</value> 
   <description>The name of the group of super-users.</description>
</property>

【讨论】:

    猜你喜欢
    • 2019-07-22
    • 2019-07-14
    • 1970-01-01
    • 2020-03-31
    • 1970-01-01
    • 1970-01-01
    • 2016-01-05
    • 2015-05-27
    • 2013-05-01
    相关资源
    最近更新 更多