神经衰弱吃什么药| 什么粥减肥效果好| 白居易是诗什么| 双侧胸膜增厚是什么病| 夏天喝什么饮料好| 五月天主唱叫什么名字| 我宣你 是什么意思| 空字五行属什么| 维c有什么功效和作用| 知了什么时候叫| 维生素b6主治什么病| 阻断是什么意思| 高丽参和红参有什么区别| 什么是腔梗| 疣是什么样子图片| 伯邑考为什么不姓姬| 皮损是什么意思| 1998年属什么生肖| 三个降号是什么调| 六个点是什么意思| 硬发质适合什么发型| 尿血吃什么药最好| 花代表什么数字| 免疫力差吃什么| 臭氧是什么| 皮肤癣是什么原因造成的| 骨折什么感觉| 耳浴是什么意思| 排骨炖什么汤止咳润肺| 糖类抗原ca199偏高是什么原因| 山竹吃了有什么好处| 大象的鼻子有什么作用| 梦见好多水果是什么预兆| 为什么吃荔枝会上火| 1997年是什么生肖| 嘴唇红润是表示什么| 刺激什么意思| 儿童肚子痛吃什么药| 大战三百回合是什么意思| 手癣用什么药膏效果好| 喝啤酒尿多是什么原因| 胃经常胀气是什么原因| 窦性心律电轴右偏什么意思| 集分宝是什么意思| 购物狂是什么心理疾病| 螨虫长什么样子| 胃一阵一阵的疼是什么原因| 神经根型颈椎病吃什么药| 红男绿女是什么生肖| 20属什么生肖| 十二指肠球部溃疡吃什么药| 殊胜是什么意思| 喝什么排肝毒最快| 一个王一个八念什么| 吃什么降尿酸最快| 肢体拘挛是什么意思| 凝滞是什么意思| 用什么洗脸可以美白| 多梦吃什么药效果最好| 警示是什么意思| 貘是什么动物| 特此通知写在什么位置| 梦见老公不理我是什么意思| 1945年属什么| 夜尿多吃什么药效果好| 膻味是什么意思| 杆鱼是什么鱼| 就绪是什么意思| 什么是普惠性幼儿园| 浅表性胃炎伴糜烂用什么药| 鲁迅字什么| 第三代试管是什么意思| 稀字五行属什么| 六月二十日是什么日子| 万宝龙手表什么档次| 补料是什么意思| 想吃甜食是身体缺什么| 什么叫慢性非萎缩性胃炎| 右束支传导阻滞是什么病| 流感为什么晚上会比白天严重| 菽是什么意思| 哪吒的武器是什么| 生菜什么时候种| 过氧化氢弱阳性什么意思| 软组织密度影什么意思| 天蝎座男是什么性格| 什么现象说明奶吸通了| 什么疲倦| 睾丸疝气有什么症状| 大黄米和小黄米有什么区别| 囊胚和冻胚有什么区别| 三文鱼为什么叫三文鱼| 手信是什么| 苯佐卡因是什么药| 借刀杀人是什么生肖| 基尼系数是什么意思| 尿血吃什么药最好| 吹空调喉咙痛什么原因| 霉菌性阴道炎吃什么消炎药| 肋膈角锐利是什么意思| 喝酒断片是什么原因| 9.23什么星座| 毒奶粉是什么游戏| 出行是什么意思| 阿尔茨海默病吃什么药| 84年属什么生肖| 军校出来是什么军衔| pn医学上是什么意思| 没有生抽可以用什么代替| 发达国家的标准是什么| 痔疮长什么样子图片| 椰子和椰青有什么区别| 随笔是什么意思| 武夷肉桂茶属于什么茶| 痛风要吃什么药好得快| 什么是b站| 食管炎吃什么药最好| 甲状腺结节不能吃什么食物| 血糖高对身体有什么危害| 卒中中心是什么意思| 栀子花什么时候修剪| 转奶是什么意思| 清明节吃什么| vp是什么| 366是什么意思| 天伦之乐是什么意思啊| 热淋是什么病| 鲲之大的之是什么意思| 条条框框是什么意思| 什么的| 特此通知写在什么位置| 刘禹锡是什么朝代的| 茱萸什么意思| 疱疹吃什么药| 射手什么象星座| 胃寒吃什么可以暖胃| kdj是什么意思| 风花雪月下一句是什么| 沙和尚的武器叫什么| 成佛是什么意思| 年少轻狂是什么意思| 神灵是什么意思| 波司登是什么档次| 情人眼里出西施是什么意思| 桑葚和什么泡酒壮阳| 女人更年期有什么症状| 冠状沟是什么| 紊乱什么意思| 爵是什么器皿| 滑石粉有什么作用| 左下腹疼痛是什么原因女性| 章鱼属于什么类动物| 火腿肠是什么做的| 一什么柜子| 八点是什么时辰| 蛋白高是什么病| 兔子尾巴像什么| 教学相长什么意思| 女生自慰是什么感觉| 什么样的风景| 脖子上为什么会长丝状疣| 6月8日什么星座| 真丝棉是什么面料| 血小板比积偏高是什么意思| 刚愎自用什么意思| 双侧上颌窦炎是什么病| 水代表什么数字| 关东煮为什么叫关东煮| 雁过拔毛是什么意思| 艳阳高照是什么生肖| 糜烂型脚气用什么药| 属牛幸运色是什么颜色| 针眼长什么样| 白细胞偏低是什么意思| 绿茶属于什么茶| 拍身份证穿什么颜色衣服| 提高免疫力吃什么药| 丢包率是什么意思| 老树盘根是什么意思| 人死后会变成什么| 鬼怕什么东西| 砚是什么意思| 坐东北朝西南是什么宅| 睡觉手麻是什么原因引起的女人| eb病毒阳性是什么意思| 偶发室上性早搏是什么意思| 栉风沐雨是什么意思| 金牛座跟什么星座最配| 叕怎么读音是什么意思| 不老实是什么意思| 开塞露是什么| 为什么不能空腹喝牛奶| 早上尿黄是什么原因| 呼吸困难气短是什么原因| 什么鬼大家都喜欢| 绝经是什么意思| 坎是什么意思| 白皮鸡蛋是什么鸡下的| 种植什么最赚钱农村| www是什么意思| 金童玉女是什么意思| 周六左眼跳是什么预兆| 双子座后面是什么星座| 竹勿念什么| 蚩尤是什么| konka是什么牌子| 鱼油什么时候吃最好| 女生补气血吃什么好| 什么什么相什么的成语| 屁股上长痘痘是什么原因| 皮肚是什么| 经常挖鼻孔有什么危害| 什么是负氧离子| 为什么井盖是圆的| 2月29号是什么星座| 冬天手脚冰凉是什么原因怎么调理| 西安古时候叫什么| 献血后吃什么补血最快| 复诊是什么意思| 偏头痛什么原因引起| 颈椎病吃什么药效果好| 吃什么水果可以减肥| 布洛芬有什么副作用| pd是什么金属| 东北人喜欢吃什么菜| 睾丸疼吃什么药| 空调自动关机是什么原因| 单纯性肥胖是什么意思| 2段和3段奶粉有什么区别| 鸡飞狗跳是什么意思| 扁平疣挂什么科| 尿素高什么原因| 6月29号是什么星座| 六月初六什么日子| 李五行属什么| 小拇指发麻是什么原因| 青口是什么东西| 椭圆形脸适合什么发型| 抽烟打嗝是什么情况| 猫咪能吃什么水果| 青色是什么颜色的图片| 中尉是什么级别| 吊是什么意思| 代销商是什么意思| 记忆力差吃什么药| ct是什么| 苏字五行属什么| 僵尸车是什么意思| 杜康原是什么| 粉尘螨过敏是什么意思| 胃炎吃什么食物好养胃| 小姨的女儿叫什么| 野生刺猬吃什么| 炒菜放什么调料最好吃| 头发爱出油是什么原因| 人生得意须尽欢是什么意思| 蜻蜓点水的目的是什么| 美尼尔症是什么病| 吃柿子有什么好处和坏处| 何首乌泡酒有什么作用| 竹荪是什么| 网线长什么样| 项羽的马叫什么名字| ups是什么快递公司| 百度
大数据中国 首页 大数据技术 云技术 查看内容
业内首个基于Iceberg的“云端仓转湖”生产实践探索
2022-9-8 16:17 | 查看: 3573| 评论: 0

