09:00 09:50 曾林西 美团点评Spark演进与实践
2020-03-01 229浏览
- 1.
- 2.美团点评Spark的演进与实践 曾林林⻄西@美团点评 2018-10
- 3.关于我 • 14年年 加⼊入美团数据组 负责HDFS • 15年年 HDFS多机房架构改造,Spark引擎落地 • 16年年 Spark引擎迭代及平台化建设 • 17年年 机器器学习平台建设
- 4.内容提要 • 美团点评Hadoop平台介绍 • Spark演进三部曲 • Spark平台化建设和应⽤用实践
- 5.美团点评Hadoop平台介绍
- 6.Hadoop平台特点 • HDFS跨机房架构,多机房统⼀一名字空间 • 多计算框架,异构机型,YARN统⼀一资源调度 • 单集群1w+节点,百PB级总存储量量 • 800K/天任务数,Spark单任务最⼤大Shuffle数据量量100TB级
- 7.美团点评Spark演进三部曲
- 8.Spark演进主要挑战 • 平台和业务的接⼝口怎么定义 • 分布式计算执⾏行行失败怎么定位 • 数据仓库⽣生产环境Spark如何落地 • 深度学习浪潮下Spark的定位
- 9.Spark平台化建设和应⽤用实践 • 任务管理理&交互式开发平台 • 问题诊断平台 • Spark数仓⽣生产实践 • Spark深度学习实践
- 10.任务管理理&交互式开发平台 业务痛点: - 开发机环境部署、扩容成本⾼高 - Spark框架效率更更⾼高,但业务学习/尝试⻔门槛⾼高 - 开发、编译、测试,流程⻓长,调试效率低 平台痛点: - 引擎升级/机房迁移沟通成本⾼高 - 缺少规范、代码版本管理理成本⾼高 业务基于Spark/Hadoop客户端开发 - 客户端⽆无法做到个⼈人粒度的权限控制
- 11.任务管理理&交互式开发平台 平台和业务的接⼝口怎么定义? 客户端封装、平台化接⼝口
- 12.Spark任务管理理 • 架构设计: - 接⼝口封装:web/http/client接⼝口 - 代码管控:基于git的版本管理理 • 使⽤用特点: - ⽆无需客户端部署,接⼊入成本低 - 内置任务模板及参数建议 - ⽀支持代码检测、任务测试态 - ⽀支持多机房任务调度&引擎灰度升级
- 13.Spark任务管理理 — Web⻚页⾯面 1.⽤用户编写代码 git push… Hadoop作业管理理 3.Hadoop作业编译、执⾏行行… 2.托管平台注册…
- 14.Spark交互式开发 • ⽅方案: - 基于开源软件:Zeppelin + Spark - 主要场景: - 数据分析、调研 - 代码共享、结果展示 • 特点: - Web⻚页⾯面开发和执⾏行行,可视化展示 - 尝试成本低,调试效率⾼高 - ⽀支持多级权限控制
- 15.Spark交互式开发 安全控制改造: - 服务访问:基于SSO登录认证,控制个⼈人对服务的访问权限 - 数据安全:打通权限中⼼心,控制个⼈人对库、表、字段访问 - ⾏行行为审计:保留留审计⽇日志,记录每个操作的负责⼈人和时间 ⽤用户编写sql语句句 ⽤用户登录认证 zeppelin⽣生成图表
- 16.Spark平台化建设和应⽤用实践 • 任务管理理&交互式开发平台 • 问题诊断平台 • Spark数仓⽣生产实践 • Spark深度学习实践
- 17.Spark问题诊断平台 • 背景 - Spark引擎复杂,错误提示信息少 - 分布式系统⽇日志检索效率低,问题定位难 - 层出不不穷的业务响应,平台客服压⼒力力⼤大
- 18.Spark问题诊断平台 分布式计算执⾏行行失败怎么定位? 问题诊断平台服务
- 19.Spark问题诊断平台 ⼈人⼯工处理理 经验积累、⽂文档归类 平台化
- 20.Spark问题诊断平台 • 信息收集:Spark作业执⾏行行⽇日志信息收集,统计分析
- 21.Spark问题诊断平台 • 问题归类 • 执⾏行行失败原因诊断本质上是⼀一个分类问题 • 优先解决⼤大头问题的识别和处理理 Top25关键Exception分布(2946) 1% 1% 1% 1% 1% 1% 1% 2% 2% 2% 2% 2% 2% 2% 20% 3% 3% 14% 4% 4% 4% 11% 4% 5% 6% java.lang.NullPointerException org.apache.spark.sql.AnalysisException org.apache.spark.SparkException org.apache.hadoop.mapred.InvalidInputException java.lang.ExceptionInInitializerError org.apache.hadoop.mapred.FileAlreadyExistsException com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException org.apache.spark.rpc.RpcTimeoutException java.lang.ArrayIndexOutOfBoundsException JSONDecodeError java.lang.NoSuchMethodError org.apache.hadoop.security.AccessControlException org.apache.spark.shuffle.FetchFailedException java.util.concurrent.TimeoutException org.apache.hadoop.hive.ql.metadata.HiveException java.lang.IllegalArgumentException java.lang.OutOfMemoryError java.util.NoSuchElementException java.lang.ClassCastException pyspark.sql.utils.AnalysisException java.lang.IndexOutOfBoundsException java.io.FileNotFoundException java.lang.UnsupportedOperationException java.lang.NumberFormatException java.lang.IllegalStateException
- 22.Spark问题诊断平台 ⾃自动识别关键异常 诊断平台 Spark OOM问题原理理及解决⽂文档
- 23.Spark平台化建设总结 • 平台建设经验: - 快速迭代:和⽆无序增⻓长抢时间,越早平台化推⼴广阻⼒力力越⼩小 - 业务优先:平台迭代以⽀支持业务,提升效率为第⼀一优先 - 以点带⾯面:和先进业务深⼊入合作,由点到⾯面的推⼴广 - 持续运营:及时响应业务需求,没有需求不不代表没有问题
- 24.Spark平台化建设总结
- 25.Spark平台化建设总结 平台化建设需要哪些能⼒力力?
- 26.Spark平台化建设需要的能⼒力力 • 当前问题有解: - 平台接⼝口 - 问题诊断 - 性能分析 - 参数调优 • 未来问题可解: - 监控预警 - 全链路路分析
- 27.Spark平台化建设和应⽤用实践 • 任务管理理&交互式开发平台 • 问题诊断平台 • Spark数仓⽣生产实践 • Spark深度学习实践
- 28.Spark数仓⽣生产实践 1. Spark数仓⽣生产的机遇与挑战 2. 应对策略略: • 引擎问题与优化 • SparkSQL替换hive⽅方案 • Spark问题⾃自动诊断 3. 效果&经验总结
- 29.数仓⽣生产原⽅方案—Hive on MapReduce 1.编写ETL模板 2.提取SQL语句句 hive -f xxx.sqlxxx.sql:insert overwrite table db.table select * from … 3.执⾏行行SQL语句句 MapRed Job1 MapRed Job2 MapRed Job3 Hive表
- 30.Spark数仓⽣生产的机遇 基于Hive的ETL存在优化空间 计算需求增速⾼高于资源供给 夜间⽣生产⾼高峰期⻓长时间100% 业务持续反馈ETL执⾏行行缓慢 Why Spark Spark DAG节省⼤大量量IO开销 SparkSQL执⾏行行性能⾼高于Hive
- 31.数仓⽣生产新⽅方案—SparkSQL spark-sql -f xxx.sqlxxx.sql:insert overwrite table db.table select * from … Spark Job Hive表
- 32.Spark数仓⽣生产的挑战 • Spark引擎本身 - 引擎问题:使⽤用⽅方式、SQL语法和Hive的兼容性 • Spark和现有数仓⽣生产体系融合 - 迁移透明:减⼩小引擎切换对⽤用户的影响 - 系统稳定:保证替换后的稳定性 • Spark问题诊断 - 使⽤用⻔门槛:ETL切换到Spark引擎下执⾏行行失败原因判断
- 33.Spark数仓⽣生产实践 1. Spark数仓⽣生产的机遇与挑战 2. 应对策略略: • 引擎问题与优化 • SparkSQL替换hive⽅方案 • Spark问题⾃自动诊断 3. 效果&经验总结
- 34.Spark引擎优化 • Spark引擎在⽣生产环境下的问题: - 引擎本身bug导致作业失败、死锁、数据计算错误等 - 引擎对其他系统造成压⼒力力
- 35.Spark引擎问题&优化 Spark部分核⼼心改造与优化
- 36.Spark引擎问题&优化 • Spark Shuffle Service内存裁剪,解决NodeManager OOM问题 YARN • Shuffle fetch请求数控制,降低NodeManager GC压⼒力力 • Shuffle阶段⾃自动调整partition数,合并reduce写⼊入HDFS⽂文件 HDFS • ⽆无Shuffle作业⾃自动合并Map输⼊入⽂文件,减少写⽂文件Task数 • ⽀支持⾃自动合并⼩小⽂文件功能 Hive MetaStore • 去掉不不必要的databaseExists等RPC请求 • 开启元数据分区剪枝的功能,避免Spark扫描全量量分区
- 37.SparkSQL替换Hive的打开⽅方式 • 通过ETL流程的标志位来确定执⾏行行引擎: - 引擎切换对⽤用户透明 - 以流程为粒度灵活灰度上线 - ⽀支持多引擎多版本切换
- 38.SparkSQL替换Hive的打开⽅方式 • 完备的灰度上线环境与测试流程: - 测试框架:批量量⾃自动化(兼容性、数据⼀一致性)对⽐比测试暴暴露露问题 - 防守策略略:重要数据质量量检测、引擎⾃自动切换兜底 - 效果统计:上线后流程细粒度性能收集,效果统计及异常监控
- 39.Spark问题⾃自动诊断 • Spark问题诊断的挑战: - 业务客服:业务执⾏行行ETL失败后原因及⽅方案咨询 • 策略略: - 探测到ETL执⾏行行失败后调⽤用诊断平台服务⾃自动归因 失败后的问题诊断
- 40.Spark数仓⽣生产实践 1. Spark数仓⽣生产的机遇与挑战 2. 应对策略略: • 引擎优化:Spark问题与优化 • 流程规范:SparkSQL替换hive⽅方案 • 技术运营:Spark问题⾃自动诊断 3. 效果&经验总结
- 41.Spark数仓⽣生产经验总结 • Spark数仓⽣生产不不仅仅是引擎迭代: - 引擎改造:跟进社区,应⽤用场景选择性改造 - 流程规范:迁移透明,线下测试,线上防守策略略 - 技术运营:⽤用技术⼿手段减少客服⼯工作量量 80%
- 42.Spark数仓⽣生产效果 • 当前进展及效果: - 80% (7w+)ETL流程迁移到Spark执⾏行行 - 内部Issue:200+,社区PR:60+ - 平均执⾏行行时间减少:40% - 平均成本(内存、CPU)节省:30% 80%
- 43.Spark平台化建设和应⽤用实践 • 任务管理理&交互式开发平台 • 问题诊断平台 • Spark数仓⽣生产实践 • Spark深度学习实践
- 44.Spark深度学习实践
- 45.Spark深度学习实践 深度学习浪潮下Spark的定位? ⼤大数据+深度学习pipeline
- 46.典型深度学习场景问题 • 图⽚片批量量预测: - 需求:更更新模型后需要对全量量图⽚片批量量预测重新打标 - ⽅方案:3个流程、跨两个机房
- 47.典型深度学习场景痛点 • ⽤用户体验: - 流程复杂:需要多个流程组合,通过调度系统管理理依赖关系 - 维护成本:同⼀一个场景需要多计算框架组合,开发和维护成本⾼高 • 资源浪费: - 机房带宽:GPU集群和Hadoop集群之间跨机房的数据拷⻉贝 - HDFS存储:Spark和TensorFlow处理理后的中间数据需要通过HDFS保存和传输
- 48.Spark深度学习pipeline Spark on GPU实现深度学习pipeline
- 49.Spark on GPU的优势与挑战 • 优势: - ⽤用户体验:接⼝口统⼀一、运维成本低 - 接⼝口功能:Spark本身⽀支持读写多种数据源,避免不不必要的中间流程 • 挑战: - 资源申请:Spark需要⽀支持申请及使⽤用GPU资源; - 任务调度:区分GPU和CPU的计算(哪些计算需要调度到GPU机器器上) - 数据传输:Spark app内部CPU和GPU之间的数据传输
- 50.Spark on GPU的⽅方案探索 • 可选⽅方案: - 原⽣生代码内置编译⽀支持GPU,如:IBMSparkGPU - 引⼊入外部的神经⽹网络库来⽀支持GPU,如:deeplearning4j - 和⼀一些本身⽀支持GPU的框架集成,如:TensorFlow、Caffe等 • 权衡: - 快速开发顶住需求 - 在图像批量量预测场景下可直接应⽤用 - TensorFlow on Spark
- 51.TensorFlow on Spark打开⽅方式 • Yarn⽀支持GPU资源管理理: - ResourceManager:在社区2.x的版本上扩展⽀支持GPU资源类型 - NodeManager:⽀支持GPU资源的贡献与隔离 - AM:在之前的AM-RM 接⼝口中增加新的资源类型 • Spark改造⽀支持GPU申请: - 增加gcores参数⽤用于指定GPU卡数 - 修改Yarn资源申请接⼝口调⽤用 • PySpark程序依赖TensorFlow库: - 安装virtualenv创建TensorFlow虚拟环境 - 通过archives上传TensorFlow虚拟环境
- 52.Spark on GPU架构 • 特点: - 通过virtualenv加载第三⽅方库 - 可扩展,⽀支持多种深度学习框架
- 53.Spark on GPU代码示例例 提交命令 新增 executor-gcores参数 指定每个executor使⽤用GPU卡数 通过archive上传TensorFlow虚拟环境 代码示例例 在Spark程序中引⽤用TensorFlow 调⽤用TensorFlow API执⾏行行矩阵相乘
- 54.Spark on GPU代码示例例 Spark程序调⽤用TensorFlow API在GPU卡上完成矩阵乘法运算结果
- 55.Spark应⽤用实践总结 引擎的核⼼心与边界
- 56.Spark引擎的核⼼心与边界 • 核⼼心的鲁棒性: - 引擎的⾃自我修养:内核稳定,对资源使⽤用、外部系统的访问有控制 • 边界的探索: - 深度学习浪潮下Spark未来的发展:现有架构的优势,改造的成本及可⾏行行性
- 57.WE’RE HIRING ! JOIN OUR TEAM
- 58.