字节跳动基于Apache Hudi构建EB级数据湖实践

时间:2021-08-30 01:56:24   收藏:0   阅读:6

技术分享图片

来自字节跳动的管梓越同学一篇关于Apache Hudi在字节跳动推荐系统中EB级数据量实践的分享。

技术分享图片

接下来将分为场景需求、设计选型、功能支持、性能调优、未来展望五部分介绍Hudi在字节跳动推荐系统中的实践。

技术分享图片

技术分享图片

技术分享图片

在推荐系统中,我们在两个场景下使用数据湖

  1. 我们使用BigTable作为整个系统近线处理的数据存储,这是一个公司自研的组件TBase,提供了BigTable的语义和搜索推荐广告场景下一些需求的抽象,并屏蔽底层存储的差异。为了更好的理解,这里可以把它直接看做一个HBase。在这过程中为了能够服务离线对数据的分析挖掘需求,需要将数据导出到离线存储中。在过去用户或是使用MR/Spark直接访问存储,或是通过扫库的方式获取数据,不符合OLAP场景下的数据访问特性。因此我们基于数据湖构建BigTable的CDC,提高数据时效,减少近线系统访问压力,提供高效的OLAP访问和用户友好的SQL消费方式。
  2. 除此之外,我们还在特征工程与模型训练的场景中使用数据湖。我们从内部和外部分别获得两类实时数据流,一个是来自系统内部回流的Instance,包含了推荐系统Serving时获得的Feature。另一种是来自端上埋点/多种复杂外部数据源的反馈,这类数据作为Label,和之前的feature共同组成了完整的机器学习样本。针对这个场景,我们需要实现一个基于主键的拼接操作,将Instance和Label Merge到一起。开窗范围可能长达数十天,千亿行量级。需要支持高效得列式选取和谓词下推。同时还需要支持并发Update等相关能力。

在这两个场景下存在如下挑战

  1. 数据的非常不规整。相比Binlog,WAL没法获得一行的全部信息,同时数据大小变化非常大。
  2. 吞吐量比较大,单表吞吐超百GB/s,单表PB级存储。
  3. 数据Schema 复杂。数据存在高维、稀疏等现象。表列数从1000-10000+都有。并且有大量复杂数据类型。

技术分享图片

技术分享图片

在引擎选型时,我们考察过Hudi,Iceberg,DeltaLake三个最热门的数据湖引擎。三者在我们的场景下各有优劣,最终基于Hudi对上下游生态的开放,对全局索引的支持,对若干存储逻辑提供了定制化的开发接口等原因,选择了Hudi作为存储引擎。

技术分享图片

功能支持包括存储语义的MVCC和Schema注册系统。

技术分享图片

首先为了支持WAL语义的写入,我们实现了针对MVCC的Payload,基于Avro自定义了一套带时间戳的数据结构实现。并通过视图访问的方式对用户屏蔽了这套逻辑。除此之外还实现了HBase Append的语义,可以实现对List类型的追加写而非覆盖写。

技术分享图片

由于Hudi本身的Schema从Write的数据中获取,这种方式和其他系统对接不是很方便,以及我们需要一些基于Schema的扩展功能,所以我们构建了一个元数据中心来提供元数据相关的操作。

技术分享图片

在我们场景下性能挑战比较大,最大单表数据量达400PB+,日增PB级数据量,总数据量达EB级别,因此我们针对性能和数据特性开发做了一些工作来提高性能。

技术分享图片

序列化方面包括如下优化

  1. Schema:数据使用Avro序列化开销特别大,而且消耗资源也非常多。针对这个问题,我们首先借助Schema的JVM单例,规避了序列化过程中很多费CPU的比较操作。
  2. 通过优化Payload逻辑,减少了需要序列化的次数。
  3. 借助了第三方的Avro序列化实现,通过将序列化过程编译成字节码的方式来提高SerDe的速度以及降低内存占用。对这种序列化形式做了修改,以保证我们的复杂Schema也能够正常编译。

技术分享图片

对于Compaction流程优化如下

技术分享图片

HDFS作为一种面向吞吐设计的存储,在集群水位比较高的情况下,实时写入毛刺比较严重。通过和HDFS团队的沟通与合作,做了相关的一些工作。

技术分享图片

还有一些零零碎碎的性能提升,流程修改和Bug Fix,大家感兴趣可以找我交流。

技术分享图片

技术分享图片

未来我们会在以下几个方面持续迭代。

技术分享图片

最后打个广告,目前我们推荐架构团队正在招人,工作地包括:北京/上海/杭州/新加坡/山景城等,有兴趣的小伙伴可以添加微信qinglingcannotfly或发送简历至邮箱: guanziyue.gzy@bytedance.com

原文:https://www.cnblogs.com/leesf456/p/15201918.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!