WOT2016杨大海:优酷土豆Hadoop集群挑战海量数据与高并发之道
伴随着移动互联网的高速发展,人们的生活方式和行为习惯已经在不知不觉中发生了改变,获取信息的渠道也开始向新兴媒体转移。现在的网民不再甘愿成为信息的被动接收者,而是习惯于主动寻找自己感兴趣的内容。这也使近几年的国内视频网站邂逅难得的发展机遇。
杨大海,优酷土豆大数据平台高级架构师,主要负责优酷土豆开放大数据平台的研发和运营
对于视频网站来说,仅提供基础服务已经不能满足用户的需求。能否通过挖掘大数据的价值为用户提供差异化的优质内容,成为视频网站艳压群芳的关键。
目前,优酷土豆每天播放的视频将近10亿条,由此形成的数据量约20T。通过运用大数据技术,优酷土豆可以为用户提供“猜你喜欢”的视频推荐;为主告主提供精准的内容投放;为优质内容的产出和采购提供指导性的决策支撑;也推动着公司其他产品分析问题,找到优势,从而推动公司整体业务的发展。
为支持公司业务的迅猛发展,优酷土豆大数据平台一直在经历着成长和演进。近日,优酷土豆数据平台高级架构师、WOT2016讲师杨大海在接受51CTO记者的独家专访时谈到,要发挥大数据的价值,就要打破部门间数据独立存在的格局,构建开放的数据平台,让所有同事都知道如何利用数据改善工作,将数据文化要融入公司运营当中。
图1:优酷土豆hadoop平台演变
优酷土豆大数据平台架构
杨大海谈到,优酷土豆运营的数据主要包括播放、用户交互、搜索、广告等。整个平台以Hadoop集群为基础,目前已经达到1000个节点的集群规模,并还将结合业务继续扩展。
图2:基于haodoop的hdfs和yarn的数据平台设计架构图
由于跨机房等问题,优酷土豆自研了一套日志系统,对各个团队将近500种日志统一进行收集。收集到的日志按照业务类型有不同策略的存储方案,原始日志直接以文件的形式离线存储在HDFS上,做一些离线的分析和处理;另外,平台搭建了一套近五十台服务器规模的开放的Kafka,满足了一些实时业务读取和访问数据的需求。
平台全部的计算采用YARN实现动态资源管理。目前基于YARN 集群部署MapReduce、DAG、Spark等计算模型。为避免一些在线业务查询的相互影响,目前HBase与Storm是通过单独的集群运行。为了最大限度地合理使用服务器资源,团队也正在进行HBase on YARN 以及Storm on YARN的测试。
图3:HDFS分层存储
杨大海谈到,团队使用Storm已经有4年多的时间,Storm与Spark Streaming相比,对于实事计算的需求响应得更好。举例来说,平台每一秒都有可能产生很多视频的播放数据。现在要算某一个视频的播放量,只要Storm的计算程序负载不出现问题,就可以实现对需求的实时响应,进行计算,呈现的是简单的线性数据流的形态。但是Spark Streaming不会直接计算,它会等10秒钟或者20秒,等到数据量达到几千条甚至几万条,再统一进行计算。相当于形成很多时间窗口,虽然这个时间窗口可能足够小,但与数据流相比还是有很大区别的。
数据平台团队整个技术栈之上创建了Hadoop的扩容和优化、Storm问题的排查和优化等应用,开放了一个HBase集群和一个Redis集群做Cache,以接口的方式为全公司去提供服务。
海量数据与高并发的挑战
杨大海谈到,现在几乎所有公司在搭建大数据平台时都会面临两大难题,就是如何应对数据量和并发量的挑战。
海量数据
前文提到,优酷土豆每天产生的播放量将近10亿,在此基础上,用户还会产生非常多的周边行为,比如点赞、评论等。杨大海表示,现在市场上鲜有能对如此大的数据量提供即时、灵活且多维查询的数据产品,都存在一定的局限性。现在大家通用的做法是综合考虑数据量和需求两个方面,通过多种技术的结合来实现,但都不能解决得非常完美。
比如现在计算每一条视频的播放曲线。现在优酷土豆的视频总量超过3亿,每一条视频在每一天都会产生一条数据,代表它今天的播放量。这样一来,就算不加其他维度,每天入库的数据量都等于视频量,一定是需要NoSQL支撑的,比如HBase。但HBase.不支持多维查询,只能通过一个Key,比如视频ID来查询。如果这时需要加一个维度,比如在安卓手机上的播放情况,就要加上终端是安卓还是iOS这个维度,想实现即时的查询就非常困难。
为了实现这个需求,杨大海和他所在的数据团队也在逐步摸索。早期他们通过建立索引表,使安卓终端与视频ID对应的终端这两个维度产生一个Key,进而找到数据库的主键,一条get就可以查询。后来社区开源了Phoniex,这是一套多维查询的办公组件,就简化了做索引的工作。但在实际的过程中,杨大海发现用这种方式发法支持全表扫描,因此在程序设计上就尽量避免全表扫描,让后台算一部分数据。杨大海表示,对于NoSQL技术的探索,大家还有很长的路要走。
高并发
在所有的系统需要有很大的吞吐量,但机房的网络环境却不理想想的情况下,需要数据团队有非常强的能力,通过操作系统找到系统瓶颈。比如一段写得不太好的程序,可能上线之初并发量低的时候不会出现任何异常,但是并发量高的时候可能会出现内存泄露导致崩溃,这都是非常常见的。
这时候就需要数据部门通过分析系统的命令看到它所占有的资源,然后再反向推导可能会有的问题来解决。往往做一个系统编码占用的时间非常短,但是这个系统是能够经得住大流量的考验正常运行,需要很长的时间来迭代。
图4:Hadoop平台挑战
数据是平台发展的源动力
杨大海表示,数据是优酷土豆的大数据平台架构不断演进的驱动力。公司的数据采集集统和数据化的概念推广得非常早,这使业务部门对数据都非常敏感,不管是运营,还是销售,几乎所有的业务部门都知道如果利用数据创造价值,怎么走数据流程。
现在优酷土豆的日志类型达四、五百种,并且用户数据的结构化做得非常好,每种日志都是有结构的。每个字段的描述在公司内都有开放的API,供员工查看。在这样的数据环境和氛围内,员工通过查看数据结构,想到研发一些之前没有想到的产品,比如广告投放如何基于数据做精准算法等等。
正如本文之前所提到的,大数据平台搭建本身是一项非常偏重技术底层的工作,需要消耗大量的人员投入到先期的搭建和后期运维当中。如果每个业务部门都分别去搭建基础系统,再做业务去开发,不仅浪费资源,更浪费时间。因此,打通公司各业务部门之前的数据壁垒,构建一套开放的大数据平台,才能更好地发挥技术的价值。
然而在公司内部实际运营大数据平台并不容易。由于整个团队的业务不能因为某一个人或某一个团队来影响这个平台,因此数据访问会涉及到很多权限的问题。那么如何在这种情况下让其他业务部门人员愿意用数据平台,并且体验非常好,是需要通过综合考虑数据量、任务数、资源争抢等问题,及时制定好资源管理和访问策略的规划。
杨大海谈到,针对使用过程中遇到的问题,他所在的团队也在不停地想办法解决。 在构建客户端的初期就需要制定严格的规范,哪些目录供生产使用、哪些目录供测试使用以及对每个用户团队实行配合管理。当然还需要对机器资源进行监控,防止用户在客户机上提交非相关的程序。前期规范好可以减少很多后期维护成本。