PySpark连接MongoDB遇[Error 13]权限错误:无法访问home/.cache
解决PySpark + MongoDB连接时的权限与文件提取问题
你已经搞定了PySpark Shell启动和MongoDB连接的第一步,遇到的权限报错和文件提取失败,大概率是用户缓存目录权限配置或者Spark临时文件路径的问题,咱们一步步来排查:
1. 先解决.cache目录的权限问题
报错[Error 13] permission denied 'home/.cache'说明当前运行PySpark的用户,没有对~/.cache(用户主目录下的缓存文件夹)的读写权限,也可能是路径写法遗漏了波浪线(正确路径应该是~/.cache而非home/.cache)。
- 先检查
.cache目录的权限状态:ls -ld ~/.cache - 如果当前用户不是目录所有者,修改归属权:
sudo chown -R $USER:$USER ~/.cache - 测试环境下也可以直接开放读写权限(生产环境谨慎操作):
chmod -R 755 ~/.cache
2. 排查Spark临时文件提取失败问题
文件提取失败通常和Spark的临时目录(spark.local.dir)权限有关——PySpark运行时会把依赖的py文件、jar包解压到临时目录,若该目录权限不足就会报错。
- 启动PySpark时显式指定一个有读写权限的临时目录,比如系统默认的临时目录:
pyspark --jars your-mongo-jars.jar --conf spark.local.dir=/tmp/spark-tmp --py-files pymongo_spark.py - 也可以自己创建专属临时目录并赋予权限:
然后启动时指定:mkdir -p ~/spark-tmp chmod -R 777 ~/spark-tmp--conf spark.local.dir=~/spark-tmp
3. 简化验证连接与输出的测试
权限问题解决后,用最基础的代码验证功能:
import pymongo_spark pymongo_spark.activate() # 连接MongoDB测试集合 rdd = sc.mongoRDD("mongodb://localhost:27017/test_db.test_collection") # 输出第一条数据(模拟"hello world"场景) print(rdd.first())
如果仍有问题,检查pymongo_spark.py的路径是否正确,启动时--py-files参数是否指定了完整的文件路径,避免Spark找不到依赖文件导致提取失败。
4. 额外注意:用户身份问题
如果你用sudo启动PySpark,当前用户是root,而~/.cache是普通用户的目录,root访问会触发权限问题。这种情况要么切换回普通用户启动,要么给root指定专属缓存目录:
export XDG_CACHE_HOME=/root/.cache pyspark --jars ... --conf ... --py-files ...
内容的提问来源于stack exchange,提问作者someone cool
相关产品推荐
相关产品推荐

