当前位置: 首页 > news >正文

苏宁数据治理实战方法论和三字经

随着移动互联网和大数据的蓬勃发展,数据即资产的理念深入人心。大数据已发展成为具有战略意义的生产资料,在各行各业发挥着极其重要的作用,而大数据也给很多企业带来了前所未有的自豪感和自信感。

但是,大数据真的是越越好吗?大数据到达一定的规模,其所需承载的集群资源成本、数据开发维护成本和数据管理成本,将会呈几何式增长,同样也将会带来一笔巨额的开销。

如果缺少科学有效的治理管控,就会出现大量的数据资产,这不仅会吞噬公司的利润,还会极大影响数据业务的发展以及平台运行的稳定。

很多大数据公司都会面临这样一些窘境:

  • 新开发的数据任务,赶紧上,却发现集群资源不够了。
  • 早上要跑完的任务,上午还没跑完,报表什么时候能看到?
  • 上个月刚删了很多数据,存储又快满了,每天还有大量的数据在增长。
  • 小文件数量这么多,集群 NameNode 内存快要爆了……

一个个头疼的问题接踵而至,面对这些问题我们是不是得换一个视角,给大数据集群资源来一场瘦身,取其精华、去其糟粕,让大数据集群资源环境更加健康,数据开发工作更加高效,公司投入产出比更加合理。

所以,大数据集群资源治理(以下简称治理)的工作亟待开展。

治理为何难以推动?

大多数公司在大数据发展初期都是野蛮生长的,它们更关注的是拥有更多的数据,更快速的完成数据业务开发,即使集群资源不够了,增加机器远比开展治理来得更快。

治理工作涉及众多的职能线与部门,角色不同,立场不同,治理投入度也不同。

即使集群资源达到一定规模,不得不治理时,各组织仍会以开发业务为核心,治理工作对他们来说优先级并不高,这也直接影响着治理效果。

治理工作如何开展?

苏宁认为,治理工作需要从组织保障和治理工具两方面协同推进。公司的支持至关重要,有助于建设统一的数据文化,推进成立数据治理委员会,明确各组织的职责,制定治理制度、标准和流程等,以专职的治理团队负责治理工具建设和整体运营推进。

不同于传统数据资产管理,大数据集群资源治理聚焦计算资源和存储资源的缩容,在保障平台性能和稳定性的同时,又需要考量数据资产管理的赋能。

大数据集群资源的治理工作应结合公司现状,集中精力解决当前最大痛点,优先治理紧急的、投入产出比高的治理项。

对于紧急的治理项,如果涉及的部门和用户较少,能够通过面对面、邮件、社交媒体进行沟通,在短时间内解决的,采用线下手工治理方式。

对于非紧急治理项,涉及的部门和用户较广,并且需要长期治理的,则采用线上工具辅助治理,以减少人力投入成本。

为此,苏宁启动了巡湖工程千迁工程等专项治理工程:

  • 巡湖工程,主要任务是对大数据集群资源进行全面的巡检和治理。
  • 千迁工程,是对高算力的 Hive 任务,进行分批次迁移至 SparkSQL 计算平台,同时保障治理工作的全面性和聚焦性。

在治理工作方式的演进上,苏宁采用了四个步骤:线下手工治理、半工具化治理、工具化治理和自驱动治理,最终实现各组织自我驱动型的治理常态。

典型治理场景和方案

大数据集群资源治理是一项庞大且复杂的工程,苏宁结合自己的治理经历,从计算治理、存储治理、性能和稳定性治理三个方面,分享一下典型的治理场景和解决方案。

计算治理

毫无疑问,CPU 和内存是集群的稀缺资源,保障集群资源算力是首要任务。

一旦计算资源缺乏,将面临数据采集、数据存储、数据加工、数据稽核等一系列数据作业的延误,甚至崩溃。

如何降低计算资源的消耗,提高任务执行的性能,缩短任务产出的时间,是计算治理的核心目标。