一、业务背景

作业帮成立于2015年,一直致力于用科技手段助力教育普惠,运用人工智能、大数据等前沿技术,为学生、老师、家长提供更高效的学习、教育解决方案,智能硬件产品等。作为大数据中台架构团队,我们一直探索利用有限的资源,较低的开发维护成本、高时效的数据更新和查询,为业务团队提供基础支持。

二、问题&痛点

1.ODS层数据就绪时间晚,DWS/ADS等上层数据和业务报表构建时间少

作业帮ODS层表大概有几千张,TP90就绪时间大概在4点30左右,不同业务团队因工作时间不同,看数时间会有些差异,总体上来说基本都要求数据10点前就绪。这样留给上层数仓及报表数据构建时间大概6小时,随着上层数据看数丰富度增加,在资源不变的情况下,减少ODS层就绪时间将可以给上层数据构建争取更多时间。

2.基于hive的离线数据新鲜度弱,基于Kafka的实时数据构建和维护成本高

目前基于Hive的离线数据多为T+1天时效性,较少部分为T+1小时且多为流量数据。针对核心转化类数据可分析价值更高,目前多以Kafka为介质构建实时数据,但对数、刷数、ExactlyOnce保障、join等场景数据构建和维护成本高。如果可以通过类似Hive sql构建准实时数据,业务可以更容易获得高新鲜度的数据进行分析。

