京东大数据治理探索与实践 | 京东零售技术实践

01背景和方案

在当今的数据驱动时代,数据作为关键生产要素之一,其在商业活动中的战略价值愈加凸显,京东也不例外。

图片

作为国内领先的电商平台,京东在数据基础设施上的投入极为巨大,涵盖数万台服务器、数 EB 级存储、数百万个数据模型及数以百万计的任务执行。每年成本上的投入高达两位数个小目标,而且还在持续增长,成本压力比较大。

面对这样的成本压力,治理是一个必然的选择,并且不能是运动式、救火式的,而应该是持续的,需要一个规模化、常态化的治理体系。为了实现这一目标,就要应对治理中的诸多挑战。首先,场景复杂,平台建设是个长期过程,管控规则在不断迭代,历史原因导致平台有部分作业的访问方式跳过数据表直接访问底层 HDFS 文件,或者绕过平台的推数工具,直接在 MapReduce 或 Spark 里面写入数据,导致审计和血缘追踪困难,给治理带来了很大风险。此外,平台用户较多,成本意识很难拉齐,且大家工作繁忙,主动治理的意愿较低。而且人工治理不仅成本高,风险也高,如果人工判断不准,就会造成生产事故。

图片

为了解决这些问题,我们首先设计了健康分和货币化账单,用来量化治理的收益,帮助用户直观感受治理的变化。再就是打造自动化治理平台,自动发现问题,及时通知用户,一键执行,并通过量化指标来判断收益,提高治理人效。

具体治理从以下几个角度一起考虑:

  • 多种数据源相互印证。联合 HDFS 和 Hive 的审计日志、HDFS 的元数据以及数据血缘等数据一起校验,避免因单一数据源引发的误判。

  • 设置多环节校验。判断会综合连续多日的诊断结果,避免特殊异常波动导致误诊。

  • 作业提交会进行实时校验。当前数据作业是通过 t+1 离线模型进行计算,存在时间差,为避免时间差导致误诊,在执行时针对选择的治理做二次校验。

  • 操作可逆。对于治理数据做自动备份,即使有误操作,也可以一键回滚。

  • 数据治理落地的机制保障。增加数据管理专员小组、组织机构治理负责人等角色,并明确各自职责。

  • 明确目标。每年采购前,会达成年度治理目标的共识及预计的治理量。将目标拆解到每个事业部、每个部门,以及每个季度、每个月的指标,并通过周期性例行会议不断跟进和校准。

  • 完善奖惩机制,做得好会有激励,做得不好,会在其他产品上限制其使用。

当前整个治理系统已经涵盖了成本、稳定性、安全、质量等四个方向一共几十个治理项。例如成本治理中表的生命周期,不仅仅按照人工设定时间定期删除数据,还可以根据数据实际被访问的周期推荐更合理的生命周期数值。在稳定性中的“依赖缺失”治理,防止任务执行时,上游数据还未产出,导致任务失败。在安全方面,平台能及时发现对安全等级打标不准,质量方向的元数据缺失,元数据标注不准以及数据质量异常等治理项,及时发现,及时处理。

02关键技术

接下来介绍一下治理平台使用的关键技术。

图片

1. 审计日志

审计日志记录了用户在何时何地因何原因访问了哪些数据及访问方式,这是安全治理的基础。

以无效任务为例(有产出,但是产出的数据没有下游访问),自身作业还在运行,一定有日志产生,那如何来判断有没有下游呢,就需要排除掉自身任务的访问,审计当中就必须要有“任务 ID”这个属性。另外,治理需要明确的责任人,单单靠大家主动去维护表的负责人,一定会存在错漏的问题,所以审计一定要能识别到具体哪个人在操作,再加上数据的反算策略,来补充和校准负责人信息,确保数据一定有人负责。

原生的大数据系统,并没有这么丰富的信息,所以需要定制化改造:

  • 改造 API 协议。通过对底层 HDFS,以及上层计算引擎的适配性改造,附加了任务来源以及任务 ID 等上下文信息。

  • 内容反算。原始 metastore 日志记录存储的是原子 API 的使用记录(如 get_table ,get_partition),但具体操作(读、写、改表)没办法区分。平台通过对命令的访问序列,总结规律,生成自动识别规则进行反算。

  • 数据联合使用。Hive 审计日志只记录表级,具体访问的分区是看不到的。而结合 HDFS 审计来反推分区访问的活跃程度,从而推荐合理的生命周期,避免生命周期设置的偏大或偏小。

2. 全链路血缘

图片

