spark任务在执行期间,有时候会遇到临时目录创建失败,导致任务执行错误。

java.io.IOException: Failed to create local dir in ……

spark执行过程的文件夹

  1. spark创建临时文件机制

    spark作为并行计算框架,同一个作业会被划分为多个任务在多个节点执行,reduce的输入可能存在于多个节点,因此需要shuffle将所有reduce的输入汇总起来;而shuffle时需要通过diskBlockManage将map结果写入本地,优先写入memory store,在memore store空间不足时会创建临时文件。
  2. 临时文件夹配置

    memory store的大小取决于spark.excutor.memory参数,默认为spark.excutor.memory*0.6;可通过spark.env中添加配置SPARK_LOCAL_DIRS或程序中设定spark.local.dir,可配置多个路径,逗号分隔增强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.

原因分析

常见原因包括

  1. 临时目录文件过多导致,当一个spark任务执行失败时,之前创建的临时文件不会被删除,就会残留下来,spark任务失败次数越多,就越可能导致临时目录故障。
  2. 磁盘空间、inode资源、权限(比如巡检项修改)等

主要排查手段

进入临时目录,查看下临时目录当前状况,尝试手动创建是否ok。
  1. 磁盘空间问题。

    排查:磁盘空间不足,或者磁盘掉载;通过df -hdu -sh或者fdisk查询磁盘空间。

    解决:删除旧文件释放空间;或者挂载新盘。

  2. 目录权限不对。

    排查:进入spark.local.dir临时目录,查询权限。

    解决:修改成正确权限。

  3. 临时目录文件过多。

    在spark.local.dir手动创建临时目录时,报错Too many links……

    排查:查询文件目录下是否文件/目录个数超限,ll | wc -l

    解决:删除旧文件释放空间;或者挂载新盘。

    linux ext2/ext3单个目录下子目录+文件个数不能超过32000,除去默认子目录当前目录(.)和上级目录(..)之外,一个目录下最多能创建31998个(子目录+文件)。而ext4系统无此限制。可以通过命令df -lhT查询。
    include/linux/ext2_fs.h:#define EXT2_LINK_MAX 32000
    include/linux/ext3_fs.h:#define EXT3_LINK_MAX 32000
  4. inode资源不足

    排查:查询磁盘inode资源使用,df -i

    解决:删除旧文件释放空间;或者挂载新盘。

Spark任务执行期间写临时文件报错导致失败的更多相关文章

  1. python+selenium 批量执行时出现随机报错问题【已解决】

    出现场景:用discover方法批量执行py文件,出现随机性的报错(有时a.py报错,有时b.py报错...),共同特点:均是打开新窗口后,切换最新窗口,但定位不到新窗口的元素,超时报错.由于个人项目 ...

  2. 【mybatis】mybatis执行一个update方法,返回值为1,但是数据库中数据并未更新,粘贴sql语句直接在数据库执行,等待好久报错:Lock wait timeout exceeded; try restarting transaction

    今天使用mybatis和jpa的过程中,发现这样一个问题: mybatis执行一个update方法,返回值为1,但是数据库中数据并未更新,粘贴sql语句直接在数据库执行,等待好久报错:Lock wai ...

  3. vue-electron 使用sqlite3数据库,执行npm run build 报错 .NET Framework 2.0 SDK,Microsoft Visual Studio 2005[C:\temp\wechat\node_modules\sqlite3\build\binding.sln]

    问题描述 vue-electron 使用sqlite3数据库,执行npm run build 报错如下: .NET Framework 2.0 SDK,Microsoft Visual Studio ...

  4. 执行命令npm publish报错:403 Forbidden - PUT https://registry.npmjs.org/kunmomotest2 - You cannot publish over the previously published versions: 0.0.1.

    前言 执行命令npm publish报错:403 Forbidden - PUT https://registry.npmjs.org/kunmomotest2 - You cannot publis ...

  5. Django中修改DATABASES后,执行python manage.py ****报错!UnicodeEncodeError

    Django中修改DATABASES后,执行python manage.py ****报错!UnicodeEncodeError: 'latin-1' codec can't encode chara ...

  6. k8s 执行 ingress yaml 文件报错: error when creating "ingress-myapp.yaml": Internal error occurred: failed calling webhook

    k8s 执行 ingress yaml 文件报错:错误如下: [root@k8s-master01 baremetal]# kubectl apply -f ingress-test.yaml Err ...

  7. 关于vs2008使用oracleclient链接oracle数据库报报错OCIEnvCreate 失败,返回代码为 -1,但错误消息文本不可用

    用vs2008链接oracle数据库出现问题,报错OCIEnvCreate 失败,返回代码为 -1,但错误消息文本不可用,从网上找了好久方法,有两种oracle客户端文件权限,和运行vs2008以管理 ...

  8. Oracle存储过程执行update语句不报错不生效问题

    转载链接:http://lin49940.iteye.com/blog/466626 今天一个同事写oracle 的存储过程遇到了一个问题, 他在里面update 操作不能完成更新的操作, 但是又不会 ...

  9. 在package.json中配置Script执行npm run tslint报错问题

    今天在学习tslint的时候,按照git clone下angular2-webpack-starter的代码执行npm run lint时,虽然代码进行了检测,但检测完成后npm始终报错, //pac ...

