bash
[root@hadoop02 conf]# beeline -u jdbc:hive2://hadoop01:10000
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/opt/lbl/install/hive/lib/log4j-slf4j-impl-2.6.2.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/opt/lbl/install/hadoop/share/hadoop/common/lib/slf4j-log4j12-1.7.10.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.apache.logging.slf4j.Log4jLoggerFactory]
Connecting to jdbc:hive2://hadoop01:10000
24/11/02 11:04:09 [main]: WARN jdbc.HiveConnection: Failed to connect to hadoop01:10000
Error: Could not open client transport with JDBC Uri: jdbc:hive2://hadoop01-lbl:10000: Failed to open new session: java.lang.RuntimeException: org.apache.hadoop.security.AccessControlException: Permission denied: user=anonymous, access=EXECUTE, inode="/tmp":root:supergroup:drwxrwx---
at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.checkTraverse(FSPermissionChecker.java:266)
问题原因:
-
连接失败:你尝试通过 JDBC 连接到 Hive,但由于权限问题,连接未成功。
-
权限被拒绝 :错误提示中指出,用户
anonymous
没有权限执行某些操作,特别是访问/tmp
目录。根据错误信息,目录的权限是drwxrwx---
,这意味着只有拥有者(root
)和所在组(supergroup
)的用户可以访问。
解决方法:
-
检查用户权限:
- 确保你使用的用户具有足够的权限来访问
/tmp
目录。可以考虑使用一个具有正确权限的用户来进行连接。
- 确保你使用的用户具有足够的权限来访问
-
更改目录权限:
-
如果可以,尝试调整
/tmp
目录的权限,以允许匿名用户或你正在使用的用户进行访问。例如,可以使用以下命令更改权限:bashhdfs dfs -chmod 1777 /tmp
-
-
配置 Hive 和 Hadoop:
- 确保你的 Hive 和 Hadoop 配置文件中,
hive.exec.scratchdir
设置为一个有权限的目录。 - 检查 Hive 的安全配置,确保允许你使用的用户连接。
- 确保你的 Hive 和 Hadoop 配置文件中,
-
使用认证用户:
- 如果 Hive 启用了 Kerberos 认证,确保你使用的是正确的 Kerberos 用户,并且已经获得了有效的票据。