[42000][30041] Error while processing statement: FAILED: Execution Error, return code 30041 from org.apache.hadoop.hive.ql.exec.spark.SparkTask. Failed to create Spark client for Spark session a86472fe-cf0e-4a6a-ac69-214fe9c2cbb
- datagrip连接时使用的用户名和密码都是hive(看配置文件)
- 默认的引擎是spark,需要切换成mr,请在每个sql脚本前加上
sql
SET hive.execution.engine=mr;
切换引擎后还是报错
[08S01][1] Error while processing statement: FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask. Permission denied: user=hive, access=EXECUTE, inode="/tmp":root:supergroup:drwxrwx--- at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.check(FSPermissionChecker.java:506) at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.checkTraverse(FSPermissionChecker.java:422) at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.checkPermission(FSPermissionChecker.java:3 ...
原来是tmp文件权限问题,得去改权限
步骤 1: 进入 Namenode 容器
首先,找到 Namenode 容器的名称或 ID,并进入容器。
列出所有运行中的容器:
bash
docker ps
确认容器名称(例如 namenode)或容器 ID。
进入 Namenode 容器:
bash
docker exec -it namenode /bin/bash
如果 namenode 是你的容器名称,直接进入容器。
步骤 2: 检查 /tmp 的权限
进入容器后,查看 HDFS 根目录结构,确保 /tmp 存在,并检查其权限:
bash
hdfs dfs -ls /
输出示例:
Found 2 items
drwxr-xr-x - hdfs supergroup 0 2024-12-03 12:00 /user
drwx------ - hdfs supergroup 0 2024-12-03 12:00 /tmp
如果权限不足(如 drwx------),需要进行修改。
步骤 3: 修改 /tmp 目录权限
设置 /tmp 目录为可读写:
bash
hdfs dfs -chmod -R 1777 /tmp
1777 权限: 所有用户均可读写,并启用粘滞位(sticky bit),防止其他用户删除非自身文件。
步骤 4: 验证修改
再次检查 /tmp 目录的权限,确保更改生效:
hdfs dfs -ls /
输出示例:
Found 2 items
drwxr-xr-x - hdfs supergroup 0 2024-12-03 12:00 /user
drwxrwxrwt - hive hive 0 2024-12-03 12:05 /tmp
drwxrwxrwt: 表示权限已修改为 1777。
步骤 5: 退出容器
完成后,退出 Namenode 容器:
bash
exit