Gluten给Spark提速2倍:背景、原理和实践 刘文政Kyligence高级软件架构师 www.top100summit.com 讲师简介 刘文政 高级软件架构师 长期专注在OLAP领域 “ 有OLAP生态、应用及内核的研发经验目前参与Gluten项目的设计研发工作有多项OLAP相关专利 ” www.top100summit.com 议程 •Gluten背景及现状 •Gluten技术原理 •Gluten实践与踩坑经验 www.top100summit.com Gluten背景和现状 www.top100summit.com Spark基础算子性能提升缓慢 From:https://github.com/oap-project/gluten Photon显著提升Spark性能 www.top100summit.com •兼容Spark •NativeExecutionEngine •至少2倍性能提升 •商业化产品、非开源 从Databricks在sigmod论文中依旧能了解其设计思想 https://people.eecs.berkeley.edu/matei/papers/2022/sigmod_photon.pdf From:https://www.slideshare.net/databricks/radical-speed-for-sql-queries-on-databricks-photon-under-the-hood NativeEngine近些年的发展 Velox C++Rust ClickHouse Datafusion www.top100summit.com NativeLanguage DuckDB polars VectorizedProcessing SSE2SSE4AVXAVX512 … ColumnarStorage www.top100summit.com Gluten由Intel和Kyligence联合发起 VeloxBackendClickhouseBackend www.top100summit.com Gluten社区现状 •10+Companies参与,包括Intel,Kyligence,BIGO,Meituan,Aliyun,Neteaseetc. •80+Contributors •计划贡献到Apache基金会 www.top100summit.com TPCH100测试效果 •总体2.12倍的速度提升 •最高3.48倍的速度提升 •Q21部分算子未支持,不参与比较 www.top100summit.com Gluten技术原理 www.top100summit.com Gluten技术架构 •Gluten仅是一个SparkPlugin •SparkPlan->NativeEnginePlan •统一内存管理 •列式Shuffle •Shim层兼容不同版本Spark •Fallback机制允许原生Spark执行 •NativeExecution统计信息上报 www.top100summit.com PlanConversion www.top100summit.com 以TPCHQ1为例 SparkPlanGlutenPlan SubstriatPlanNativeEnginePlan www.top100summit.com GlutenMemoryManagement •集成SparkOff-heapMemoryManagement •MemoryPool机制减少malloc次数 •内存申请上报TaskMemoryManager •Executor内存不足时触发Spill www.top100summit.com ColumnarShuffle •Hash-basedShuffle •NativePartitioner •Reducer零拷贝 •对小数据量Shuffle的优化 •对小文件数量的优化 www.top100summit.com RemoteColumnarShuffle HDD集群适用 RemoveShuffleService方案 www.top100summit.com Fallback •NativeEngine不支持的算子函数将会回退到Spark中计算 •NativeEngine的列式数据将会转化成SparkUnsafeRow,参与Spark计算 •Spark计算完成后会数据重新转化成NativeEngineColumnarBatch •相邻的fallback算子会进行合并 www.top100summit.com Gluten实践与踩坑经验 www.top100summit.com 指标平台OLAP底座升级 •底层查询引擎为Spark •数据格式包含CSV/Parquet等 •数据存储在S3 •查询对象既有物化视图表,也有原始表 •应用部署在AWS上 www.top100summit.com 面临的挑战 •实验室有效果,怎么保证生产上也有效果? •数据准确性怎么保证? •替换后,到底性能有多大提升? •生产环境没有访问权限,怎么排查问题? www.top100summit.com 双跑架构 •部署架构,数据对比、性能对比先在QA环境充分演练 •白天复制保存流量,夜间回放,不影响生产使用 •自动化性能对比、数据对比,错误摘要等每天日报总结。研发无法登陆生产环境。 www.top100summit.com 发现&解决问题 •SQLHint部分失效 •Decimal精度问题 •Crossjoin内存占用过多 •CSV文件解析规则未对其 •Fallback算子导致查询更慢 问题解决后,性能达标,总体2倍的提升,准备上线! www.top100summit.com 生产事故、回滚 •On-Heap内存使用正常 •Off-Heap存在内存泄漏 •持续运行3天后,查询开始失败 www.top100summit.com Heaptrack定位、修复 •NativeEngineMemoryProfile •查看malloc主要分布 •Callermethod定位 最后定位原因居然是NativeEngine中Substrait使用后未及时释放。。。 参考:https://github.com/oap-project/gluten/pull/3085/files www.top100summit.com Gluten使用经验总结 •TPCH/TPCDS验证远远不够 •建议从一些非核心关键场景开始 •替换前做充分的性能和准确性验证 •需要具备一定的定位和解决问题的能力 •积极参与社区的沟通 微信官方公众号:壹佰案例关注查看更多年度实践案例