以下主要从任务复算治理、任务异常治理、任务削峰平谷治理、任务资源配置治理、计算框架优化几个角度,分别介绍计算治理优化。

任务复算治理

数仓建设过程中,往往存在事实表与维度表多次关联、事实表与事实表多次关联的现象,造成数据的重复计算。

任务复算治理,是面向大数据离线任务 HiveSparkSQL  SQL 类的任务,通过对表与表关联的 unionjoin、子查询复杂关联等语法进行解析,识别重复计算的任务及其读取的关联表(源表)数据,并以此推动公共模型建设,减少任务重复计算。

其中,表关联 union 方式识别比较简单,示例如下:

任务异常治理

任务出错率是衡量任务是否需要治理的重要指标,出错率过高意味着这个任务是没有价值的,一般可以被清除。如果任务确实需要使用,则必须进行优化。

以下作为一个参考,阈值可根据实际情况进行调整:

另外,当任务的目标表在一个或多个调度周期内未作更新,可认定为该任务未产出数据,任务清除下线的可能性很大。

任务削峰平谷治理

从全天来看,任务执行会有明显的忙闲时之分。大部分公司的忙时主要集中在凌晨 0 点至 8 点,其余时间段相对为闲时,这就造成了忙时计算资源严重紧缺。

大家都想在早上 8 点前跑完任务,但是不是每个忙时任务都有这个必要呢?通过对忙时任务产出表的被读时间进行分析,可以识别出不合理调度执行的任务。

比如,如果任务在早上 8 点跑完,其写入的目标表在中午 12 点才被读取,是否可以将该任务避开忙时执行?

任务资源配置治理

这里主要谈一下 Spark Streaming 实时任务资源治理。Spark Streaming  Spark 处理逻辑是相同的,都是收到外部数据流之后按照时间切分。

微批处理一个个切分后的文件,往往会存在资源分配过多的现象,这很容易被识别。

由上图可见,将数据按照时间划分成 N 等分。假设每批次 A 的间隔时长:batch_time;处理 B 的时长:total_delay;等待 C 的时长:wait_time

当出现 batch_time>>total_delay 时,当前任务占用的资源会浪费 wait_time

通过缩减任务资源或多个任务合并成一个任务的方式来治理,都可以提升资源利用率。

虽然 total_delay 会加长,只要整体处理时间还在原定计划内,即可满足业务需求。

计算框架优化

计算框架越来越多,也越来越成熟完善,选择适合自己的计算框架是关键。比如,由 Hive 任务迁移至 SparkSQL 任务、Storm 任务迁移至 Flink 任务,会带来性能上的明显提升。

但是,在海量数据任务的前提下,任务迁移绝非易事,需要综合考虑迁移的方案以及涉及的成本和风险。

存储治理

在数据爆发式增长的今天,存储资源的有效使用也面临着一系列的挑战。如何降低存储资源的消耗,节省存储成本,是存储治理的目标。

以下主要从生命周期管理、数据压缩治理、数据复存治理、数据价值治理几个角度介绍存储治理优化。

生命周期管理

根据表生命周期对表进行清理删除,是最常见有效的存储治理方式。为降低数据丢失风险,可以先对表进行 rename 或通过 ranger 禁止表读写权限(相当于逻辑删除),7 天观察期过后删除至回收站,回收站默认保留 3 天后进行最终删除。

如果表的生命周期设置不合理(过长),也可以根据表的类型、业务情况进行稽核整改。

数据压缩治理

数据压缩治理是最简单有效的存储治理方式。数据压缩的好处显而易见,可以直接节省磁盘空间,提升磁盘利用率,并且加速网络传输。

但同时数据的压缩和解压,需要消耗计算资源。如果集群计算资源紧缺,并且数据经常被读,则建议根据实际场景选择合适的数据压缩方式。

在不同的存储格式和压缩算法下,简单查询、大宽表查询和复杂查询的执行表现均有差异,具体需结合实际场景选择使用。