3.业务查数速度慢,分析效率低

业务基本都是基于DWS/ADS等上层数据进行分析,经过分析历史sql发现查询所用维度相对固定,面对大表加载数据仍然是主要耗时点,这个过程业务老师基本都是处于等待状态,工作效率出现明显瓶颈。

三、基于Iceberg承载批流一体实现数据“仓转湖”探索

考虑到Iceberg优雅的架构设计、相对开放和完备的数据格式定义,有较强的可塑性和扩展能力更方便进行特定场景的优化。同时腾讯云EMR团队针对Iceberg在计算框架适配、性能等方面做了优化。所以我们选择Iceberg来承载批流一体实现数据“仓转湖”探索。

作业帮数据仓库ODS层构建都是由数据中台来完成,我们把ODS层作为切入点来逐步引入Iceberg,因流量侧ODS层数据量相对较大,在场景和性能方面探索的代表性更全,最终决定用此部分数据作为探索数据,同时需要探索以下关键问题的解决方式:

1.数据流转批:数据湖仓共存,以减少对上层业务使用的影响。

2.表格式无缝迁移:解决云上环境Hive表格式迁移Iceberg的诸多问题。

3.查询性能提升:改进传统Hive特定高频分析场景时间过长的问题。

四、流数据转批

基于Hive+COS 构建的ods表都是按照天级别或小时级别来构建。DWD层的任务均是按照ODS层的表分区是否就绪来触发的。这个场景在Hive上实现很简单,因为Hive 天然支持按照日期字段进行分区。但切换成Iceberg 表后,通过Flink 实时写入的数据,已经commit的snapshot所包含的数据就可读。Iceberg提供的这种边写边读的能力在构建实时数仓的过程中非常有用,但这种能力在我们实际切换过程中成为了卡点,因为我们必须保证ODS层某天的数据完全就绪后,才能对外提供对应天级别的查询能力。

基于这样的需求,我们在Iceberg中引入savepoint 概念,即基于事件时间的快照点。下图展示了新的元数据设计:

本质上,每个savepoint也是一个snapshot。但不一样的是,savepoint是根据数据的事件时间生成。举一个简单的例子:随着数据的不断摄入,Iceberg表生成了若干个连续的snapshot,但只有在整点时刻(例如按小时间隔)才会生成一个savepoint。区别于传统的基于snapshot的数据查询机制,我们从savepoint中进行数据查询。由于savepoint是根据事件时间周期(例如按小时间隔)生成的,只有当Iceberg表的小时段数据写入完成,上层业务才可以查询对应的分区数据。下图演示了各种查询条件下的数据可见性情况:

其中:

Query 1和6只能查到天级别的完整数据

Query 2,3,4和5只能查到小时级别的完整数据

