背景
参考饿了么经验: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 {

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

被折叠的 条评论
为什么被折叠?



