spark:Failed to create local dir

 

近日莫名遭遇异常一枚,如下:

org.apache.spark.SparkException: Job aborted due to stage failure: Task 0 in stage 271.0 failed 1 times, most recent failure: Lost task 0.0 in stage 271.0 (TID 544, localhost): java.io.IOException: Failed to create local dir in /tmp/blockmgr-4223dca8-7355-4ab2-98b9-87e763c7becd/1d.
        at org.apache.spark.storage.DiskBlockManager.getFile(DiskBlockManager.scala:87)
        at org.apache.spark.storage.DiskBlockManager.getFile(DiskBlockManager.scala:97)
        at org.apache.spark.shuffle.IndexShuffleBlockResolver.getIndexFile(IndexShuffleBlockResolver.scala:58)
        at org.apache.spark.shuffle.IndexShuffleBlockResolver.writeIndexFileAndCommit(IndexShuffleBlockResolver.scala:140)
        at org.apache.spark.shuffle.sort.BypassMergeSortShuffleWriter.write(BypassMergeSortShuffleWriter.java:127)
        at org.apache.spark.scheduler.ShuffleMapTask.runTask(ShuffleMapTask.scala:87)
        at org.apache.spark.scheduler.ShuffleMapTask.runTask(ShuffleMapTask.scala:52)
        at org.apache.spark.scheduler.Task.run(Task.scala:107)
        at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:277)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at java.lang.Thread.run(Thread.java:745)

原因分析:
1 Failed to create local dir,什么时候spark会创建临时文件呢?
shuffle时需要通过diskBlockManage将map结果写入本地,优先写入memory store,在memore store空间不足时会创建临时文件(二级目录,如异常中的blockmgr-4223dca8-7355-4ab2-98b9-87e763c7becd/1d)。
2 shuffle又是咋回事呢?
spark作为并行计算框架,同一个作业会被划分为多个任务在多个节点执行,reduce的输入可能存在于多个节点,因此需要shuffle将所有reduce的输入汇总起来。
3 memory store的大小是多少,什么情况下会超出使用disk store?
memory store的大小取决于spark.excutor.memory大小,默认为spark.excutor.memory*0.6
4 临时文件默认创建于/temp,如果修改?
spark.env中添加配置SPARK_LOCAL_DIRS或程序中配置,可配置多个路径,逗号分隔增强io效率

SPARK_LOCAL_DIRS:
Directory to use for "scratch" space in Spark, including map output files and RDDs that get stored on disk. This should be on a fast, local disk in your system. It can also be a comma-separated list of multiple directories on different disks.

5 保证磁盘空间充足和磁盘读写权限。磁盘空间按需配置。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果在Hive命令行中执行 `set hive.execution.engine=spark;` 命令时出现 `FAILED: SemanticException Failed to get a spark session: org.apache.hadoop.hive.ql.metadata.HiveException: Failed to create Spark client for Spark session` 异常,可能是由于以下原因之一: 1. Spark未正确安装或配置:请确保Spark已正确安装并配置正确的环境变量。可以在终端上运行 `spark-shell` 命令来验证Spark是否能够正常工作。 2. Spark与Hive版本不兼容:请确保使用的Spark版本与Hive版本兼容。可以在Hive官方网站上查看版本兼容性信息。 3. Spark配置错误:请检查Spark的配置文件,并确保所有配置项都正确设置。可以在 `$SPARK_HOME/conf` 目录下找到Spark的配置文件。 4. Spark资源不足:如果Spark资源不足,可能会导致无法获取Spark会话。请检查Spark的资源配置,并确保分配了足够的资源。 针对上述问题,可以通过以下步骤进行排查和解决: 1. 检查Spark安装和配置是否正确,并确保Spark能够正常工作。 2. 确认Spark与Hive版本兼容,并升级或降级其中一个软件的版本。 3. 检查Spark配置文件,确保所有配置项都正确设置。 4. 检查Spark资源配置,确保分配了足够的资源。可以使用 `spark-submit` 命令提交一个Spark应用程序来查看资源使用情况。 另外,如果您正在使用Spark on YARN模式,还需要确保YARN的配置正确,并且YARN的资源管理器正在运行。可以在终端上运行 `yarn node -list` 命令来验证YARN是否能够正常工作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值