spark thriftserver进程fullgc导致卡死和计算getsplit时间很长问题

本文探讨了Spark ThriftServer在处理大作业时由于full GC导致进程卡死的问题,该问题源于在获取split阶段读取ORC文件footer信息。文章分析了ORC的BI和ETL两种split策略,并提出调整参数以减轻driver端内存压力,但警告在某些情况下可能影响SQL执行效率。解决方案包括避免缓存footer信息以减少内存压力。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景

参考饿了么经验:https://zhuanlan.zhihu.com/p/28574213

饿了么经验中谈到:“hive.exec.orc.split.strategy为ETL”,但是这样可能导致spark thriftserver的内存压力很大,面对大作业会导致full gc从而进程卡死或退出。

原因

先看看split的strategy类别,它有BI,ETL和HYBRID三种,默认是HYBRID

    long avgFileSize = totalFileSize / numFiles;
    switch(context.splitStrategyKind) {
      case BI:
        // BI strategy requested through config
        splitStrategy = new BISplitStrategy(context, fs, dir, children, isOriginal,
            deltas, covered);
        break;
      case ETL:
        // ETL strategy requested through config
        splitStrategy = new ETLSplitStrategy(context, fs, dir, children, isOriginal,
            deltas, covered);
        break;
      default:
        // HYBRID strategy
        if (avgFileSize > context.maxSize) {
          splitStrategy = new ETLSplitStrategy(context, fs, dir, children, isOriginal, deltas,
              covered);
        } else {
         
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值