您好,欢迎访问三七文档
从TDW-Hive到TDW-SparkSQL——腾讯TDW数据引擎演进之路沈洪Agenda腾讯TDW平台的介绍SparkSQL的优势与挑战TDW-SparkSQL的平台建设上线与效果未来的计划腾讯TDW大数据平台数据应用数据接入IDEA黄金眼META….FACE+TDBANKAngel(PS)SparkGaia(CPU/GPU/MEM)HDFSCephTensorflowMariana(Caffe)MRSQLLhotse(任务调度)Tesla(机器学习)HBaseGraphXIDE(即席查询)MLlibStorm集群容量2w+机器总数8800最大集群250P+存储总量1250T+总内存24w+总CPU物理核24w+总硬盘数18P+25w+200w+最大集群的每天负载扫描量作业数SQL数CPU利用率75%+80%内存利用率85%磁盘利用率WHY旧Hive引擎的瓶颈缺乏DAG,中间结果落地基于MR的执行计划,不支持资源重用,CacheMMRRHDFSMMRHDFSMMRHDFSMMRHDFSHDFSHDFSRMRM社区活跃度不足QueryHivequerycomplierSyntaxtreeLogicalplanPhysicalMRstagesSparkSQL的优势MRMMMRRMRRRHDFSHDFSHDFSRDAG全新的查询优化器,基于RDD的执行计划,内存计算DataFrame&钨丝计划函数式编程语言Scala和高度活跃的社区升级引擎面临的挑战语法,元数据,安全,权限,功能大集群,跨机房,高负载,SQL复杂TB级别的Shuffle,Aggregate,Join性能兼容性稳定性功能增强稳定性提升性能优化TDW-SparkSQL的平台建设存储层ProtobufFile分布式执行层引擎层SQLEngineHiveEngineSQL层TDW-SQLORCFileMapReduceSparkSpark-SQLSQLEngine共享元数据权限控制TDW-SQLServerSQLEngineEasyCountStorm存储透明TextFileSequenceFileTDW的SQL框架功能增强•特色语法功能•支持Python的UDAF和UDTF兼容Oracle语法Insertinto、Update、delete…支持hash/range/list分区窗口函数:ratio_to_report、first_value、last_value…UDF函数:IpInfo、wm_concat、est_distinct、url_decode…支持查询PG外表,Aggregate、Join…特色语法功能SparkServerRMPySparkSparkClientPLCNodeManagerSQLSQLApplicationMasterSQLCompilerSQLRunnerUDFxPython版本的UDAF/UDTFNodeManagerExecutorTaskRunnerPythonRunner1.支持用户使用Python编写UDF、UDAF和UDTF2.PySpark嵌入SparkServer中,不再单独起JVM进程3.PLC执行多个SQL时支持session共享4.SQL自动封装为PySpark,对用户透明性能改进•调度策略改进•自动设置Shuffle分区数•SortMergeJoin优化调度策略改进——优化前问题•Job1长时间占用资源池不释放,其他作业长时间等待资源•公平和FIFO调度,都会导致小作业饿死原因•Spark的调度以Executor为单位——粗粒度分配资源,释放慢•Mapreduce的调度以Task为单位——细粒度分配资源,释放快Job1Job2Job3JobN...JobsqueuesResourcepoolExecutorExecutorExecutorschuedulertaskJob1Job2Job3JobN...JobsqueuesResourcepoolExecutorExecutorExecutorschuedulertask×释放策略:1.avg=runContainers/runJobs2.Job资源数Ravg&&remainContainers=0时,启动释放逻辑,3.释放个数=Math.min((R/runContainers)*waitContainers,R*ratio)调度策略改进——优化后资源池紧张时小作业不会饿死,资源池空闲时大作业能充分利用资源资源(Executor)自动释放机制。2020/1/7Shuffle分区数自动设置——优化前Scant1Scant2Scant4HDFSParallel=20015G30GParallel=200200G问题:Spark中Shuffle分区数使用同一设置1.不同Job需要不同的设置2.单个Job不同的阶段也需要不同分区数Scant1Scant2Scant4HDFS15G30G200GParallel=45G/512M=90Parallel=245G/512M=490优化措施1.追溯输入,自动计算每个Stage的并行度2.自动调整cube,distinct等数据膨胀操作的并行度。3.防止输出小文件过多——输出小文件自动合并机制Shuffle分区数自动设置——优化后SortMergeJoin——优化前Split....MapMemoryBufferothermapsJoinOutPutpartition,spillfileotherreduces....MapReduceSpillmapFetchSort....ExternalSorterJoinMemoryBufferSpillfile问题1.ShuffleFetch效率低,网络利用率低2.Sort操作耗时3.频繁Spill,序列化/反序列化MergeSortMergeJoin——优化后Split....MapMemoryBufferothermapsJoinOutPutPartition,sort,spillfileotherreduces....MapReduceSortSpillmapFetchJoinMemoryBufferMergesortMergesortMergeSortDiskfile优化措施1.Fetch大Block直接写磁盘2.增加Fetch线程3.JoinSort排序移到Map端,Reduce端只需要合并排序平均运行时间减少70%稳定性提升•SparkServer分散化•运行稳定性2020/1/7SparkServer分散化SparkServerSparkDriverSparkDriverSparkDriverSparkDriverReduceTaskReduceTaskReduceTaskMapTaskMapTaskMapTaskReduceTaskReduceTaskReduceTaskStage1Stage2...StageNAskforMapOutStatus问题1.SparkDriver的内存占用大2.网络(千兆)卡超过一分钟3.SparkServer最大同时运行1000条SQL,影响其他SQL的运行2020/1/7SparkDriver分散化洛子IDESparkServerSparkServerSparkServerResourceManagerNodeManagerNodeManagerExecutorExecutorExecutorMetaStoreExecutorResourceManagerNodeManagerSparkClientSparkClientSparkDriverSparkDriverMetastoreServerMetastoreServer改造1.把SparkDriver的功能迁移到AppMaster上2.增加MetastoreServer,确保MetastoreCluster的安全3.增加通信协议,SparkServer获取Driver的作业进度运行稳定性AM经常OOMTasks3w+,AM内存OOM减少Accumulators,降低AM70%内存AM内存配置由4G减少到1.5G推测执行改进推测成功后kill掉正在跑的Task修复Commit失败导致无限重试的BUG调度问题修复Task不调度:动态资源申请的BUGTask调度到已释放的Executor失败上线与效果——飞行中换引擎升级过程内部Issue社区PR升级覆盖率80%30+380+1.4.11.5.11.6.12015.07.152015.10.022016.03.09典型的10条线上SQL性能提升1.4(Seconds)1.5(Seconds)1.5vs1.41.6((Seconds)1.6vs1.5q3.sql295218-26.10%150-23.05%q34.sql805313-61.12%243-8.70%q42.sql253149-41.11%1593.95%q43.sql804259-67.79%249-1.24%q52.sql390168-56.92%153-3.85%q55.sql480177-63.13%124-11.04%q59.sql494204-58.70%189-3.04%q63.sql1311385.34%1498.40%q65.sql274229-16.42%163-24.09%q82.sql3153273.81%3589.84%边换引擎边升级分组灰度上线升级不停服,用户无影响灰度前•数据一致性•性能评估灰度时•双引擎自动切换灰度后•运行时间•资源对比•异常任务监控引擎升级的效果每日运行SQL数20w+SQL运行速度平均提升40%+成本节约20%+18.43%32.05%20.02%21.02%4.36%4.13%10%10%~50%50%~100%100%~500%500%~1000%1000%+性能提升分布未来的计划多表Join优化支持处理数据倾斜机器增加内存结合SparkStreaming提供流式查询Q&A
本文标题:从TDW-Hive到TDW-Spark-SQL_腾讯TDW数据引擎演进之路讲话.
链接地址:https://www.777doc.com/doc-2711308 .html