FreeWheel 姜冰 - FreeWheel OLAP实践

宜傲之

2017/12/18 发布于 技术 分类

ArchSummit全球架构师峰会是InfoQ中国团队推出的面向高端技术管理者、架构师的技术大会,参会者中超过50%拥有8年以上的工作经验。 ArchSummit秉承“实践第一、案例为主”的原则,展示新技术在行业应用中的最新实践,技术在企业转型中的加速作用,帮助企业技术管理者、CTO、架构师做好技术选型、技术团队组建与管理,并确立技术对于产品和业务的关键作用。

文字内容
1. FreeWheel 在OLAP上的实践 Bing Jiang FreeWheel Principal Engineer
5. Bing Jiang (姜冰) FreeWheel Principal Engineer 姜冰是大数据、分布式系统和系统性能的资深专家。他毕业于中科院计算所,现 任FreeWheel数据平台首席工程师,主管数据平台的研发工作。 曾供职于Yahoo Hadoop Team,拥有超过8年的大数据系统的研究和实战经验, 技术涉猎广泛,对分布式系统、大数据存储、消息队列等领域有深入的理解和实 战经验,并擅长排查解决分布式系统的疑难问题。
6. •  FreeWheel数据平台简介 •  Metadata Service •  CacheLayer Service •  AWS Cloud部署
7. FreeWheel介绍 数据 分析 ⼲告 测量 库存 预测 咨询 服务 视频⼲ 告解决 ⽅案 ⼲告交易 市场 ⼲告 决策 优化 变现 受众 定向
8. FreeWheel数据特点 •  数据规模 •  >10亿记录/天 •  >3TB日志/天 •  跨DC •  数据类型 •  会话性数据 •  嵌套结构日志 数据 •  结构化属性数 据 •  数据应用类型 •  报表统计 •  业务流量追踪 •  实时分析查询 •  预测反馈
9. 数据平台介绍 Global Kafka 数据中⼼-A Kafka 数据中⼼-B Kafka 数据中⼼-C Kafka Kafka Mirror Maker Speed Layer 流式处理框架 Batch Layer •  Ingesting pipeline •  匹配业务日志,写入HBase •  周期性将HBase数据写入S3 •  S3文件存储使用Parquet •  Presto •  定制化Presto Connector •  多个Presto集群 •  15K+/天的查询量
10. Presto遇到的问题(1) Realtime HBase Table! HDFS/S3 Data! Flush-2017-12-08-01 (Done) /dumper/2017-12-08-01! Flush-2017-12-08-02 (Dumping) /dumper/2017-12-08-02! Flush-2017-12-08-03 (Running) 2017-12-08-02 ਫ෸හഝ ܲ‫ݥ‬හഝ Presto •  边界的管理 •  数据可见的原子性
11. Presto遇到的问题(2) •  查询性能问题 •  Log Record: 200多列,protobuf -> parquet-avro (较强的业务逻辑侵入) •  Parquet文件索引信息不足 •  文件多,600+/h,获取split性能不好
12. Presto遇到的问题 (3) •  数据变化带来的维护负担 •  底层文件组织形式的变化 •  底层存储系统变化 (AWS S3, HDFS) /case-1/2017/12/01/00/file1 /case-2/2017/12/01/file2 HDFS S3 •  优化对文件类型有依赖 /data/2017/12/01/file1 /data/2017/12/02/file2 /data/2017/12/02/file3 /b121/2017/12/01/file1 /ac84/2017/12/02/file2 /ac84/2017/12/02/file3 •  Parquet/ORC/CSV/Text/…
13. Metadata服务 SQL! Presto Coordinator! SELECT event_date:'>date:'>date:'>date: 2017-12-01 event_date, network_id:'>id:'>id:'>id: 263548 sum(impression) as imp FROM transaction WHERE event_date:'>date:'>date:'>date: 2017-12-02 network_id:'>id:'>id:'>id: 263548 event_date >= timestmp ‘2017-12-01’ and event_date < timestamp event_date:'>date:'>date:'>date: 2017-12-03 ‘2017-12-04’ network_id:'>id:'>id:'>id: 263548 and network_id = 263548 GROUP BY 1 Metadata Service! File 1! File 2! block1! block 1! File4 block 2 block 2! block2! File 3! block1! block2!
14. Metadata服务 Job Scheduler (Azkaban) Manually triggered Job Dumper Watch Changes Index data Metadata Service Get Splits Index and states configs Parquet files DB File change List Read
15. 与内建索引的区别 Parquet RowGroup ColumnChunk ColumnChunk ColumnChunk •  Parquet: Max/Min •  Metadata Service: Max/Min, Dict info, and bloom filter. •  Parquet文件内建元数据不完整。 •  MapReduce/Online indexing •  内置索引至少要读一次Footer。 Footer Row Group Metadata Row Group Metadata Column Chunk metadata Column Chunk Metadata Column Chunk Metadata Column Chunk metadata Column Chunk Metadata Column Chunk Metadata
16. offset 数据发布 Kafka v1 v2 HBase Table (2017-12-08-01) Parquet files HBase Table (2017-12-08-02) Parquet files Metadata Service
17. Metadata服务效果 采集Metadata service上 线前后各一周的query执行 状况。 percentile! 95% ! W/O! 42.01! W/! 21.36! 99%! 269.55! 128.69! 99.9%! 2077.28! 819.84! •  上线Metadata Service之后,超过200秒query的比例明显下降。 •  小于20秒的query的比例达到近95%的比例。 •  从95%,99%,99.9%Percentile的执行时间对比,性能提升了近一倍。
18. 新的挑战 •  周期性的周报、月报查询 Day 1! Day 2! Day 3! Day 4! Day 5! Day 6! Day 7! Day 8! Day 9! Day 10! 7-days query ! 7-days query ! 如何避免重复计算?
19. Cache Layer服务 Query A! Query B! Cache Layer! Service! Presto! Query-A! Values! TTL! Query-B! Values! TTL! Query-B- Value! TTL! Segment-1! Query-B- Value! TTL! Segment-2! Child-Query更新 Presto! Query-Segment-2 Cache Layer! Version-2 Metadata! Service! Service! QuerySegment-1! QuerySegment-2! Values! Values! Version-1! Version-2!
20. Cache Layer改写查询 SELECT sum(???) as imp FROM transaction WHERE event_date >= timestmp ‘2017-12-01’ and event_date < timestamp ‘2017-12-08’ and network_id = 263548 SELECT event_date, data_version, sum(???) as imp_n, FROM transaction WHERE event_date >= timestmp ‘2017-12-07’ and event_date < timestamp ‘2017-12-08’ and network_id = 263548 group by 1, 2
21. Cache Layer Service 执行流程图 SQL! RESULT! Cache Layer Service PARSER! AST tree! REWRITER! AGGREGATOR! 解析时间相关字段 拆分聚合函数 Tempered AST tree! SEGMENTER! Segmented SQL! SCHEDULER! Partial! Result! Store! ۱‫!ތ‬ Version event_date! 增加聚合KEY 拆分时间范围 Presto cluster! Presto cluster! Presto cluster! 组装分段SQL
22. Cache 调度/Routing SQL Query Result Cache Layer! ! Scheduled slot! slot! Queue slot! !!slot! slot! ! Adhoc Queue ! slot! slot! slot! !slot! slot! ! ! Query Cache! ! ! ! ! ! ! ! ! ! Route Table! ! ! ! ! Presto Cluster! Presto Cluster! Presto Cluster! 据统计,92%query命中Cache Layer, 平均延迟1~2毫秒。
23. 新的问题 我们需要一个资源可伸缩的OLAP。
24. Presto集群 on AWS Metadata Service RDS Presto Cluster A Availability Zone #1 Availability Zone #2 Auto Scaling group Presto Cluster B AWS S3 Presto Cluster C Availability Zone #1 Availability Zone #2 Auto Scaling group AWS S3 Availability Zone #1 Availability Zone #2 Auto Scaling group Availability Zone #1 Availability Zone #2 Auto Scaling group
25. Presto集群伸缩 Admin Presto Cluster Launcher •  集群状态信息 (节点/ASG/版本) •  Scale-In: 发送SHUTTING_DOWN信号给 Presto worker(s). •  Scale-Out: 指定ASG加入节点。 •  使用场景: ü  Scheduled Query à Scale-out----running----trigger scale-in à资源回收 ü  Presto InsufficientResourcesFailures à trigger scale- out à 发出告警 Presto Cluster X Presto Coordinator ҁOn-Demand҂ Presto Worker ҁSpot҂ Presto Worker ҁOn-Demand҂ Monitor System •  系统升级维护 •  资源使用率 •  使用Spot Instance需要容忍机器被回收 => 支持On-Demand,Spot-Instance混合部署
26. Cache Layer on AWS Presto Cluster A User 1 User 2 Query Cache Layer Service Amazon Route 53 አಁ! User 1! User 2! Primary Cluster! Secondary Cluster! Presto Cluster A! Presto Cluster C! Presto Cluster B! Presto Cluster C! Presto Cluster B Presto Cluster … •  注册Presto Coordinator地址到AWS Route 53 (DNS服务)。 •  Cache Layer根据定义的路由规则和集群容错顺序提交query。 AWS S3 Metadata Service
27. 总结 Metadata Service •  查询效率优化与执 行框架解耦 •  数据发布原子性 •  持续提升查询性能 Cache Layer Service •  降低重复计算 •  缓存query结果,提 升对外服务能力 •  设置查询路由表, 高可用建设。 Presto on AWS •  跨AZ高可用架构 •  多Presto集群管理 •  Scale-in/Scale-out զPrestoԅ໐ஞጱOLAP๐‫ۓ‬ඪඅFreeWheel! ள᭛ीᳩጱහഝԾߝ޾ӱ‫ۓ‬ᵱ࿢!
28. • 姜冰 • Principal Software Engineer • bjiang@freewheel.tv