首先介绍一下图中的一些术语,JDQ:是京东基于 kafka 进行二开的消息队列;JRC:京东实时数据加工平台,主要是用的 FLink 技术;DTS:数据集成工具;Plumber in、out:数据的导入导出。

上图展示的是正常的数据流转过程。从生产到数仓,再到数据应用或服务的全过程来看,已经不单单在大数据平台,要进行数据治理,如果不能掌握上下游关系,很容易出现问题。比如数仓将数据推到了应用系统,后续访问都在大数据平台外,如果把表的加工任务当成无效任务禁用后,就会影响业务正常运行。

除治理外,还可以利用血缘对全链路进行影响分析,链路优化等(比如一个表在任务加工链路上属于第 10 层,而他所依赖的所有数据都在第 3 层,那中间的几层依赖即为无效的,直接依赖第 3 层的加工任务来缩短链路,就可以更快完成数据加工)。

在不同阶段会用到不同的技术,比如生产侧主要用到的是调用链,在大数据侧主要使用审计和执行计划的解析,在数据应用与服务侧主要是运用审计的能力。将各阶段的数据进行整合,就可以得到全链路的血缘。

血缘的粒度如果只到表一级,还是存在一些局限性,在分析的时候,影响容易被放大。比如下游的表仅仅使用上游表做关联查询条件,他的结果当中就不会保存上游表的数据内容,在前面提到的影响分析场景,就应该排除掉。要做到这一点,就需要实现算子级血缘。

图片

算子级血缘描述的是字段间存在的具体关系,比如是直接引用的原字段,还是做了加减乘除等转换,是结果存储还是仅作为关联条件,为精细化数据治理提供支撑。比如相似表计算和重复存储识别就需要算子级血缘来帮助判断。我们的算子血缘实现的方案集成在了逻辑执行计划优化的阶段,和优化之后的 Hive Hook 的方式相比,可以拿到更原汁原味的血缘关系,对用户来说更容易理解。下面就是利用血缘关系,进行主动元数据治理的一个案例。

图片

用户开发时,经常要去找依赖的数据在哪里,有的是直接找表,而更多的时候是找字段,比如我想要知道订单优惠后的金额在哪,他的加工口径是什么,这样单纯的按表来检索就非常低效。所以我们设计了标准字段的概念,他是字段的抽象,在标准字段上可以维护更多的元数据信息,比如加工口径,使用说明等。当标准字段和表的实体字段关联上之后,就可以通过它来寻找字段和表。

但是如果需要大家一个个的维护关联关系,也是个巨大的成本,在这里就可以通过算子血缘来进行提效,用户仅需要将字段的源头做好关联,那么根据算子血缘关系,就可以直接算出有哪些直接引用的下游。

当然,我们这个标准字段也不仅仅是用于找数的提效,在字段元数据上维护好枚举值、取值范围、格式规范等信息,我们在后台会自动检测真实数据是否和定义匹配,异常及时触达用户,让用户做治理。这个检测不需要提前配置,完全是系统自动行为。

03从“节流”到“开源”

前面介绍的内容更多是如何推动业务主动治理,其目的主要是“节流”,减少不必要的占用。另一方面,我们也在寻求“开源”的手段,在不增加成本的情况下,使资源得到更充分的利用。这里主要列举三种手段:资源混部、任务错峰,以及跨机房的任务编排。

图片

京东有两大消耗大户,分别是大数据和在线服务,基数大,而且资源缺口也大。拿在线服务来说,在双十一、618 等促销节点,资源非常紧缺。而离线是常年高负荷运行,利用率都达百分之七八十。当在线服务在大促峰值过后,需求就会降得很低,就可以借给离线使用。离线虽然常年是高负载的情况,但每天晚上八点后相对比较空,在大促时就可以进行在线的支援。因此资源混部的价值是很大的。

资源池化,可以根据业务特点和等级进行资源分配,进行统一调度。此外也可以进行按需分配,当大促时,离线只需要借用几个小时不会对整体造成影响,离线可借用的空间就会很大。

资源池化落地有几个关键点。

  • 存算分离是基础,计算需要做到无状态才行。

  • 容器化技术,尤其是离线计算服务的容器化。

  • 资源隔离,包括各种层面的隔离(比如 CPU 网络)。

