GooseFS 在云端数据湖存储上的降本增效实践
导语 | 本文推选自腾讯云开发者社区-【技思广益 · 腾讯技术人原创集】专栏。该专栏是腾讯云开发者社区为腾讯技术人与广泛开发者打造的分享交流窗口。栏目邀约腾讯技术人分享原创的技术积淀,与广泛开发者互启迪共成长。 本文作者是 腾讯高级工程师于飏。
基于云端对象存储的大数据和数据湖存算分离场景已经被广泛铺开,计算节点的独立扩缩容极大地优化了系统的整体运行和维护成本,云端对象存储的无限容量与高吞吐也保证了计算任务的高效和稳定。然而,云端存算分离架构也面临数据本地性、网络吞吐与带宽成本等问题。因此,腾讯云对象存储研发团队进一步演进了近客户侧的加速存储系统GooseFS用以解决上述问题。本文将通过一个独特新颖的客户实践来着重介绍使用GooseFS对有大数据/数据湖业务平台的降本增效。
本文将着重介绍某音乐类大客户通过使用GooseFS提升其大数据业务效能,从而相应缩减计算资源的实践来归纳GooseFS在云端大数据/数据湖平台的降本增效上的关键作用。
所有被访问到云端数据都会被缓存到GooseFS的Worker节点中,Worker 节点本身支持多级存储介质:RAM(内存RamDisk)、SSD以及HDD,支持不同层级存储介质之间的Quota配置,用户可以合理地组合集群上的闲置存储介质以达到性能和计算成本的最优。
GooseFS的HCFS文件系统层实现了getFileBlockLocations方法来获得一个文件待读取块的位置信息,因此,GooseFS跟本地HDFS可以支持上层计算系统的数据本地化调度。在Hadoop MapReduce/Spark等计算系统中均可以支持将计算任务移动到里待读数据块最近的位置来读取。
为了实现数据本地读取的最大效能,GooseFS支持了短路度读的能力,能够让计算Task从本机读取数据时,能够省掉RPC通信调用带来的性能损耗,而直接获得读取本地文件的效能(如果Block在RamDisk中甚至可获得近内存级的访问时延)。
(二)10亿级以上海量元数据支持
目前, GooseFS自身产品压测已经到了10亿文件数目 ,实际客户生产环境中也稳定支撑超过了3亿小文件加速缓存的机器学习训练业务。
(三)GooseFS高可用性(High availability)
GooseFS的高可用主要是基于zookeeper和raft两种方式实现:
Raft架构则不需要额外的共享组件,只需要保证在Raft Group内节点的 9202端口能够正常通信即可,同时自治域中的节点数为奇数个即可。基于Raft的HA架构可以不用引入任何第三方组件即可完成主从自治,非常适合于无任何大数据相关依赖的独立加速场景,如基于Fuse接口的机器学习训练场景等。
下文就将基于某音乐类大客户的大数据平台为例介绍GooseFS如何助力其降本增效KPI的完成。
在我们的存量大数据存储客户中,有一家音乐大客户使用COS/CHDFS作为其BI数仓平台的底层存储,承载其用户访问行为流水查询和分析、用户画像以及推荐相关的业务场景,系统的整体架构大致如下:
我们在分析了客户的业务场景后,发现其PrestoDB的数仓平台是任务当中 IO密集性比较明显的一块业务。Spark SQL做ETL那块也会存在一定的IO访问量,不过主要性能瓶颈点并不在IO上。同时,我们发现客户使用IT5集群上有大量闲置的NVME SSD的磁盘资源,总计大约有500TB左右,足以存放其近期需要高频访问的热数据。
图 9 引入 GooseFS 作为本地加速缓存层
但是,我们需要解决如下三个问题:
- 如何让用户不做任何改动的引入GooseFS。同时,如果GooseFS故障能否切换到底层存储UFS,而不影响业务的访问体验。
-
如何防止首次查询带来的下行访问峰值,否则对于后端减负就没有意义。
- 如何尽可能地提高缓存资源的利用率。
以下,我们将针对上述问题,分别阐述GooseFS的解决方案。
(二)透明加速以及故障转移
为了解决用户不做任何改动引入GooseFS加速缓存层的需求,我们开发了透明加速能力,为用户提供了一种可以的无感利用GooseFS加速底层存储系统(UFS)访问的能力,即使用户业务代码中原先使用
透明加速的特性的整体设计如下:
图 10 透明加速的整体设计方案
在GooseFS 的HCFS客户端上,我们实现了一个AbstractCompatibleFileSystem来对接多个底层存储系统的HCFS实现,同样它也继承于GooseFS自身的HCFS实现类。当底层文件的访问URI传入进来后,这个CompatibleFileSystem就可以根据GooseFS Namespace 中的挂载映射关系找到对应的GooseFS路径访问。那么,这里会有一个问题:如果访问的UFS路径没有在GooseFS路径中,应该如何处理呢?
这里我们采用了配置可选项的方式,通过指定透明加速的scope范围(提供了GFS/GFS_UFS两种scope),那么在超出Namespace挂载路径范围外的请求,会直接通过调用UFS的HCFS接口来代理访问请求,这就相当于跟原先的裸UFS使用方式完全一致。如果请求的是Namespace挂载的位置,那么就会通过GooseFS加速整个UFS访问请求。
实际的生产环境中,客户将透明加速的scope设置为GFS_UFS,然后将对应的Hive DB或Table挂载到GooseFS的namespace上来灰度迁移业务到GooseFS中做加速。若遇到问题,也会使用故障转移逻辑做自动容错,待故障排除后,再人工开启热开关切换回来。
(三)Distributed Load预热与Hive Table/Partition管理
针对于首次访问可能会对后端带来的带宽峰值冲击,我们采用了 DistributedLoad(控制并行Load数目)+Qos(后端)的控制访问,用户可在闲时将需要访问热表数据提前预热到GooseFS中,在需要访问时就可以取到极高访问带宽:
图 12 热数据的闲时预热方式 这里GooseFS的Distributed Load使用了独立于GooseFS基础架构中 Master和Worker之外的JobMaster和JobWorker外围架构来完成这种异步任务:
目前,客户会基于工作流调度在闲时使用 DistributedLoad 命令提前预热第二天需要分析的热表数据以此达到首次访问比较好的命中率:
图 14 客户实际生产的 GooseFS 命中率 同时,客户引入了Hive Table/Partition管理架构(如图6 所示)以方便地管理需要预热的表和分区数据,客户不再关心具体需要预热 哪 些路径,而是直接按照Hive Table/Partition的维度来预热数据。
(四)asyncCache与索引数据文件的处理
GooseFS默认会开启asyncCache流程,当读取某个文件时,会异步地缓存命中的block块上来。但是这个带来了极大的读放大以及缓存容量的浪费,尤其是以ORC和Parquet为代表的索引数据文件会产生小块的随机读,如下图所示:
(五)实际生产效果
目前,该客户已经混合部署了超过200个节点规模的GooseFS作为其数仓/数据湖业务的加速缓存,累计缓存近千万文件数目:
图 16 客户生产环境的缓存文件数目和 Live Workers 监控
-
Presto SQL查询性能的提升
在客户的实际生产中,抽查单个Presto SQL Query的读取带宽从最初的 34.6 Gbps提升到了50.6 Gbps的读取带宽,下图为客户生产环境的实际查询截图:
图 17 客户生产环境 Presto 任务读取带宽
以下是可视化的对比:
- 客户侧成本优化
客户侧通过统计了YARN container的memorySeconds的消耗,来估算了整体资源利用率的提升。下面的表格是memorySeconds(GooseFS) - memorySeconds(UFS) 的百分比,即使在IO密集型特征的计算任务中GooseFS最多也可节省约8.06%资源消耗。
- 带宽成本降低
在采用GooseFS之前的云内网下行带宽峰值维持在接近700 Gbps:
GooseFS安全
原先客户环境依赖的CHDFS采用了自定义身份认证方案以及Ranger鉴权,GooseFS可无缝地接入UFS的认证和鉴权:
GooseFS实际会将GooseFS Namespace创建者Principal带给存储系统做身份认证,同时配合请求操作的UFS路径借助Ranger完成鉴权。
这里值得注意的是:
目前,GooseFS还无法直接将客户端的身份信息直接带给UFS做认证和鉴权,因此,这里只能向下传入Namespace创建者的身份信息。那么这里是否就不能做访问和权限管控了呢?答案是否定。
针对于身份认证,我们针对客户实现了自定义 CustomAuthenticationProvider对接到UFS 上的 CustomAuthentication 模块。而针对Ranger鉴权,由于UFS的 Ranger Policy的格式大不相同,因此当前只能定制Policy同步工具来做转换。在客户生产实践中,用户还是采用了单独配置GooseFS Ranger Policy的使用方式;另外,GooseFS新版本中也提供了完整Kerberos标准认证机制,届时有需求的用户也可依赖于此完成身份认证。
在数据湖批流一体场景下,GooseFS会针对Iceberg、Hudi等格式做适配支持,同时还会探索更多的Catalog管理能力。
在文件系统语义支持上,会重点完善POSIX文件系统接口支持,支撑除Hadoop生态以外的更多业务场景。针对高性能计算业务,GooseFS也会基于Zero Copy技术推出超高IOPS和极低数据访问延时的能力等。
作者简介
腾讯高级工程师,硕士毕业于西安电子科技大学,一直专注云端大数据存储相关技术的研发工作,Hadoop-COS(CosN文件系统)作者,GooseFS核心Founder,Hadoop,Alluxio社区Contributor。目前主要负责GooseFS的加速存储技术相关的研发工作。
推荐阅读