2026/4/7 6:25:22
网站建设
项目流程
站长工具seo,百度搜索数据统计,酒店网站建设的优点,北京pk10做号网站一、背景
得物经过10年发展#xff0c;计算任务已超10万#xff0c;数据已经超200PB#xff0c;为了降低成本#xff0c;计算引擎和存储资源需要从云平台迁移到得物自建平台#xff0c;计算引擎从云平台Spark迁移到自建Apache Spark集群、存储从ODPS迁移到OSS。
在迁移时…一、背景得物经过10年发展计算任务已超10万数据已经超200PB为了降低成本计算引擎和存储资源需要从云平台迁移到得物自建平台计算引擎从云平台Spark迁移到自建Apache Spark集群、存储从ODPS迁移到OSS。在迁移时最关键的一点是需要保证迁移前后数据的一致性同时为了更加高效地完成迁移工作目前计算任务已超10万手动比数已是不可能因此比数平台便应运而生。二、数据比对关键挑战与目标关键挑战一如何更快地完成全文数据比对现状痛点在前期迁移过程中迁移同学需要手动join两张表来识别不一致数据然后逐条、逐字段进行人工比对验证。这种方式在任务量较少时尚可应付但当任务规模达到成千上万级别时就无法实现并发快速分析。核心问题效率瓶颈每天需要完成数千任务的比对累计待迁移任务达10万涉及表数十万张。扩展性不足传统人工比对方式无法满足大规模并发处理需求。关键挑战二如何精准定位异常数据现状痛点迁移同学在识别出不一致数据后需要通过肉眼观察来定位具体问题经常导致视觉疲劳和分析效率低下。核心问题分析困难在比对不通过的情况下比对人员需要人工分析失败原因。复杂度高面对数据量庞大、加工逻辑复杂的场景特别是在处理大JSON数据时肉眼根本无法有效分辨差异。耗时严重单次比对不通过场景的平均分析时间高达1.67小时/任务。比数核心目标基于以上挑战数据比对系统需要实现以下核心目标高并发处理能力支持每天数千任务的快速比对能够处理10万待迁移任务和数十万张表的规模。自动化比对机制实现全自动化的数据比对流程减少人工干预提升比对效率。智能差异定位提供精准的差异定位能力能够快速识别并高亮显示不一致的字段和数据。可视化分析界面构建友好的可视化分析平台支持大JSON数据的结构化展示和差异高亮。性能优化将用户单次比对分析时间从小时级大幅缩短至分钟级别。可扩展架构设计可水平扩展的系统架构能够随着业务增长灵活扩容。三、解决方案实现原理快速完成全文数据比对方法比数方法调研待比对两表数据大小300GB计算资源1000c经过调研分析比数平台采用第二种和第三种相结合的方式进行比数。先Union再分组数据一致性校验原理假如我们有如下a和b两表张需要进行数据比对表a表b表行数比较select count(1) from a ;select count(1) from b ;针对上面的查询结果如果数量不一致则退出比对待修复后重新比数数量一致则继续字段值比较。字段值比较第一步union a 和 bselect 1 as _t1_count, 0 as _t2_count, id, name, age, score from a union all select 0 as _t1_count, 1 as _t2_count, id, name, age, score from b第二步sum(_t1_count)sum(_t2_count) 后分组select sum(_t1_count) as sum_t1_count, sum(_t2_count) as sum_t2_count, id, name, age, score from ( select 1 as _t1_count, 0 as _t2_count, id, name, age, score from a union all select 0 as _t1_count, 1 as _t2_count, id, name, age, score from b ) as union_table group by id, name, age, score第三步把不一致数据写入新的表中(即上面表中sum_t1_count和sum_t2_count不相等的数据)drop table if exists a_b_diff_20240908; create table a_b_diff_20240908 as select * from ( select sum(_t1_count) as sum_t1_count, sum(_t2_count) as sum_t2_count, id, name, age, score from ( select 1 as _t1_count, 0 as _t2_count, id, name, age, score from a union all select 0 as _t1_count, 1 as _t2_count, id, name, age, score from b ) as union_table group by id, name, age, score having sum(_t1_count) sum(_t2_count) ) as tmp如果a_b_diff_20240908没有数据则两张表没有差异比数通过如有差异如下第四步读取不一致记录表根据主键比如id找出不一致字段并写到结果表中。第五步针对不一致字段的数据进行根因分析如 json 、数组顺序问题、浮点数精度问题等给出不一致具体原因。哈希值聚合实现高效一致性校验针对上面union后sum 再 group by 方式 在数据量大的时候还是非常耗资源和时间的考虑到比数任务毕竟有70%都是一致的所以我们可以先采用哈希值聚合比较两表的的值是否一致使用这种高效的方法先把两表数据一致的任务过滤掉剩下的再采用上面方法继续比较因为还要找出是哪个字段哪里不一致。原理如下SELECT count (*),SUM(xxhash64(cloum1)^xxhash64(cloum2)^...) FROM tableA EXCEPT SELECT count(*),SUM(xxhash64(cloum1)^xxhash64(cloum2)^...) FROM tableB如果有记录为空说明数据一致不为空说明数据不一致需要采用上面提到union 分组的方法去找出具体字段哪里不一样。通过哈希值聚合单个任务比数时间从500s降低到160s节省大约70%的时间。找到两张表不一致数据后需要对两张的数据进行分析确定不一致的点在哪里这里就需要知道表的主键根据主键逐个比对两张表的其他字段因此系统会先进行主键的自动探查以及无主键的兜底处理。精准定位异常数据实现方法自动探查主键实现原理如下刚开始我们采用的前5个字段找主键的方式如下针对表a的前5个字段 循环比对 select count(distinct id) from a 与 select count(1) from a 比较 如相等主键为id 不相等继续往下执行 select count(distinct id,name) from a 与 select count(1) from a比较如相等主键为id,name 不相等继续往下执行 select count(distinct id,name,age) from a 与 select count(1) from a比较如相等主键为id,name,age 不相等继续往下执行直到循环结束采用上面的方法不一致任务中大约有49.6%任务自动探查主键失败因此需重点提升主键识别能力。针对以上主键探查成功率低的问题后续进行了一些迭代优化后的主键探查流程如下一、先采用sum(hash)高效计算方式进行探查1.先算出两张表每个字段的sum(hash)值 。select sum(hash(id)),sum(hash(name)),sum(hash(age)),sum(hash(score)) from a union all select sum(hash(id)),sum(hash(name)),sum(hash(age)),sum(hash(score)) from b;2.找出值相等的所有字段本案例中为 id, name。3.对idname 可能是主键进一步确认先进行行数校验如 select count(distinct id,name) from a 的值等于select count(1) from a 则进一步校验否则进入到第二种探查主键方式。4.唯一性验证如果值为0则表示探查主键成功否则进入到第二种探查主键方式。slect count(*) from ((select id,name from a ) expect (select id,name from b))二、传统distinct方式探查针对表a的前N所有字段数/2或者前N、后N等个字段 循环比对1.select count(distinct id) from a与select count(1) from a比较 如相等主键为id 不相等继续往下执行。2.select count(distinct id,name) from a 与 select count(1) from a比较如相等主键为id,name 不相等继续往下执行。3.select count(distinct id,name,age) from a 与 select count(1) from a比较如相等主键为id,name,age 不相等继续往下执行直到循环结束。三、全字段排序模拟:如果上面两种方式还是没有找到主键则把不一致记录表进行全字段排序然后对第一条和第二条记录挨个字段进行分析找出不一致内容示例如下slect * from a_b_diff_20240908 order by id,name,age,score asc limit 10;通过以上结果表可以得出两表的age字段不一致 score不一致但按key排序后一致。如果以上自动化分析还是找不到不一致字段内容可以人工确认表的主键后到平台手动指定主键字段然后点击后续分析即可按指定主键去找字段不一致内容。通过多次迭代优化找主键策略找主键成功率从最初的50.4%提升到75%加上全字段order by排序后最前两条数据进行分析相当于可以把找主键的成功率提升到90%以上。根因分析实现原理如下当数据不一致时平台会根据主键找出两个表哪些字段数据不一致并进行分析具体如下精准定位明确指出哪条记录、哪个字段存在差异并展示具体的源数据和目标数据值。智能根因分析内置了多种差异模式识别规则能够自动分析并提示不一致的可能原因例如精度问题如浮点数计算1.0000000001与1.0的差异。JSON序列化差异如{“a”:1, “b”:2}与{“b”:2, “a”:1}在语义一致的情况下因键值对顺序不同而被标记为差异。同时系统会提示排序后一致。空值处理差异如NULL值与空字符串的差异判定。日期时区转换问题时间戳在不同时区下表示不同。比对结果统计提供总数据量、一致数据量、不一致数据量及不一致率百分比为项目决策提供清晰的量化依据。比数人员根据平台分析的差异原因决定是否手动标记通过或进行任务修复。效果展示四、比数平台功能介绍数据比对基本流程任务生成三种比对模式两表比对最直接的比对方式。用户只需指定源表与目标表平台即可启动全量数据比对。它适用于临时比对的场景。任务节点比对一个任务可能输出多个表逐一配置这些表的比对任务繁琐且易遗漏任务节点比对模式完美解决了这一问题。用户只需提供任务节点ID平台便会自动解析该节点对应的SQL代码提取出所有输出表并自动生成比对任务极大地提升任务迁移比对效率。SQL查询比对业务在进行SDK迁移只关心某些查询在迁移后数据是否一样因此需要对用户提交的所有查询SQL进行比对平台会分别在ODPS和Spark引擎上执行该查询将结果集导出到两张临时表再生成比对任务。前置校验提前发现问题在启动耗时的全量比对之前需要对任务进行前置校验确保比对是在表结构一致、集群环境正常的情况下进行否则一旦启动比数会占用大量计算资源最后结果还是比数不通过会影响比数平台整体的运行效率。因此比数平台一般会针对如下问题进行前置拦截。元数据一致性校验比对双方的字段名、字段类型、字段顺序、字段个数是否一致。函数缺失校验针对Spark引擎校验SQL中使用的函数是否存在、是否能被正确识别避免因函数不支持而导致的比对失败。语法问题校验分析SQL语句的语法结构确保其在目标引擎中能够被顺利解析避免使用了某些特定写法会导致数据出现不一致情况提前发现语法层面问题并对任务进行改写。更多校验点如下通过增加以上前置校验拦截比数任务数从每天3000下降到1500减少50%的无效比数其中UDF缺失最多有效拦截任务1238缺少函数87个帮比数同学快速定位一次性解决函数缺失问题避免多次找引擎同学陆陆续续添加节省双方时间成本。破解比数瓶颈资源分配与任务调度优化由于比数平台刚上线的时候只有计算迁移团队在使用后面随着更多的团队开始使用性能遇到了如下瓶颈1.资源不足问题不同业务计算迁移、存储迁移、SDK迁移的任务相互影响基本比数任务与根因分析任务相互抢占资源。2.任务编排不合理没有优先级导致大任务阻塞整体比数进程。3.引擎参数设置不合理并行度不够、数据分块大小等高级参数。针对以上问题比数平台进行了如下优化按不同业务拆分成多个队列来运行保证各个业务之间的比数任务可以同时进行不会相互影响。根因分析使用单独的队列与数据比对任务的队列分开避免相互抢占资源发生“死锁”。相同业务内部按批次分时段、分优先级运行保障重要任务优先进行比对。针对Spark引擎默认调优了公共参数、并支持用户自主设置其他高级参数。通过以上优化达到到了如下效果比数任务从每天22点完成提前至18点前同时支持比数同学自主控制高优任务优先执行方便比数同学及时处理不一致任务。通过优化资源队列使用方式使系统找不到主键辅助用户自主找主键接口响应时间从58.5秒降到 26.2秒。五、比数平台收益分享平台持续安全运行500天每日可完成2000任务比对有效比数128万次0误判。助力计算迁移团队节省45人日/月完成数据分析、离线数仓空间任务的比对、交割。助力存储迁移团队完成20%存储数据的迁移。助力引擎团队完成800批次任务的回归验证确保每一次引擎发布的安全及高效。助力SDK迁移团队完成80%应用的迁移。六、未来演进方向接下来平台计划在以下方面持续改进智能分析引擎针对Json复杂嵌套类型的字段接入大模型进行数据根因分析找出不一致内容。比对策略优化针对大表自动切分进行比对降低比数过程出现因数据量大导致异常进一步提升比对效率。通用方案沉淀将典型的比对场景和解决方案能用化应用到更多场景及团队中去。七、结语比数平台是得物在迁移过程中为了应对海量任务、大数据量、字段内容复杂多样、异常数据难定位等挑战确保业务迁移后数据准确而专门提供的解决方案未来它不单纯是一个服务计算迁移、存储迁移、SDK迁移、Spark版本升级等需要的数据比对工具而是演进为数据平台中不可或缺的基础设施。往期回顾1.得物App智能巡检技术的探索与实践2.深度实践得物算法域全景可观测性从 0 到 1 的演进之路3.前端平台大仓应用稳定性治理之路得物技术4.RocketMQ高性能揭秘承载万亿级流量的架构奥秘得物技术5.PAG在得物社区S级活动的落地文 /Galaxy平台关注得物技术每周更新技术干货要是觉得文章对你有帮助的话欢迎评论转发点赞未经得物技术许可严禁转载否则依法追究法律责任。