数据复存治理

比较简单的方式是通过解析 Hive 任务、SparkSQL 任务的代码逻辑,分析代码中的读表、写表、条件、字段函数,识别读表和写表是否重复存储。

另外,也可以通过表名、字段名的相似度进行识别,并结合某些周期产出数据,抽样进行相似度对比分析和识别。

如果表数据出现重复存储,还需要根据链路血缘关系找出上游任务,对整个链路上的表及上游任务实施一锅端治理。

数据价值治理

梳理当前业务价值,从数据应用层(包括报表、指标、标签)源头分析投入产出比,对整体链路资源进行从上至下的价值治理。

如果表长时间未作更新(如 32 天)或未被读取,往往表明这张表价值很低,甚至没有价值,则可对表进行清理删除,这时可以优先考虑治理大表、分区表、高成本表。

性能和稳定性治理

集群的性能和稳定性治理涉及众多方面,这里重点谈一下小文件治理和数据倾斜治理。

小文件治理

HDFS 虽然支持水平扩展,但是不适合大量小文件的存储。因为 NameNode 将文件系统的元数据存放在内存中,导致存储的文件数目受限于 NameNode 内存大小。当集群到了一定规模,NameNode 内存就会成为瓶颈。

小文件治理需要根据当前集群的文件数量,定义合适的小文件大小,比如小于 1M

治理方式需要考虑从源头控制,在任务中配置文件合并参数,在 HDFS 存储之前进行小文件合并,但这又会延长任务执行时间。

所以,可选择在闲时进行周期性的小文件合并。另外,也可以设置小文件占比阈值,根据阈值触发小文件合并。

数据倾斜治理

很多时候,我们在用 Hive  Spark 任务取数,只是跑了一个简单的 join 语句,却跑了很长时间,往往会觉得这是集群资源不够导致的,但是很大情况下,是出现了数据倾斜的情况。

数据倾斜,在 MapReduce 编程模型中十分常见,大量的相同 key  partition 分配到一个分区里,造成了某些任务累死,还拖了后腿,其他任务闲死的情况,这并不利于资源最大化的有效利用。

由上图可见,通过对任务执行的监控日志分析,可以很方便的找出数据倾斜任务。

结合具体产生原因、数据分布和业务变化,有针对性的优化任务,任务执行时间能缩短几十倍以上,效果非常明显。

治理工具需要具备哪些能力?

面向治理责任人、项目主管、公司领导及治理运营人员,苏宁构建了统一的集群资源治理平台,全局把控集群计算资源、存储资源、性能和稳定性的整体情况,通过平台识别通知、治理优化、监督考核的支撑能力,实现一站式治理服务和闭环流程,降低治理投入的工作量,提升治理成效。

后记

苏宁建设了较为成熟的数据治理体系和标准流程,多项治理工作同步推进,均取得了显著的成果,为公司节约了可观的服务器资源投入成本。

并且,随着治理工作的推进,各组织也更主动的开展源头治理,大大减轻了事后治理的工作量。

治理工作不会一蹴而就,也不如前端业务那么容易出彩,显得朴实无华。每一位治理工作者都在背后默默的坚守付出,孜孜不倦地保障着大数据集群资源的最大化有效利用。

未来,苏宁大数据治理团队仍将持续推进治理工作,进一步提升治理工具产品支撑能力,赋能治理工作常态化、工具化和智能化。

我们崇尚科技与艺术的结合,最后赋诗一首,希望能帮助有需要的同仁更好的理解这项工作,更快的实现治理目标。

《苏宁数据治理 三字经》

--韦真

数之初,量本小。猛增长,遇瓶颈。

缺管理,实难控。若不治,随可崩。

若广治,惧其繁。治之道,贵以专。

高层挺,强执行。定职责,齐协作。

察现状,诊问题。能识别,准定位。

控增量,降存量。摊成本,明方向。

始源头,理价值。视场景,择平台。

