学习hadoop遇到的问题(hdfs权限问题,ls: Permission denied: user=root, access=READ_EXECUTE, inode="/user/spark":)

本文介绍如何在CDH页面中添加超级用户,并通过修改文件夹权限和Hadoop配置来实现用户授权。详细步骤包括更改/user文件夹权限给root用户及调整非CDH用户的Hadoop配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.在CDH页面中添加超级用户

2.手动给用户授权

对CDH用户:对于文件夹/user,注意,这个文件夹的拥有者不是所谓的“root”。实际上,这个文件夹为“hdfs”所有(755权限,这里将hdfs理解为一个属于supergroup的用户)。 

所以,只有hdfs可以对文件夹进行写操作。与Unix/Linux不同,hdfs是超级使用者(superuser),而不是root。 

 

因此更改其权限为root。所以,你可以向这个文件夹随意的存、改文件了。

sudo -u hdfs hadoop fs -chown root /user
其中root是用户 /user 是将/user文件的权限给了root用户

 3.对非CDH用户,到Namenode上修改hadoop的配置文件:conf/hdfs-core.xml, 找到 dfs.permissions 的配置项 , 将value值改为 false,修改完之后,要重启下hadoop的进程才能生效。

Connected to: Apache Hive (version 3.1.2) Driver: Hive JDBC (version 3.1.2) Transaction isolation: TRANSACTION_REPEATABLE_READ Beeline version 3.1.2 by Apache Hive 0: jdbc:hive2://bigdata1:10000> use ods; No rows affected (0.145 seconds) 0: jdbc:hive2://bigdata1:10000> SHOW TABLES LIKE 'customer_inf'; +---------------+ | tab_name | +---------------+ | customer_inf | +---------------+ 1 row selected (0.452 seconds) 0: jdbc:hive2://bigdata1:10000> select * from ods.crstomer_inf;Closing: 0: jdbc:hive2://bigdata1:10000 ^C^C[root@bigdata1 ~]# ^C [root@bigdata1 ~]# beeline -u "jdbc:hive2://bigdata1:10000" -p root SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in [jar:file:/opt/module/hadoop-3.1.3/share/hadoop/common/lib/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: Found binding in [jar:file:/opt/module/hive-3.1.2/lib/log4j-slf4j-impl-2.10.0.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation. SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory] Connecting to jdbc:hive2://bigdata1:10000 Connected to: Apache Hive (version 3.1.2) Driver: Hive JDBC (version 3.1.2) Transaction isolation: TRANSACTION_REPEATABLE_READ Beeline version 3.1.2 by Apache Hive 0: jdbc:hive2://bigdata1:10000> use ods; No rows affected (0.142 seconds) 0: jdbc:hive2://bigdata1:10000> select * from customer_inf; Error: Error while compiling statement: FAILED: SemanticException Unable to determine if hdfs://bigdata1:9000/user/hive/warehouse/ods.db/customer_inf is encrypted: org.apache.hadoop.security.AccessControlException: Permission denied: user=anonymous, access=EXECUTE, inode="/user":root:supergroup:drwx------ at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.check(FSPermissionChecker.java:399) at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.checkTraverse(FSPermissionChecker.java:315) at org.apache.hadoop.
最新发布
03-09
<think>嗯,用户在使用Hive查询时遇到了权限问题,报错是Permission denied: user=anonymous, access=EXECUTE。我需要根据提供的引用内容来找出解决方案。首先,根据引用[1]和[2],用户可能是以匿名用户anonymous连接的,导致没有权限访问HDFS的/tmp目录。 首先,用户可能没有在连接时指定用户名,所以Hive默认使用anonymous。解决方法应该是在使用beeline连接时通过-n参数指定用户,比如-n hdfs。这样用户就会以hdfs的身份执行操作,拥有必要的权限。 另外,可能需要检查HDFS上/tmp目录的权限设置。确保指定用户(比如hdfs)有执行和写入权限。可能需要用hadoop fs -chmod命令修改目录权限,或者更改目录的所有者。 还有可能用户需要配置Hive的权限控制,比如启用Sentry或Ranger来管理权限。此外,检查Hive的配置文件,如hive-site.xml,确保有正确的用户模拟配置,比如hive.server2.enable.doAs。 用户可能还应该检查日志,查看更详细的错误信息,或者尝试直接以hdfs用户身份执行操作。需要一步步引导用户,从连接时的用户指定到目录权限调整,再到可能的Hive配置修改,综合解决问题。</think>### Hive查询权限问题解决方案 #### 1. 检查连接方式指定用户 当使用`beeline`连接Hive时,**必须通过`-n`参数显式指定用户**。未指定用户时默认使用`anonymous`(匿名用户),该用户通常没有HDFS目录的访问权限。 **正确连接命令**: ```bash beeline -u jdbc:hive2://IP:10000 -n hdfs # 以hdfs用户身份连接[^1] ``` #### 2. 验证HDFS目录权限 匿名用户报错通常与`/tmp/hadoop-yarn/staging`目录权限相关。需确保目标用户(如`hdfs`)对该目录有**执行(EXECUTE)**和**写入(WRITE)**权限: ```bash # 查看目录权限 hadoop fs -ls /tmp # 修改权限(示例:赋予所有用户执行和写入权限hadoop fs -chmod -R 777 /tmp/hadoop-yarn/staging # 或修改目录所有者 hadoop fs -chown -R hdfs:hadoop /tmp/hadoop-yarn/staging ``` #### 3. 配置Hive权限控制(可选) 若问题持续,可能需要启用Hive的细粒度权限管理: - 在`hive-site.xml`中配置权限插件(如Apache Sentry或Ranger) - 开启用户模拟功能: ```xml <property> <name>hive.server2.enable.doAs</name> <value>true</value> </property> ``` #### 4. 其他注意事项 - 检查Hive服务端日志(`/var/log/hive/hiveserver2.log`)获取详细错误信息 - 尝试直接以`hdfs`用户执行操作:`sudo -u hdfs beeline ...` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值