基于以上设计,我们可以实现上层T+1的表数据构建业务无缝透明地从Hive迁移到Iceberg上,并且不会对业务使用方带来任何的理解偏差。

五、Hive表格式无缝迁移

作业帮数据中台持续的为多个业务线提供数据支撑,在引入Iceberg之前已存在大量的Hive表供各个业务方使用。作为底层数据提供方,不可能因为要引入一项新的技术,就让下游业务使用方跟着做改动,所以我们需要让下游业务方查询时并不关心查询的是Hive表还是Iceberg表,对业务方透明。基于这样的诉求,我们需要将Hive表无缝转化成Iceberg表。

Iceberg社区提供了表格式迁移工具,即migrate工具。它通过构建Iceberg所需的元数据来实现Hive表格式转换,避免了数据的导出导入成本。不过在实际使用中还是在一些特定场景下的不兼容问题:

1.作业帮的离线数据全部存储在COS中,并且根据一定的规则,这些COS数据会进行逐级冷处理,即从标准存储类型转换成归档存储类型。但开源大数据数据接口的事实标准不支持COS归档存储,导致Iceberg表格式迁移工具无法正常使用。

2.作业帮的Hive表分区目录存在多级子目录。Iceberg表格式迁移工具不支持分区目录的子目录结构,导致在生成manifest元数据时会丢失大量的数据文件记录。

3.作业帮的Hive表存量数据非常大,甚至有PB级别。社区版迁移工具的文件处理能力有限,针对这种超大规模表迁移耗时会非常长。

针对这些云上特定场景,腾讯云EMR对Iceberg迁移工具进行了兼容适配和优化:

1.兼容归档存储类型。当归档文件转标准文件之后,支持通过工具修正manifest元数据。

2.兼容分区子目录结构。

3.支持executor-side的文件处理能力,更高的并发能力,更快的迁移速度。

基于以上优化,我们可以快速高效地实现将COS中的Hive表迁移到Iceberg上。

六、查询性能提升

ODS层的数据多是一些结构化的原始数据,DWD层是基于ODS层来筛选出不同主题的数据,这种模式下,不管某个主题筛选的数据量多少,都需要扫描ods层的全部文件,过滤出符合条件的数据。这种模式不仅会产生大量无用的IO操作,还浪费资源,查询性能差。

基于这样的诉求,我们使用Z-Order数据重排来减少查询时无用的文件扫描。Iceberg在数据查询时会使用data-skipping技术,跳过那些不存在目标数据的文件,从而节省IO带来查询提升。但实际使用中,data-skipping技术发挥的余地会非常小。这是因为数据的某种“无序”分布,导致查询条件的目标数据会分布在大部分文件甚至所有文件,这就导致简单的查询需要扫描全表的原因。Z-Order是一种数据组织算法,它可以实现按照给定字段(即Z-Order字段)的数据聚集性或者说局部性。经过Z-Order之后的表数据文件会呈现比较明显的可区分度,这样根据Z-Order字段的查询会略过大量的无关文件。

ZOrder天然地也会进行小文件合并。小文件合并以及数据组织优化两个方面共同实现提升查询性能的目的。我们结合作业帮业务场景进行了性能评估。

1.集群配置:10台 8核32GB、500GB 云SSD

2.SSB Scale:100

对比原始表和小文件合并,性能提升是非常大的,一个主要优化点就是过滤了大量无用文件扫描。基于以上优化,我们在生产环境中的查询性能也得到了成倍提升。

除了以上工作,腾讯云EMR团队联合作业帮还对Iceberg进行了如下特性开发和内核优化:

1.支持Hive on Spark写入Iceberg表

2.Hive查询支持Map类型的Filter下推

3.Z-Order 索引构建优化和复杂数据类型支持

4.优化数据倾斜场景Z-Order的数据构建性能

5.外部Metastore:支持Iceberg表元数据同步到外部DB

七、总体效果

基于这些特性和优化,作业帮开展部分流量表进行灰度实验。通过本次灰度,我们实现了:

1.存储格式切换为Iceberg能力,上层业务无成本迁移。上层业务对底层存储升级的无感切换:业务表没有任何改造成本,数据表的业务理解无任何变化等等。