宜压缩,需清理。去冗余,平峰谷。

治理急,线下先。累经验,建工具。

能优化,可评估。须考核,纳监督。

体系化,智能化。一站式,闭环式。

存储易,算力难。若有方,皆可成。

相关文章:

苏宁数据治理实战方法论和三字经

随着移动互联网和大数据的蓬勃发展,“数据即资产”的理念深入人心。大数据已发展成为具有战略意义的生产资料,在各行各业发挥着极其重要的作用,而大数据也给很多企业带来了前所未有的自豪感和自信感。 但是,大数据真的是越“大”越…...

创建型设计模式:3、单例模式(C++实现实例 线程安全)

目录 1、单例模式(Singleton Pattern)的含义 2、单例模式的优缺点 (1)优点: (2)缺点: 3、C实现单例模式的示例(简单) 4、C实现单例模式的示例&#xff…...

JavaWeb学习笔记

Maven:自动导入配置jar包。 Maven项目架构管理工具&#xff1a;核心思想&#xff1a;约定大于配置 Maven:环境优化 1.修改web.xml为最新的 <?xml version"1.0" encoding"UTF-8"?> <web-app xmlns"http://xmlns.jcp.org/xml/ns/javaee&…...

ad+硬件每日学习十个知识点(24)23.8.4(时序约束,SignalTap Ⅱ)

文章目录 1.建立时间和保持时间2.为什么要建立时序约束&#xff1f;3.SignalTap Ⅱ4.SignalTap Ⅱ使用方法5.HDL的仿真软件&#xff08;modelsim&#xff09;6.阻抗匹配 1.建立时间和保持时间 答&#xff1a; 2.为什么要建立时序约束&#xff1f; 答&#xff1a; 3.Sign…...

FortiGate防火墙日志审计运维

环境介绍 CPU&#xff1a;8核&#xff0c;内存&#xff1a;16GB&#xff0c;硬盘&#xff1a;100GB 操作系统版本&#xff1a;CentOS-7-x86_64-DVD-2003 平台版本&#xff1a;鸿鹄2.7.0 安装组件 安装环境支持确认 鸿鹄计算引擎使用了 AVX2 高级指令集做向量计算加速&#xf…...

基于yolo v5与Deep Sort进行车辆以及速度检测与目标跟踪实战

项目实验结果展示&#xff1a; 基于yolo v5与Deep Sort进行车辆以及速度检测与目标跟踪实战——项目可以私聊 该项目可以作为毕业设计&#xff0c;以及企业级的项目开发&#xff0c;主要包含了车辆的目标检测、目标跟踪以及车辆的速度计算&#xff0c;同样可以进行二次开发。 …...

以指标驱动,保险、零售、制造企业开启精益敏捷运营的新范式

近日&#xff0c;以“释放数智生产力”为主题的 Kyligence 用户大会在上海前滩香格里拉大酒店成功举行。大会包含上午的主论坛和下午的 4 场平行论坛&#xff0c;并举办了闭门会议、Open Day 等活动。来自金融、零售、制造、医药等行业的客户及合作伙伴带来了超过 23 场主题演讲…...

MyBatis-动态SQL-foreach

目录 标签有以下常用属性&#xff1a; 小结 <froeach> <foreach>标签有以下常用属性&#xff1a; collection&#xff1a;指定要迭代的集合或数组的参数名&#xff08;遍历的对象&#xff09;。item&#xff1a;指定在迭代过程中的每个元素的别名&#xff08;遍历…...

VUE框架:vue2转vue3全面细节总结(3)路由组件传参

大家好&#xff0c;我是csdn的博主&#xff1a;lqj_本人 这是我的个人博客主页&#xff1a; lqj_本人_python人工智能视觉&#xff08;opencv&#xff09;从入门到实战,前端,微信小程序-CSDN博客 最新的uniapp毕业设计专栏也放在下方了&#xff1a; https://blog.csdn.net/lbcy…...

