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

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未来展望

图片

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

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

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

nodejs搭配express网站开发后端接口设计需要注意事项

nodejs搭配express网站开发后端接口设计需要注意事项!为了回避一些常见的误区,今天和大家汇总一下,最近我遇到的一些错误信息,虽然都是小问题,但是还是需要分享一下,以免大家再次犯错。 1:第一个…

解决vscode ssh远程连接服务器一直卡在下载 vscode server问题

目录 方法1:使用科学上网 方法2:手动下载 方法3 在使用vscode使用ssh远程连接服务器时,一直卡在下载"vscode 服务器"阶段,但MobaXterm可以正常连接服务器,大概率是网络问题,解决方法如下: 方…

Spring Boot实现OAuth2.0登录实战

一、前言 最近在研究Springboot Vue 的前后端分离框架,刚开始做登录功能,做着做着觉得普通账户密码登录太简单了,决定再加上 GitHub授权 和 人脸识别等多种快捷登录方式。 而GitHub授权登录正好用到了OAuth2.0中最复杂的授权码模式&#xf…

电脑开机提示error loading operating system怎么修复?

前一天电脑还能正常运行,但今天启动时却显示“Error loading operating system”(加载操作系统错误)。我已经仔细检查了硬盘、接线、内存、CPU和电源,确认这些硬件都没有问题。硬盘在其他电脑上可以正常使用,说明不是硬…

Java web的发展历史

目录 前言: 一.Model I和Model II 1.Model I开发模式 ​编辑 2.Model II开发模式 二. MVC模式 前言: 该篇文章主要介绍了Java web的发展历史,以及MVC相关内容 一.Model I和Model II 1.Model I开发模式 Model1的开发模式是&#xff…

Intel-ECI之Codesys PLC + Ethercat 远端IO + Codesys IDE编程

目录 一、 准备工作 二、安装Codesys 软件 PLC 三、 使用Codesys IDE 编程测试 CODESYS* 是领先的独立于制造商的 IEC 61131-3 自动化软件,适用于工程控制系统。它用于 Intel Edge Controls for Industrial(Intel ECI 或 ECI),…

SQL语句练习

阅读《SQL必知必会》(第五版)然后结合往常表做的练习记录 这里使用的数据库时sqlite3,使用的工具时navicat 表资源链接https://wenku.baidu.com/view/349fb3639b6648d7c1c74652.html 表录入后如上图所示。后面如果有多张表之间的操作,在引入…

【Python】【数据分析】深入探索 Python 数据可视化:Seaborn 可视化库详解

目录 引言一、Seaborn 简介二、安装 Seaborn三、Seaborn 的基本图形3.1 散点图(Scatter Plot)3.2 线图(Line Plot)3.3 条形图(Bar Plot)3.4 箱型图(Box Plot)3.5 小提琴图&#xff0…

input输入框的placeholder颜色修改(Shadow DOM)

placeholder颜色修改 使用参考说明 https://zh.javascript.info/shadow-dom 查看shadow tree的方法

uniApp使用腾讯地图提示未添加maps模块

uniApp使用腾讯地图,打包提示未添加maps模块解决方案 这是报错信息,在标准基座运行的时候是没问题的,但是打包后会提示未添加,可以通过在mainfest里面把地图插件上腾讯地图的key更换高德地图的key,定位服务可以继续用腾…

linux------vim命令

一、基本模式切换 普通模式(Normal Mode) 当你打开Vim时,默认进入普通模式。在这个模式下,可以使用各种命令来移动光标、删除文本、复制粘贴等操作。例如,使用h、j、k、l来移动光标。h是向左移动一个字符,j…

数据可视化-2. 条形图

目录 1. 条形图适用场景分析 1.1 比较不同类别的数据 1.2 展示数据分布 1.3 强调特定数据点 1.4 展示时间序列数据的对比 1.5 数据可视化教育 1.6 特定领域的应用 2. 条形图局限性 3. 条形图图代码实现 3.1 Python 源代码 3.2 条形图效果(网页显示&#…

2023年下半年软考信息安全工程师案例分析及答案解析

试题一(16分) 回答问题1至问题6,将解答填入答题纸对应的解答栏内。 问题1(4分) 已知DES算法S盒如下,请补全S盒空缺的数据(1)、(2)、(3)、(4)。 【参考答案】3、13、15、0 问题2(2分) 已知S盒的输入为110011,请计算经过S盒变换之后的二进制输出。 【参考…

模型部署学习笔记——模型部署关键知识点总结

模型部署学习笔记——模型部署关键知识点总结 模型部署学习笔记——模型部署关键知识点总结1. CUDA中Grid和Block的定义是什么?Shared Memory的定义?Bank Conflict的定义?Stream和Event的定义?2. TensorRT的工作流程?3…

Spring Cloud Gateway 源码

Spring Cloud Gateway 架构图 按照以上架构图,请求的处理流程: 1.客户端请求发送到网关 DispatcherHandler 2.网关通过 HandlerMapping 找到相应的 WebHandler 3.WebHandler生成FilterChain过滤器链执行所有的过滤器 4.返回Response结果 自动装配类Gat…

基于Spring Boot的店铺租赁平台的设计与实现

一、项目背景 随着互联网技术的飞速发展,线上交易已成为商业活动的重要趋势。店铺租赁作为商业地产的核心环节,其传统模式面临着信息不对称、交易效率低下等问题。因此,开发一个高效、便捷的线上店铺租赁平台显得尤为重要。本项目利用Java S…

基于卷积神经网络(CNN)和ResNet50的水果与蔬菜图像分类系统

前言 在现代智能生活中,计算机视觉技术已经成为不可或缺的工具,特别是在食物识别领域。想象一下,您只需拍摄一张水果或蔬菜的照片,系统就能自动识别其种类并为您提供丰富的食谱建议。这项技术不仅在日常生活中极具实用性&#xf…

Tomcat部署war包项目解决404问题

问题出在了Tomcat的版本上了,应该先去看这个项目使用的springboot版本,然后去仓库里找到对应Tomcat版本。 Maven Repository: org.springframework.boot spring-boot-starter-tomcat 因此我们应该选择Tomcat9版本。 当我把Tomcat11换成Tomcat9时&…

Redis篇--常见问题篇1--缓存穿透(缓存空值,布隆过滤器,接口限流)

1、概述 缓存穿透是指客户端请求的数据既不在Redis缓存中,也不在数据库中。换句话说,缓存和数据库中都不存在该数据,但客户端仍然发起了查询请求。这种情况下,缓存无法命中,请求会直接穿透到数据库,而数据…

前端使用 Konva 实现可视化设计器(20)- 性能优化、UI 美化

这一章主要分享一下使用 Konva 遇到的性能优化问题,并且介绍一下 UI 美化的思路。 至少有 2 位小伙伴积极反馈,发现本示例有明显的性能问题,一是内存溢出问题,二是卡顿的问题,在这里感谢大家的提醒。 请大家动动小手&a…