2.基于Z-Order优化,查询性能获得提升。对于那些分析重度使用的表,通过迁移到Iceberg并做了Z-Order优化后,查询性能得到几倍甚至几十倍的提升,查询时间下降到分钟级。

3.数据分区时效性提高。通过Flink流式写入数据,实时生成Savepoint,从而实现真实数据就绪的近实时。

4.元数据接入更加便捷。腾讯云EMR提供的Iceberg外部Matastore功能降低了作业帮元数据采集和查询的成本,几乎零改造实现Iceberg元数据接入。

八、探索的意义

作业帮离线数仓是基于腾讯对象存储cos + EMR存算分离的方式来落地的,实时数仓多以Flink+Kafka方式落地的,虽然可以解决业务对数据的诉求,但是也引入了其他问题例如实时数据故障排查难、可靠性不易实现、开发维护成本高,离线数据增量计算支持弱、查询速度慢、数据时效性低,离线实时对数难等问题。

数据湖技术在原理层面看是可以帮助我们缓解以上问题的,同时数据湖发展已有一段时间各种功能也逐步支持,但对于作业帮而言还缺乏更深入的认识,此次探索模拟了部分迁移过程可能遇到的技术问题、业务感知、功能匹配度进行了摸底灰度测试,为最终的湖仓一体化建设提供了较高的参考价值。

九、未来规划

下一阶段,作业帮将联合腾讯云EMR团队探索解决以下一些问题:

1.运维成本高:不管是快照清理还是Z-Order优化,都需要手动配置,运维成本高。

2.多引擎支持:当前部分新特性支持了Hive,Spark和Flink引擎,但trino等引擎没有完全支持。

3.Z-Order列选举门槛高:需要业务侧参与配合完成Z-Order优化工作,往往业务侧也不是很清楚选举那些列进行Z-Order比较合适,这就有可能导致Z-Order选择不对,对业务查询提升无意义,平白增加额外计算开销。

4.无法构建基于Iceberg的流式pipeline:缺少关键的表间CDC能力。

免责声明: 除非特别声明,文章均为投稿或网络转载,仅代表作者观点,与大数据中国网无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。如果本文内容有侵犯你的权益,请发送信息至ab12-120@163.com,我们会及时删除

最新评论

关闭

站长推荐上一条 /1 下一条

大数据中国微信

QQ   

版权所有: Discuz! © 2001-2013 大数据.

GMT+8, 2025-8-4 04:18 , Processed in 0.070735 second(s), 23 queries .

返回顶部
刚怀孕要吃些什么好 阈值是什么意思 脸上长闭口是什么原因导致的 什么寒什么冻 肾虚吃什么食物
自贸区什么意思 什么是菩提心 央行放水是什么意思 黄斑前膜是什么病 手上有红点是什么原因
右肾肾盂分离什么意思 放屁多是什么病的征兆 16岁上什么年级 牛奶为什么能解辣 谷草谷丙高是什么原因
真性情是什么意思 男性吃什么可以壮阳 肝瘘是什么 cvt是什么意思 阳五行属什么
负压是什么意思hcv7jop7ns0r.cn 胶水用什么能洗掉helloaicloud.com gsy什么意思hcv9jop5ns5r.cn 改进什么hcv9jop3ns8r.cn 自提是什么意思hcv8jop3ns8r.cn
青岛是鲁什么hcv8jop0ns1r.cn 鱼周念什么hcv9jop1ns7r.cn 蝙蝠为什么倒挂着睡觉hcv8jop0ns2r.cn 什么是cghcv8jop5ns6r.cn 一什么沙发hcv9jop6ns4r.cn
桃子什么时候成熟hcv8jop3ns0r.cn 肾最怕什么食物hcv7jop6ns7r.cn 军官是什么意思1949doufunao.com 佑五行属什么hcv7jop5ns0r.cn 结甲是什么病hcv7jop5ns5r.cn
宋朝前面是什么朝代hcv9jop4ns6r.cn 情景剧是什么意思hcv8jop5ns5r.cn 腰扭伤了挂什么科hcv9jop8ns1r.cn 125是什么意思hcv8jop5ns3r.cn 接触隔离什么意思hcv9jop4ns7r.cn
百度