音视频技术开发周刊 | 305

每周一期&#xff0c;纵览音视频技术领域的干货。 新闻投稿&#xff1a;contributelivevideostack.com。 大神回归学界&#xff1a;何恺明宣布加入 MIT 「作为一位 FAIR 研究科学家&#xff0c;我将于 2024 年加入麻省理工学院&#xff08;MIT&#xff09;电气工程与计算机科学…...

vue 图片base64转化

import html2canvas from ‘html2canvas’ html2canvas(canvasDom, options).then(canvas > { //此时的图片是base64格式的&#xff0c;我们将图片格式转换一下 let type ‘png’; let imgData canvas.toDataURL(type); // 照片格式处理 let _fixType function(type) { …...

TS学习03-类

类 calss A {name: stringconstructor(name:string) {this.name name}greet() {return hello, this.name} } let people new A(RenNing)继承 子类是一个派生类&#xff0c;他派生自父类&#xff08;基类&#xff09;&#xff0c;通过 extends关键字 派生类通常被称作 子类…...

FastAPI(七)应用配置

目录 一、在apps下新建文件夹config 二、新建配置文件app_conf.py 一、在apps下新建文件夹config 二、新建配置文件app_conf.py from functools import lru_cachefrom pydantic.v1 import BaseSettingsclass AppConfig(BaseSettings):app_name: str "Windows10 插件&qu…...

eclipse Java Code_Style Code_Templates

Preferences - Java - Code Style - Code Templates Eclipse [Java_Code_Style_Code_Templates_ZengWenFeng] 2023.08.07.xml 创建一个新的工程&#xff0c;不然有时候不生效&#xff0c;旧项目可能要重新导入eclipse 创建一个测试类试一试 所有的设置都生效了...

01《Detecting Software Attacks on Embedded IoT Devices》随笔

2023.08.05 今天读的是一篇博士论文 论文传送门&#xff1a;Detecting Software Attacks on Embedded IoT Devices 看了很长时间&#xff0c;发现有一百多页&#xff0c;没看完&#xff0c;没看到怎么实现的。 摘要 联网设备的增加使得嵌入式设备成为各种网络攻击的诱人目标&…...

APP外包开发的学习流程

学习iOS App的开发是一项有趣和富有挑战性的任务&#xff0c;是一个不断学习和不断进步的过程。掌握基础知识后&#xff0c;不断实践和尝试新的项目将使您的技能不断提升。下面和大家分享一些建议&#xff0c;可以帮助您开始学习iOS App的开发。北京木奇移动技术有限公司&#…...

第0章 环境搭建汇总

mini商城第0章 环境搭建汇总 本文是整个mini商城的前置文档,所有用到的技术安装都在本篇文档中有详细描述。所有软件安装不分先后顺序,只是作为一个参考文档,需要用到什么技术软件,就按照文档安装什么软件,切不可一上来全部安装一遍。 文章中有些截图中服务器地址是192.16…...

大数据培训课程-《机器学习从入门到精通》上新啦

《机器学习从入门到精通》课程是一门专业课程&#xff0c;面向人工智能技术服务&#xff0c;课程系统地介绍了Python编程库、分类、回归、无监督学习和模型使用技巧以及算法和案例充分融合。 《机器学习从入门到精通》课程亮点&#xff1a; 课程以任务为导向&#xff0c;逐步学…...

暗黑版GPT流窜暗网 降低犯罪门槛

随着AIGC应用的普及&#xff0c;不法分子利用AI技术犯罪的手段越来越高明&#xff0c;欺骗、敲诈、勒索也开始与人工智能沾边。 近期&#xff0c;专为网络犯罪设计的“暗黑版GPT”持续浮出水面&#xff0c;它们不仅没有任何道德界限&#xff0c;更没有使用门槛&#xff0c;没有…...

数电与Verilog基础知识之同步和异步、同步复位与异步复位

同步和异步是两种不同的处理方式&#xff0c;它们的区别主要在于是否需要等待结果。同步是指一个任务在执行过程中&#xff0c;必须等待上一个任务完成后才能继续执行下一个任务&#xff1b;异步是指一个任务在执行过程中&#xff0c;不需要等待上一个任务完成&#xff0c;可以…...

【机器视觉】单目测距——运动结构恢复

ps&#xff1a;图是随便找的&#xff0c;为了凑个封面 前言 在前面对光流法进行进一步改进&#xff0c;希望将2D光流推广至3D场景流时&#xff0c;发现2D转3D过程中存在尺度歧义问题&#xff0c;需要补全摄像头拍摄图像中缺失的深度信息&#xff0c;否则解空间不收敛&#xf…...

在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module

1、为什么要修改 CONNECT 报文&#xff1f; 多租户隔离&#xff1a;自动为接入设备追加租户前缀&#xff0c;后端按 ClientID 拆分队列。零代码鉴权&#xff1a;将入站用户名替换为 OAuth Access-Token&#xff0c;后端 Broker 统一校验。灰度发布&#xff1a;根据 IP/地理位写…...

智能在线客服平台:数字化时代企业连接用户的 AI 中枢

随着互联网技术的飞速发展&#xff0c;消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁&#xff0c;不仅优化了客户体验&#xff0c;还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用&#xff0c;并…...

css的定位(position)详解:相对定位 绝对定位 固定定位

在 CSS 中&#xff0c;元素的定位通过 position 属性控制&#xff0c;共有 5 种定位模式&#xff1a;static&#xff08;静态定位&#xff09;、relative&#xff08;相对定位&#xff09;、absolute&#xff08;绝对定位&#xff09;、fixed&#xff08;固定定位&#xff09;和…...

HTML前端开发:JavaScript 常用事件详解

作为前端开发的核心&#xff0c;JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例&#xff1a; 1. onclick - 点击事件 当元素被单击时触发&#xff08;左键点击&#xff09; button.onclick function() {alert("按钮被点击了&#xff01;&…...

中医有效性探讨

文章目录 西医是如何发展到以生物化学为药理基础的现代医学&#xff1f;传统医学奠基期&#xff08;远古 - 17 世纪&#xff09;近代医学转型期&#xff08;17 世纪 - 19 世纪末&#xff09;​现代医学成熟期&#xff08;20世纪至今&#xff09; 中医的源远流长和一脉相承远古至…...

基于 TAPD 进行项目管理

起因 自己写了个小工具&#xff0c;仓库用的Github。之前在用markdown进行需求管理&#xff0c;现在随着功能的增加&#xff0c;感觉有点难以管理了&#xff0c;所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD&#xff0c;需要提供一个企业名新建一个项目&#…...

DingDing机器人群消息推送

文章目录 1 新建机器人2 API文档说明3 代码编写 1 新建机器人 点击群设置 下滑到群管理的机器人&#xff0c;点击进入 添加机器人 选择自定义Webhook服务 点击添加 设置安全设置&#xff0c;详见说明文档 成功后&#xff0c;记录Webhook 2 API文档说明 点击设置说明 查看自…...

Web中间件--tomcat学习

Web中间件–tomcat Java虚拟机详解 什么是JAVA虚拟机 Java虚拟机是一个抽象的计算机&#xff0c;它可以执行Java字节码。Java虚拟机是Java平台的一部分&#xff0c;Java平台由Java语言、Java API和Java虚拟机组成。Java虚拟机的主要作用是将Java字节码转换为机器代码&#x…...

C# 表达式和运算符(求值顺序)

求值顺序 表达式可以由许多嵌套的子表达式构成。子表达式的求值顺序可以使表达式的最终值发生 变化。 例如&#xff0c;已知表达式3*52&#xff0c;依照子表达式的求值顺序&#xff0c;有两种可能的结果&#xff0c;如图9-3所示。 如果乘法先执行&#xff0c;结果是17。如果5…...