随机推荐

  1. Spring Cloud(四):服务容错保护 Hystrix【Finchley 版】

    Spring Cloud(四):服务容错保护 Hystrix[Finchley 版]  发表于 2018-04-15 |  更新于 2018-05-07 |  分布式系统中经常会出现某个基础服务不可用 ...

  2. c#网络加密传输

    网上已经有很多测试,我就不多说了.先说说我的测试. 1.net framework 都应该合适. 2.RSACryptoServiceProvider类在.net core 下无法调用xml导出方法( ...

  3. js随笔--关于数组

    1.split()将一个字符串分割成字符串数组 stringObject.split(separator,howmany) separator:必需,字符串或正则表达式,从该参数指定的地方分割stri ...

  4. ztz11的noip模拟赛T1:愤怒的XiaoX

    链接: https://www.luogu.org/problemnew/show/U47231 思路: 这道题其实就是一道双Lazy线段树裸题 因为我们知道,当k一定时,取反偶数次最后k位等于不取反 ...

  5. Mysql-表的基本操作

    一 存储引擎介绍 二 表介绍 三 创建表 四 查看表结构 五 数据类型 六 表完整性约束 七 修改表ALTER TABLE 八 复制表 九 删除表 一 .存储引擎介绍 存储引擎即表类型,mysql根据 ...

  6. HTML5视频播放练习:鼠标经过视频播放,鼠标移除停止播放,再次经过继续播放。

    随着HTML5的广泛应用,在一些网站中,经常看到有些预览的短视频预览,鼠标经过就会播放,移除就会停止播放,再次移进去就会继续播放. 自己也研究着做一个比较简单的类似的练习. 视频可以自己到包图网下载, ...

  7. Redis推荐阅读笔记整理

    Herrt灬凌夜    https://www.cnblogs.com/wuyx/archive/2018/03.html 6. Redis_常用5大数据类型简介 5. redis_安装 4. Red ...

  8. PHP接收post请求,不是空数组就是没值,怎么办!

    使用: $_POST $_REQUEST I('post.') 都不行, 换成: file_get_contents("php://input");

  9. Java实例 Part5:面向对象入门

    目录 Part5:面向对象入门 Example01:成员变量的初始化值 Example02:单例模式的应用 -----懒汉式 -----饿汉式 Example03:汉诺塔问题的求解 Example04 ...

  10. Framwork框架-网络客户端的使用

    1.引入头文件 #include "Comm.h" 2.派生自框架基类CProtocolCpMgr class NetManager : public CProtocolCpMgr ...