博客
关于我
Spark程序运行常见错误解决方法以及优化
阅读量:647 次
发布时间:2019-03-15

本文共 1862 字,大约阅读时间需要 6 分钟。

Spark常见错误及解决方案

一 FetchFailedException

问题描述

这类错误通常发生在执行大量shuffle操作时,Tasks连续失败并被重试,最终导致长时间耗时直至卡顿结束。这种情况通常发生在shuffle后阶段的数据传输或元数据获取出现问题。

错误提示

  • missing output location for shuffle 0
  • shuffle fetch failed
  • 解决方案

    直接针对内存资源进行优化:

    • 提高每个Executor的内存:spark.executor.memory 15G
    • 调整Executor的CPU核心数:spark.executor.cores 3
    • 配置最大可用核数:spark.cores.max 21

    工作机制:

    • execuoteNum = spark.cores.max / spark.executor.cores

    每个Executor配置:

    • 核心数:3核
    • 内存:15G RAM

    总资源消耗验证:

    • 7个Executor × 15G = 105G RAM
    • 资源消耗与配置保持一致但性能得到提升

    二 Executor及Task Lost

    问题描述

    由于网络或GC问题,Worker或Executor未接收到Task或Executor的心跳反馈。而Task丢失同样可能是由于底层协议超时或网络连接问题。

    错误提示

  • ExecutorLostFailure
  • TaskLostError
  • TimeoutException
  • Network连接超时
  • 解决方案

    调整个体网络执行超时时间:

    • 提高spark.network.timeout至300秒(5分钟)或更高
    • 配置其他影响网络的延时参数:
      • spark.core.connection.ack.wait.timeout
      • spark.akka.timeout
      • spark.storage.blockManagerSlaveTimeoutMs
      • spark.shuffle.io.connectionTimeout
      • spark.rpc.askTimeout or spark.rpc.lookupTimeout

    三 倾斜问题

    倾斜问题主要分为数据倾斜和Task倾斜两种情况

    数据倾斜

    数据倾斜的常见原因:

    • 大量Null值或空字符串(例如,直接在计算前过滤这些数据)
    • 例如:
    sqlContext.sql("...where col is not null and col != ''")

    Task倾斜

    Task倾斜的可能原因:

    • 数据倾斜已经得到解决,但仍存在其他瓶颈问题:
      • 请检查目标节点的性能,特别是CPU、I/O、内存使用情况
      • 可以配置Spark推测机制:
        spark.speculation truespark.speculation.interval 100 // 检测周期,单位毫秒spark.speculation.quantile 0.75 // 在完成指定百分比时启动推测spark.speculation.multiplier 1.5 // 待定时启动推测的倍数

    四 OOM(内存溢出)

    问题描述

    内存不足导致的溢出错误,常见在处理大量数据时GM违反内存限制。

    解决方案

    driver OOM:

    • 通过减少将data to driver的操作:
      • 避免使用collect操作,改用Pairwiseoperations
      • 例如:
    rdd.mapPartitions { ... }

    executor OOM:

    优化建议包括:

  • 增加Executor内存:spark.executor.memory 8G
  • 预留内存:
    • 修改以下参数降低JVM内存占用
      spark.storage.memoryFraction 0.5spark.shuffle.memoryFraction 0.3
  • 限制rdd缓存(可选):
    spark.rdd.compress true
  • 并行度优化:
    • 调整默认parallelism:
      spark.default.parallelism 4
    • SQL倾斜处理:
      spark.sql.shuffle.partitions 300 或 500
  • Map阶段并行优化:
    • 修改spark.executor.cores 15 并通过代码实现repartition
    rdd.repartition(15).map(...).cache()
  • 通过以上优化可以有效降低Executor内存负载和GC压力,提高Spark应用的稳定性和性能。

    转载地址:http://mqslz.baihongyu.com/

    你可能感兴趣的文章
    Objective-C实现euclidean distance欧式距离算法(附完整源码)
    查看>>
    Objective-C实现Euclidean GCD欧几里得最大公约数算法(附完整源码)
    查看>>
    Objective-C实现euclideanDistance欧氏距离算法(附完整源码)
    查看>>
    Objective-C实现euler method欧拉法算法(附完整源码)
    查看>>
    Objective-C实现eulerianPath欧拉路径算法(附完整源码)
    查看>>
    Objective-C实现eval函数功能(附完整源码)
    查看>>
    Objective-C实现Exceeding words超词(差距是ascii码的距离) 算法(附完整源码)
    查看>>
    Objective-C实现extended euclidean algorithm扩展欧几里得算法(附完整源码)
    查看>>
    Objective-C实现Factorial digit sum阶乘数字和算法(附完整源码)
    查看>>
    Objective-C实现factorial iterative阶乘迭代算法(附完整源码)
    查看>>
    Objective-C实现factorial recursive阶乘递归算法(附完整源码)
    查看>>
    Objective-C实现FigurateNumber垛积数算法(附完整源码)
    查看>>
    Objective-C实现Gale-Shapley盖尔-沙普利算法(附完整源码)
    查看>>
    Objective-C实现hamiltonianCycle哈密尔顿图算法(附完整源码)
    查看>>
    Objective-C实现hamming numbers汉明数算法(附完整源码)
    查看>>
    Objective-C实现hanning 窗(附完整源码)
    查看>>
    Objective-C实现hanoiTower汉诺塔算法(附完整源码)
    查看>>
    Objective-C实现hardy ramanujana定理算法(附完整源码)
    查看>>
    Objective-C实现highest response ratio next高响应比优先调度算法(附完整源码)
    查看>>
    Objective-C实现hill climbing爬山法用来寻找函数的最大值算法(附完整源码)
    查看>>