爱奇艺大数据多 AZ 统一调度架构
01#
导语
02#
爱奇艺大数据简介
大数据团队根据各个业务的数据与计算资源需求,事先规划将不同业务分配到不同集群上,这决定了各个集群的规模。但随着业务的发展,事先规划往往赶不上实际变化。由于数据、计算被绑定在某个集群上,没法跨集群自由调度,各个集群的负载容易变得不均衡。我们多次遇到机房瓶颈导致某个集群无法扩容,只能整个业务或者整个集群搬迁,带来非常大的工作量。
业务创建数据、读取数据、提交计算任务等日常操作都需要指定集群,带来不必要的学习成本,影响数据开发与分析效率。
不同集群拥有各自的元数据中心,元数据不互通,没法跨集群访问,导致如果依赖的数据在另一个集群,需要同步到本集群才能访问,造成数十 PB 的数据冗余,大量浪费存储成本,且数据同步任务维护成本高。
03#
爱奇艺大数据多AZ统一调度架构
AZ:由原先多个大小不一的 AZ 合并到同城两个大 AZ,进行跨 AZ 分流及关键业务互备。 存储:由原先的 7 个 HDFS 集群合并到 2 个 HDFS 集群,并基于数据热度进行分层存储,缩减数据规模。 计算:由原先的 7 个离线计算集群、若干个实时计算集群,合并成 2 个离线计算集群、2 个实时计算集群。
统一大数据存储:自研 QBFS (iQIYI Bigdata FileSystem) 大数据文件系统,兼容HDFS、对象存储等不同的文件系统协议,实现不同集群间统一访问和存储路由,支持数据在不同分层存储介质间的无感流转。 统一计算调度:自研 QBCS (iQIYI Bigdata Computing Scheduler) 大数据统一计算调度服务,根据任务属性、集群情况、AZ 间网络情况等因素,将任务调度到合适的集群,并支持自动主备、故障切换等高可用能力。 统一元数据中心:提供一个全局统一定义的元数据服务,实现“一处登记、多处访问”。
标准存储:日均访问超过 5 次的热数据,仍旧存放在 HDFS 集群上,相比原来,数据规模大幅减少,极大减轻 HDFS 的压力。 低频存储:日均访问 1-5 次的温数据,应用 Erasure Coding,从原来的 3 副本减少到 1.5 副本,同时存储到更大容量、更高密度的存储机型,存储成本降低 65%。基于数据热度分析结果,大数据生命周期管理系统通过 QBFS 自动将数据从热存储介质中转移到温存储介质,整个过程对上层应用无感,无需业务人工介入,极大加速数据治理效率。 归档存储:近十周无访问的冷数据,存到公有云冷归档存储中,通过大数据生命周期管理系统来转移和取回,进一步降本。
需为每个集群独立申请计算资源(YARN 队列)。
提交任务时需指定具体集群,存在选择错误的可能性。
集群的选择可能不是最优,考虑到输入数据所在的物理位置等因素,可能导致大量跨集群数据传输,以及跨集群延迟带来的任务运行缓慢等问题。
集群有故障的风险,因此需要手动管理切换任务,实现跨集群高可用的难度较大。
集群迁移时,需要修改每个任务的运行集群,较为繁琐。
任务所属项目的规划:根据任务所属项目,获取该项目规划的集群,作为调度决策的一个重要因子。大数据平台根据各个项目(业务)的依赖关系、历史资源使用情况,对每个物理集群做了基础的规划,每个项目都有其主集群,部分业务规划了备用集群。调度算法将规划作为比较重要的考虑因素,尽量保证项目下使用的资源大多都放置到规划的集群中,确保底层集群资源使用均衡。 任务的输入/输出所在物理集群:QBCS 将采集并分析任务元信息,提取任务的输入/输出信息。任务的输入/输出表使用 QBFS 作为存储地址,其存储在一个具体的物理集群中。基于 QBFS 的挂载表,可以获取每个表所在的物理集群。调度算法考虑将计算靠近存储,降低跨集群、跨 AZ 的流量。 任务使用的队列:任务队列的存在和使用情况是一个考虑因素,如某个集群的队列不存在,就不应该被调度到该集群,避免任务失败。另外,集群队列的繁忙程度也可以作为考虑因素。 集群和网络情况:根据资源监视器收集的信息,QBCS 可以做到自动集群切换。当集群故障时,考虑提交任务到备用集群;当跨 AZ 的网络专线拥堵时,优先考虑调度到降低跨 AZ 流量的运行集群。
QBFS、QBCS 解决了存储、计算层面的统一路由,但还没解决数据仓库构建、数据分析层面的元数据割裂问题。
爱奇艺基于 Hive 构建了离线数据仓库,后续又引入 Iceberg 数据湖表格式,以及 Spark SQL、Impala、Trino、StarRocks等不同的 OLAP 引擎,这些工具都共同依赖 Hive 元数据服务,即 Hive Metastore。爱奇艺大数据业务主要的元数据都在 Hive Metastore 里,因此我们必须统一 Hive 元数据服务。
在旧的架构模式(如图 6)下,各个集群拥有各自的 Hive Metastore,彼此不互通,带来如下问题:
业务没法跨集群访问数据,比如跨集群 JOIN Hive table,需要在本集群创建同样的 table schema,再将对应的表数据(HDFS 文件)同步到本集群。这创造了大量的跨集群数据同步任务,难以维护且造成大量数据冗余。
每个集群只有一个 Hive Metastore,元数据存储在 MySQL 里,没法水平扩展。随着数据增长,MySQL 成为元数据服务的瓶颈,常常因为慢查询影响到 Metastore 服务,进而影响数据生产与分析任务。
集群内不同业务间缺少隔离,所有的压力都集中到一个 Hive Metastore 上,容易因某个业务的异常访问影响所有业务。
水平扩展能力:集群内根据业务的元数据规模,将某个大业务或者某一组业务的元数据拆分到不同的 Hive Metastore,存储在不同的 MySQL中,从而将单一 MySQL 扩展成多个 MySQL,解决了单一 MySQL 的容量及性能瓶颈,提升 Hive 元数据服务整体的承载能力。
业务隔离:不同业务使用不同的 Hive Metastore 及 MySQL,减少业务间的影响。
故障风险降低:单一超大规模的 Hive Metastore 及 MySQL 容易触发各种瓶颈及问题,一旦故障,恢复时间往往需要数小时,故障时间长且影响面广(波及所有 Hive 相关任务)。拆分成各个独立的小 MySQL 后,不容易出问题,故障也只是局部影响,恢复快。
支持跨集群访问:减少数据同步冗余,降低存储成本。
提高业务开发效率:一处创建即可多处访问,业务只需关注SQL,不再需要知道底层 Hive table 在哪个集群。
04#
总结及规划
混合云存储:QBFS 兼容公有云对象存储,支持将低频数据无感转移到公有云,运行在私有云或者其他云上的计算任务通过 QBFS 可以直接访问存储在公有云上的低频数据。
混合云计算:利用公有云丰富的计算机型及随时腾退的特性,加快计算机型迭代,提升整体算力。我们正在引入公有云 AMD、ARM 等新算力,进行弹性计算调度,助力进一步降本。
混合云 OLAP:爱奇艺 OLAP 体系由 Hive、Spark SQL、Trino、ClickHouse、StarRocks 等开源 OLAP 引擎组成,并通过 Pilot SQL 网关统一访问入口。后续我们计划引入公有云 OLAP 产品作为补充,并通过 Pilot SQL 网关来统一调度。