前面讲的是空间的挪移,而任务错峰则是时间上的挪移。平台上跑的上百万的作业,涉及很多开发人员,靠人工设定的运行规则,不是很合理。从数据表现来看,在凌晨 3-5 点集中了 30% 的任务,导致资源抢占和高峰拥堵。还有就是父任务的结束时间和当前任务的开始时间存在大量的 gap,如果父任务结束之后的空档期,资源负载较低的话,可以把任务做提前的编排,不光可以提高资源的利用率,也可以提升运行的时效。对整个过程中每个队列的资源使用情况,以及任务的运行时长进行预测,并根据这个预测结果结合任务的重要度来去动态调整任务的可执行时间,即可实现削峰填谷。

第三个手段就是跨机房的任务搬迁。对于大公司来说,单个机房很难完全满足需求,因为很少有机房能放数十万台服务器。另外也很难做到高可用,从安全角度来讲,一般是要做到两地三中心的架构,不同机房间的系统负载就很难相同,一定有的机房相对繁忙,另外一边相对空闲。如果能对任务进行动态调整,把任务尽量分在空闲的一边,就一定能跑得更快。这里比前面两个手段要多出一项对存储的考量,因为计算和存储是跨机房的访问,势必就会带来两机房之间专线的额外占用。如果调度不当,就会导致专线堵塞。而且跨机房的存储调拨,也会带来一些更高的存储需求。这个过程需要平衡存储和计算的成本。

以上三个方面如果能够做到极致,利用率就会接近一条直线,仅在均线上下小幅波动,采购就会大幅减少,甚至零采购,从而降低成本。

04未来展望

图片

未来的治理将在以下几个方向继续推进:

  • 实时发现和治理。当前的数据治理主要是依托于离线模型测算,后面会做更实时的诊断与治理,尽量是在业务上线之前就做到拦截,减少事后治理的场景。

  • 智能化。系统从规则化向智能化演变,让问题的识别变得更精准、更智能。

  • 自动化。现在治理需要人工参与一小部分,未来的目标是落地托管模式,实现无人化的治理。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/941528.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【论文阅读笔记】Learning to sample

Learning to sample 前沿引言方法问题声明S-NET匹配ProgressiveNet: sampling as ordering 实验分类检索重建 结论附录 前沿 这是一篇比较经典的基于深度学习的点云下采样方法 核心创新点: 首次提出了一种学习驱动的、任务特定的点云采样方法引入了两种采样网络&…

[AIGC知识] layout理解

前言 要开组会了,随便讲个凑数吧。 参考论文 https://arxiv.org/html/2303.17189? 什么是layout数据? 像下图这样,Layout是每个图片的布局,其中包含一些物体的相应边界框和类别 layout信息如何整合表示并作为条件加入到网络…

【macos java反编译工具Java Decompiler】

mac上能用的反编译工具 https://java-decompiler.github.io/

C#+OpenCv深度学习开发(常用模型汇总)

在使用 OpenCvSharp 结合深度学习进行机器视觉开发时,有许多现成的模型可以使用。以下是一些常用的深度学习模型,适用于不同的机器视觉任务,包括物体检测、图像分类和分割等。 使用示例 在 OpenCvSharp 中加载和使用这些模型的基本示例&…

【生成模型之七】Classifier-free diffusion guidance

论文:classifier-free diffusion guidance 一、Background 分类器引导是一种最近引入的方法,用于在训练后的条件扩散模型中权衡样本丰富度和样本保真度,其思想与其他类型生成模型中的低温采样或截断相同。 分类器引导将扩散模型的分数估计…

【LeetCode每日一题】——415.字符串相加

文章目录 一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目示例】六【题目提示】七【解题思路】八【时空频度】九【代码实现】十【提交结果】 一【题目类别】 字符串 二【题目难度】 简单 三【题目编号】 415.字符串相加 四【题目描述】 给定两个字符…

Why SAP TM?

最近发现跟 SAP TM 的集成越来越多了,并且发现这模块还挺大,很难一下子理解。TM(Transportation Management)- 顾名思义就是“运输管理”。起初很难想象为啥 SAP 会浪费大量的时间和精力开发“运输管理”,从而只是为了…

开源鸿蒙 5.0 正式版发布

在2024年的开放原子开发者大会上,开源鸿蒙5.0版本正式发布啦!这个版本是一个比较大的升级,性能和功能都上了一个新台阶,让我们一起来看看都有哪些亮点。 首先,开源鸿蒙这个项目,从最初的700万行代码&#x…

直流有刷电机多环控制(PID闭环死区和积分分离)

直流有刷电机多环控制 提高部分-第8讲 直流有刷电机多环控制实现(1)_哔哩哔哩_bilibili PID模型 外环的输出作为内环的输入,外环是最主要控制的效果,主要控制电机的位置。改变位置可以改变速度,改变速度是受电流控制。 实验环境 【 &…

