You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Amazon EMR 7.2+Apache Hudi环境启动Spark Shell遇权限拒绝问题

解决Amazon EMR 7.2 + Apache Hudi启动Spark Shell的权限拒绝问题

问题原因

报错核心信息:

org.apache.hadoop.security.AccessControlException: 权限拒绝:user=ec2-user, access=WRITE, inode="/user":hdfs:hdfsadmingroup:drwxr-xr-x

HDFS的/user目录权限为drwxr-xr-x,仅属主hdfs和组hdfsadmingroup拥有写权限。Spark初始化时需要在/user下创建用户专属工作目录(如/user/ec2-user),而ec2-user作为普通用户无写入权限,因此触发报错。

解决方案

方案1:切换到hdfs用户执行命令

hdfs用户拥有/user目录的写权限,切换后直接启动Spark Shell:

sudo su - hdfs
spark-shell --jars /usr/lib/hudi/hudi-spark-bundle.jar \
--conf "spark.serializer=org.apache.spark.serializer.KryoSerializer" \
--conf "spark.sql.catalog.spark_catalog=org.apache.spark.sql.hudi.catalog.HoodieCatalog"  \
--conf "spark.sql.extensions=org.apache.spark.sql.hudi.HoodieSparkSessionExtension"

方案2:为ec2-user创建HDFS专属目录并授权

保持ec2-user身份,先创建自己的HDFS主目录并设置权限:

# 创建ec2-user的HDFS目录
hdfs dfs -mkdir /user/ec2-user
# 赋予ec2-user完全控制权
hdfs dfs -chown ec2-user:ec2-user /user/ec2-user
# 设置目录权限(按需调整)
hdfs dfs -chmod 755 /user/ec2-user

完成后重新执行原Spark Shell启动命令即可。

方案3:指定Spark临时工作目录

通过配置指定一个所有用户有权写入的目录作为Spark工作目录,避免访问/user:

spark-shell --jars /usr/lib/hudi/hudi-spark-bundle.jar \
--conf "spark.serializer=org.apache.spark.serializer.KryoSerializer" \
--conf "spark.sql.catalog.spark_catalog=org.apache.spark.sql.hudi.catalog.HoodieCatalog"  \
--conf "spark.sql.extensions=org.apache.spark.sql.hudi.HoodieSparkSessionExtension" \
--conf "spark.local.dir=/tmp" \
--conf "spark.sql.warehouse.dir=hdfs:///tmp/ec2-user-warehouse"

注:/tmp目录默认开放所有用户写权限,也可替换为其他已授权的HDFS路径。

额外处理:消除Log4j警告

启动时的Log4j热补丁缺失警告不影响核心功能,若要消除,可在启动命令中添加配置关闭该功能:

--conf "spark.log4jHotPatch.enabled=false"

内容的提问来源于stack exchange,提问作者Albert T. Wong

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 13:32:06