在本文中优酷数据中台的数据技术专家门德亮分享了优酷从 Hadoop 迁移到阿里云 MaxCompute 后对业务及平台的价值.
本文内容根据演讲视频以及 PPT 整理而成.
大家好, 我是门德亮, 现在在优酷数据中台做数据相关的事情. 很荣幸, 我正好见证了优酷从没有 MaxCompute 到有的这样一个历程, 因为刚刚好我就是入职优酷差不多 5 年的时间, 我们正好是在快到 5 年的时候, 去做了从 Hadoop 到 MaxCompute 的这样一个升级. 这个是 2016 年 5 月到 2019 年现在的 5 月优酷的发展历程, 上面是计算资源, 下面是储存资源. 大家可以看到整个用户数, 还有表的数据, 实际上是在呈一个指数式增长的. 但是在 2017 年 5 月, 当优酷完成了整个 Hadoop 迁移 MaxCompute 后, 优酷的计算消耗, 还有储存的消耗实际上是呈下降趋势的, 整个迁移得到了一个非常大的收益.
下面说一下优酷的业务特点.
第一个特点从大数据平台整个的用户复杂度上面, 不止是数据的同学和技术的同学在使用, 还会包括一些 BI 同学, 测试同学, 甚至产品运营都可能去使用这个大数据的平台.
第二个特点就是业务复杂, 优酷是一个视频网站, 它有非常复杂的业务场景, 从日志分类上, 除了像页面浏览, 还会有一些播放相关的数据, 性能相关的数据. 从整个的业务模式上, 有直播, 有会员, 有广告, 有大屏等这样一些非常不一样的场景.
第三个特点, 就是数据量是非常巨大的, 一天的日志量会达到千亿级别, 这是一个非常旁大的数据量, 而且会做非常复杂的计算.
第四个是比较有意思的, 不管是小公司, 大公司, 对成本的意识是非常高的. 优酷也是有非常严格的预算, 包括在阿里集团内是有非常严格的预算系统的, 但是我们也经常会去做一些重要的战役, 像双十一战役, 像我们暑期的世界杯战役, 还有春节也会搞各种战役. 这样的话, 其实对计算资源的弹性要求是非常高的.
基于上面的优酷的业务特点, 我整理了 MaxCompute 可以完美的支持我们业务的几个特点.
第一个, 简单易用.
第二个, 完善的生态.
第三个, 性能非常强悍.
第四个, 资源使用非常弹性.
第一个特点, 简单易用. MaxCompute 有一个非常完整的链路, 不管是从数据开发, 还是数据运维, 包括数据集成, 数据质量的管控, 还有整个数据地图, 数据安全. 当年优酷从 Hadoop 迁到 MaxCompute 之后, 我们最大的体会是自己不用半夜经常起来去维护集群了, 不用去跑任务了, 写一个任务, 别人之前提一个需求过来, 我可能要给他排几周, 而现在我可以告诉他, 我给你马上跑一下, 就可以出来了. 包括之前像分析师 BI 还要登录客户端, 写脚本, 自己写调度, 经常会说我的数今天为什么没出来? 包括高层看的数, 可能要到 12 点钟才能出来. 而现在基本上所有重要的数据都会在 7 点钟产出, 包括一些基本的业务需求, 其实分析师或者产品, 他们自己都可以实现了, 不需要所有需求都提到数据这边.
第二个特点, 完整的生态. 优酷在 2017 年之前是完全基于 Hadoop 的生态, 迁到 MaxCompute 之后, 是基于阿里云提供的 Serverless 大数据服务的生态. 大家可以在开源上看到的组件, 在整个的 MaxCompute 上都是有的, 而且比开源的要更好用, 更简单. 从架构图上可以看到, 我们中间是 MaxCompute, 左侧依赖的 MySQL,Hbase,ES,Redis 这些都是由同步中心去做一个双向的同步. 右侧会有资源管理, 资源监控, 数据监控, 包括数据资产, 还有一些数据规范. 我们下层的数据输入, 包括一些集团的采集工具, 再往上边, 有提供给开发人员用的 DataWorks, 包括一些命令行的工具; 有提供给 BI 人员用的 QuickBI 及数据服务.
第三个特点, 强悍的性能, MaxCompute 支撑了优酷 EB 级的数据存储, 千亿级的数据样本分析, 包括千亿级的数据报表, 10W 级实例的并发, 任务. 这些在之前维护 Hadoop 的时候, 是想都不敢想的.
第四个特点, 资源使用的弹性. 我们在 2016 年迁移之前, 其实优酷的 Hadoop 集群规模已经达到了一千多台, 这个当时还是一个比较大的规模. 当时我们遇到了很多问题, 包括像 NameNode 这种内存的问题, 机房没有办法再扩容的问题, 当时是非常痛苦的, 包括一些运维管理上面的问题. 我们不断的去问运维要资源, 运维告诉说, 说你们已经花了多少多少资源, 花了多少多少钱. 我们面临的问题是计算资源如何按需使用, 夜里的时候作业很多, 到了下午之后, 我的整个集群都空下来了, 没有人用, 造成了浪费. 其实 MaxCompute 完美的解决了这个问题.
第一个, 它是按用量计费的, 不是说给你多少台机器, 然后就收你多少钱的, 真的是你用了多少资源收多少钱的, 这个在成本上来说, 比自己去维护集群, 可能是一个砍半 (降 50%) 这样的收益.
第二个, 实际上 MaxCompue 计算资源是可以分时的, 比如说生产队列, 凌晨的时候会调高一些, 保证报表能够尽快出来. 到白天时候, 让开发的计算资源高一些, 可以让分析师, 开发去临时跑一些数据, 会更顺畅一些.
第三个, MaxCompute 快速的扩容能力, 比如说突然有一个比较强的业务需求, 发现数据跑不动了, 计算资源不够, 所有的队列都堵死了, 这个时候其实可以直接跟运维说一声, 帮忙一键扩容, 他两秒钟敲一个命令就搞定了. 这样的话, 所有的资源可以迅速的消化下去.
上面是优酷为什么采用 MaxCompute, 下面是在优酷的业务场景下, 我们一些典型的方案, 应用. 这张图实际上是优酷, 包括可能现在阿里集团内部一些非常典型的技术架构图. 中间可以看到, MaxCompute 在中间核心的位置, 左侧主要是一个输入, 右侧是一个输出的趋向, 绿色的线是一个实时的链路, 包括现在我们从整个的数据源上, 比如 DB 也好或者服务器的本地日志 Log 也好, 我们通过 TT&Datahub 存储到 MaxCompute 上面做分析. 当然现在非常火的 Flink 实时计算, 其实是作为一个实时处理的链路.
包括 DB 的同步, 除了实时的链路, DB 也会去通过按天 / 按小时, 把数据同步到 MaxCompute, 数据计算结果也可以同步到 Hbase,MySQL 这种 DB 上面. 再通过统一的服务层对应用提供服务. 下面这个是机器学习 Pai 做的一些算法训练, 再把训练的结果通过 OSS 传到一个算法的应用上面去.
这张图可能也是业界比较流行的一个数仓分层的图, 因为我们这边是数据中台, 所有的数据都是统一从 ods 层 cdm 层, 然后 ads 层, 去一层一层的往上去做精细, 再到最上面, 通过接口服务, 文件服务, SQL 服务, 去提供多样化的服务. 再往上面, 提供对内的一些数据产品, 对高管, 对小二, 可能还有一些对外的, 比如说像优酷的播放数, 包括热度这些对应用的数据.
这张图其实就是我们从 Hadoop 迁到 MaxCompute 平台上以来, 两个非常经典的案例. 我们通过数据中台对不同场景的用户打通, 来去赋能到两个不同的场景, 提升业务价值.
第二个, 可能是内部的, 我们通过优酷, 还有集团内部的一些 BU 去做换量, 我们通过统一的标签去做样本放大, 把优酷的量导给其它的 BU, 把其它 BU 的量导给优酷, 这样去达到一个共赢的效果.
这张图大部分互联网公司不太会涉及到, 就是关于反作弊的问题. 这个是我们在 MaxCompute 做的一个反作弊的架构, 通过原始的数据去提取它的特征, 然后再通过算法模型, 包括机器学习, 深度学习, 图模型去支持流量反作弊, 渠道反作弊等等. 再通过业务场景上反作弊的监控工具, 把监控到的作弊信息去打一个黑白样本, 再把这个黑白样本跟特征一起来不断的迭代优化算法模型. 同时针对算法模型, 做一个模型的评价, 不断来完善反作弊体系.
最后一点, 其实还是跟成本相关, 在日常使用中, 一定是有小白用户或者一些新来的用户去错误的使用或者不在乎的使用一些资源, 比如经常会有一些实习生或者是非技术的同学, 如分析师, 一个 SQL 消费比较高, 这个其实是非常浪费资源, 而且可能他一个任务, 让其他所有人的任务都在这儿等着排队, 实际上我们会去对整个的资源做一个治理.
从节点的粒度上, 通过大数据来治理大数据, 我们可以算出哪些表产出来之后, 多少天没有被读取的, 包括它的访问跨度可能没有那么大的, 我们会去做下线或者去做治理, 有一些业务场景可能并不是非常的重要或者它的时间要求没有那么高, 比如一些算法训练, 可以去做一些错峰的调度, 保证水位不要太高. 从 MaxCompute 任务的角度, 可以算出哪些任务有数据倾斜, 哪些数据可能会有相似计算, 哪些任务需要去做 MapJoin, 哪些任务需要去做一些裁剪, 然后来节省它的 IO. 还有哪些任务会去做暴力扫描, 扫一个月, 扫一年的数据, 哪些数据可能会有这样一个数据膨胀, 比如说它做了 CUBE 之类的这种复杂计算, 一些算法模型的迭代; 我们通过数据计算出来的这些迹象, 去反推用户, 来去提高它的这样一个数据的质量分, 来去达到我们降低整个计算资源的目的.
在计算平台的角度, 我们也持续的在使用 MaxCompute 推出的一些非常高级的用法, 比如我们这边的 HBO,Hash Cluster,Aliorc,HBO 就是我们基于一个历史的优化, 这样避免了用户不知道怎么调参, 我可能为了自己任务快一点, 就调一个特别大的参数, 这样的话, 对集成的资源是非常浪费的. 通过这个功能, 用户就不用去调参数, 集群自动调好, 用户就写好自己业务逻辑就好了.
第二块, 可能就是最近两年推出的 Hash Cluster, 当时在使用 Hadoop 的时候经常会出现, 两个大表 Join 的时候计算不出来, 这个 Hash Cluster 其实是一个优化的利器. 大表跟小表 Join, 可以做一些分发, 做一些优化. 大表跟大表就涉及到一个排序的问题. 这个 Hash Cluster, 实际上就是提前把数据排好, 中间省掉很多计算环节, 来达到效率提升的目的.
第三个, Aliorc, 在一些固定的场景上面, 可以稳定的提升 20% 的计算效率.
第四个, Session. 对一些比较小的数据, 直接就放到 SSD 或缓存里面, 一个节点下游有 100 个叶子场景, 是非常友好的, 因为低延迟秒出结果. 同时, 优酷也在使用 Lightning 解决计算加速, 这个是在一个计算架构方案上的优化, 它是一个 MPP 的架构.
最后一页是存储的优化, 因为像一些关键的原始数据或者是需要审计的数据是不能删的, 永久不能删的. 实际上就会造成我们数据存储的趋势是一直往上不减的, 计算会在某一个时间点达到一个平衡. 当前用这么多的计算资源, 再往后, 其实应该也不会再大涨了, 比如说旧的业务逻辑下掉了, 会换新的业务逻辑, 这样会保持在一个相对平稳的波动上面. 但是储存, 因为它有一些历史的数据是永远不能删的, 可能会出现一直在增长, 而且是指数级的. 所以我们也会持续关注存储的情况, 我们主要有四个手段.
第一个, 还是通过大数据来治大数据, 去看哪些表它的访问不够或者它的访问跨度不够. 就是对一些生命周期的优化, 来去控制它的增速. 包括下面的, 刚才提到的 Aliorc, 实际上是做压缩的, 我们会去做一些大字段的拆分, 来提高压缩的比例.
OK, 这个是优酷在 MaxCompute 中的一些应用场景, 感谢大家的聆听.
来源: https://yq.aliyun.com/articles/705113