Odrive源码分析(四) 位置爬坡算法

Odrive中自带一个简单的梯形速度爬坡算法&#xff0c;本文分析下这部分代码。 代码如下&#xff1a; #include <cmath> #include "odrive_main.h" #include "utils.hpp"// A sign function where input 0 has positive sign (not 0) float sign_ha…

电视大全 1.3.8|汇聚多频道资源,秒切换流畅播放

电视大全TV版是一款功能丰富的TV端直播软件&#xff0c;由悠兔电视的同一开发者打造。最新版本更新了更多频道&#xff0c;包括央视、卫视和地方频道等&#xff0c;提供了多线路流畅播放体验&#xff0c;并支持节目回看、线路选择、开机自启等功能。该应用免登录且无购物频道&a…

JAVAweb学习日记(二)JavaScript

一、概念 二、JavaScript引入方式 三、JavaScript书写语法 输出语句&#xff1a; 变量&#xff1a; 数据类型、运算符、流程控制语句&#xff1a; 数据类型&#xff1a; 运算符&#xff1a; 字符串如果是 数字字符构成&#xff0c;先把读到的数字转为数字类型&#xff0c;后续…

深圳龙岗戴尔dell r730xd服务器故障维修

深圳龙岗一台DELL POWEREDGE R730XD服务器系统故障问题处理&#xff1a; 1&#xff1a;客户工厂年底产线整改&#xff0c;时不时的会意外断电&#xff0c;导致服务器也频繁停机&#xff0c; 2&#xff1a;多次异常停机后导致服务器开机后windows server系统无法正常启动了&…

Ansible 批量管理华为 CE 交换机

注&#xff1a;本文为 “Ansible 管理华为 CE 交换机” 相关文章合辑。 使用 CloudEngine - Ansible 批量管理华为 CE 交换机 wsf535 IP 属地&#xff1a;贵州 2018.02.05 15:26:05 总体介绍 Ansible 是一个开源的自动化运维工具&#xff0c;AnsibleWorks 成立于 2012 年&a…

2024年Python最新下载安装教程,附详细图文,持续更新

大家好&#xff0c;我是Python老安&#xff0c;今天为大家带来的是Windows Python3下载、安装教程&#xff0c;适用于 Python3 所有版本&#xff0c;包括 Python3.7,Python33.8,Python33.10 等版本。希望对大家有所帮助 Python目前已支持所有主流操作系统&#xff0c;在Linux,…

《点点之歌》“意外”诞生记

世界是“点点”的&#xff0c;“点点”是世界的。 (笔记模板由python脚本于2024年12月23日 19:28:25创建&#xff0c;本篇笔记适合喜欢诗文的coder翻阅) 【学习的细节是欢悦的历程】 Python 官网&#xff1a;https://www.python.org/ Free&#xff1a;大咖免费“圣经”教程《 …

网络安全检测

实验目的与要求 (1) 帮助学生掌握木马和入侵的防护和检测方法、提高学习能力、应用能力和解决实际问题的能力。 (2) 要求学生掌握方法, 学会应用软件的安装和使用方法, 并能将应用结果展示出来。 实验原理与内容 入侵检测是通过对计算机网络或计算机系统中若干关键点收集信…

c++------------------函数

函数定义 语法格式 函数定义包括函数头和函数体。函数头包含返回类型、函数名和参数列表。函数体是用花括号{}括起来的代码块&#xff0c;用于实现函数的功能。例如&#xff0c;定义一个计算两个整数之和的函数&#xff1a; int add(int a, int b) {return a b; }这里int是返回…

Java WEB:从起源到现代的传奇之旅

Java Web 起源于上世纪 90 年代&#xff0c;随着网络和浏览器的飞速发展&#xff0c;Java 为应对动态处理网页的需求&#xff0c;推出了 Servlet 技术。 1. Servlet 出现之前 在 Servlet 出现之前&#xff0c;用户请求主要是静态资源&#xff0c;如 html、css 等。此时的网络…

社区管理系统:实现社区信息数字化管理的实践

3.1可行性分析 开发者在进行开发系统之前&#xff0c;都需要进行可行性分析&#xff0c;保证该系统能够被成功开发出来。 3.1.1技术可行性 开发该社区管理系统所采用的技术是vue和MYSQL数据库。计算机专业的学生在学校期间已经比较系统的学习了很多编程方面的知识&#xff0c;同…