org.apache.hadoop.security.AccessControlException Permission denied: user=anonymous, access=WRITE...

简介: 在尝试通过 HiveServer2 远程执行 DDL 操作时遇到权限错误,错误信息显示匿名用户(`anonymous`)无权执行写操作。解决方案包括:1) 使用 `hdfs dfs -chmod -R +777 /warehouse` 给目录授权(不推荐,仅适用于测试环境);2) 配置 Hive 和 Hadoop,创建具有权限的用户,如 `ad`,并将该用户添加到 Hive 的管理员角色和 Hadoop 的 proxyuser 配置中,然后重启相关服务。通过 `beeline` 测试连接和操作,确认权限问题已解决。

@[toc]

报错

当我使用 HiveServer2 远程连接对 Hive 进行 DDL 操作时,出现了权限错误,完整报错信息如下:

[2024-04-04 19:36:31] [08S01][1]
[2024-04-04 19:36:31] Error while processing statement: FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. MetaException(message:Got exception: org.apache.hadoop.security.AccessControlException Permission denied: user=anonymous, access=WRITE, inode="/warehouse/ad/ods":ad:ad:drwxr-xr-x
[2024-04-04 19:36:31] at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.check(FSPermissionChecker.java:506)
[2024-04-04 19:36:31] at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.checkPermission(FSPermissionChecker.java:346)
[2024-04-04 19:36:31] at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.checkPermissionWithContext(FSPermissionChecker.java:370)
[2024-04-04 19:36:31] at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.checkPermission(FSPermissionChecker.java:240)
[2024-04-04 19:36:31] at org.apache.hadoop.hdfs.server.namenode.FSDirectory.checkPermission(FSDirectory.java:1943)
[2024-04-04 19:36:31] at org.apache.hadoop.hdfs.server.namenode.FSDirectory.checkPermission(FSDirectory.java:1927)
[2024-04-04 19:36:31] at org.apache.hadoop.hdfs.server.namenode.FSDirectory.checkAncestorAccess(FSDirectory.java:1886)
[2024-04-04 19:36:31] at org.apache.hadoop.hdfs.server.namenode.FSDirMkdirOp.mkdirs(FSDirMkdirOp.java:60)
[2024-04-04 19:36:31] at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.mkdirs(FSNamesystem.java:3405)
[2024-04-04 19:36:31] at org.apache.hadoop.hdfs.server.namenode.NameNodeRpcServer.mkdirs(NameNodeRpcServer.java:1159)
[2024-04-04 19:36:31] at org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolServerSideTranslatorPB.mkdirs(ClientNamenodeProtocolServerSideTranslatorPB.java:740)
[2024-04-04 19:36:31] at org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos$ClientNamenodeProtocol$2.callBlockingMethod(ClientNamenodeProtocolProtos.java)
[2024-04-04 19:36:31] at org.apache.hadoop.ipc.ProtobufRpcEngine2$Server$ProtoBufRpcInvoker.call(ProtobufRpcEngine2.java:604)
[2024-04-04 19:36:31] at org.apache.hadoop.ipc.ProtobufRpcEngine2$Server$ProtoBufRpcInvoker.call(ProtobufRpcEngine2.java:572)
[2024-04-04 19:36:31] at org.apache.hadoop.ipc.ProtobufRpcEngine2$Server$ProtoBufRpcInvoker.call(ProtobufRpcEngine2.java:556)
[2024-04-04 19:36:31] at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:1093)
[2024-04-04 19:36:31] at org.apache.hadoop.ipc.Server$RpcCall.run(Server.java:1043)
[2024-04-04 19:36:31] at org.apache.hadoop.ipc.Server$RpcCall.run(Server.java:971)
[2024-04-04 19:36:31] at java.security.AccessController.doPrivileged(Native Method)
[2024-04-04 19:36:31] at javax.security.auth.Subject.doAs(Subject.java:422)
[2024-04-04 19:36:31] at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1878)

报错显示,目前我登录的用户名为 anonymous,也就是匿名(游客)模式,但正在执行一个写操作,被拒绝了。

解决方法

方法1

通过 HDFS 命令对操作目录授权。

hdfs dfs -chmod -R +777 /warehouse

但是该方法治标不治本,而且我们处于匿名模式下也不安全,如果是测试环境则可以通过手动授权的方式快速解决。

方法2

既然是因为我们的用户权限问题,那么可以通过创建一个拥有权限的用户不就能解决了,这种方式还更加安全。

修改 Hive 的配置文件 hive-site.xml,在其中添加权限用户:

        <property>
                <name>hive.users.in.admin.role</name>
                <value>ad</value>
        </property>

修改 Hadoop 的配置文件 core-site.xml,在其中添加如下配置项:

    <!-- 设置集群的连接用户 -->
    <property>
        <name>hadoop.proxyuser.ad.hosts</name>
        <value>*</value>
    </property>

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

配置项中的 ad 为我们在 Hive 中配置的对应用户。

配置完成后,同步 core-site.xml 文件到其它机器。

重启 Hadoop、Hive 元数据服务、HiveServer2 服务。

测试

beeline

!connect jdbc:hive2://hadoop201:10000

image.png

用户名为我们上面在 Hive 中配置的用户名,密码回车跳过即可,无需输入。

image.png

上面通过 beeline 连接方式创建了库 aaa,检查是否还有权限报错问题。

image.png

创建完成,没有错误,我们在 HDFS 上检查一下该目录的所属组:

image.png

OK,妥妥的。

相关文章
|
分布式计算 Hadoop Linux
Centos7配置Hadoop出现Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password)的解决
Centos7配置Hadoop出现Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password)的解决
2465 0
|
分布式计算 Hadoop 网络安全
|
Apache Windows
(MAC) Apache You don't have permission to access / on this server.
(MAC) Apache You don't have permission to access / on this server.
237 0
|
网络安全
启动hdfs报错:hadoop100 Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password)
启动hdfs报错:hadoop100 Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password)
896 0
启动hdfs报错:hadoop100 Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password)
|
算法 Shell Apache
Apache ZooKeeper - ZK的ACL权限控制( Access Control List )
Apache ZooKeeper - ZK的ACL权限控制( Access Control List )
1026 0
|
11月前
|
存储 分布式计算 Hadoop
从“笨重大象”到“敏捷火花”:Hadoop与Spark的大数据技术进化之路
从“笨重大象”到“敏捷火花”:Hadoop与Spark的大数据技术进化之路
559 79
|
分布式计算 Kubernetes Hadoop
大数据-82 Spark 集群模式启动、集群架构、集群管理器 Spark的HelloWorld + Hadoop + HDFS
大数据-82 Spark 集群模式启动、集群架构、集群管理器 Spark的HelloWorld + Hadoop + HDFS
572 6
|
分布式计算 资源调度 Hadoop
大数据-80 Spark 简要概述 系统架构 部署模式 与Hadoop MapReduce对比
大数据-80 Spark 简要概述 系统架构 部署模式 与Hadoop MapReduce对比
332 2
|
存储 分布式计算 大数据
Flume+Hadoop:打造你的大数据处理流水线
本文介绍了如何使用Apache Flume采集日志数据并上传至Hadoop分布式文件系统(HDFS)。Flume是一个高可用、可靠的分布式系统,适用于大规模日志数据的采集和传输。文章详细描述了Flume的安装、配置及启动过程,并通过具体示例展示了如何将本地日志数据实时传输到HDFS中。同时,还提供了验证步骤,确保数据成功上传。最后,补充说明了使用文件模式作为channel以避免数据丢失的方法。
749 4

相关实验场景

更多

推荐镜像

更多