我有时会看到运行Spark作业时看到以下错误消息:
13/10/21 21:27:35 INFO cluster.ClusterTaskSetManager:丢失是由于spark.SparkException:文件./someJar.jar存在且与...的内容不匹配
这是什么意思?我该如何诊断和解决这个问题?
答案 0 :(得分:7)
在日志中挖掘后我发现“设备上没有剩余空间”异常,然后当我在每个节点上运行df -h
和df -i
时,我发现了一个已满的分区。有趣的是,这个分区似乎没有用于数据,而是临时存储jar。它的名称类似于/var/run
或/run
。
解决方案是清理旧文件的分区并设置一些自动清理,我认为设置spark.cleaner.ttl
说一天(86400)应该可以防止它再次发生。
答案 1 :(得分:1)
在AWS EC2上运行我会定期遇到磁盘空间问题 - 即使将spark.cleaner.ttl
设置为几个小时后(我们会快速迭代)。我决定通过将/root/spark/work
目录移动到实例上挂载的临时磁盘来解决它们(我使用的是在/mnt
处有32GB短暂的r3.larges):
readonly HOST=some-ec2-hostname-here
ssh -t root@$HOST spark/sbin/stop-all.sh
ssh -t root@$HOST "for SLAVE in \$(cat /root/spark/conf/slaves) ; do ssh \$SLAVE 'rm -rf /root/spark/work && mkdir /mnt/work && ln -s /mnt/work /root/spark/work' ; done"
ssh -t root@$HOST spark/sbin/start-all.sh
据我所知,Spark 1.5工作目录默认情况下仍然没有使用已安装的存储。我没有充分考虑部署设置,看看这是否可以配置。