数据治理实践-全面总结:小文件治理

news2024/11/27 19:48:44

01 背景

小文件是如何产生的:

  • 日常任务及动态分区插入数据(使用的Spark2 MapReduce引擎),产生大量的小文件,从而导致Map数量剧增;

  • Reduce数量越多,小文件也越多(Reduce的个数和输出文件是对应的)

  • 数据源本身就包含大量的小文件,Api、Kafka等;

  • 实时数据落Hive也会产生大量小文件。

小文件问题的影响:

  • 从Hive的角度看,小文件会开很多Map,一个Map开一个JVM去执行,所以这些任务的初始化,启动,执行会浪费大量的资源,严重影响性能;

  • 在HDFS中,每个小文件对象约占150Byte,如果小文件过多会占用大量内存,会直接影响NameNode性能,相对的如果HDFS读写小文件也会更加耗时,因为每次都需要从NameNode获取元信息,并与对应的DataNode建立连接,如果NameNode在宕机中回复,也需要更多的时间从元数据文件中加载;

  • 占据HDFS存储,从下图我们得知21号文件平均后存储为280K,合并后为249K。

02 小文件问题的解决方案

2.1 计算引擎使用spark3合并小文件

Spark能够通过AQE特性自动合并较小的分区,对于动态分区写入Spark3.2+引入了Rebalance操作,借助于AQE来平衡分区,进行校分区合并和倾斜分区拆分,避免分区数据过大或过小,能够很好处理小文件问题。

AQE解释:Spark 社区在 DAG Scheduler 中,新增了一个 API 在支持提交单个 Map 阶段,以及在运行时修改 shuffle 分区数等等,而这些就是 AQE,在 Spark 运行时,每当一个 Shuffle、Map 阶段进行完毕,AQE 就会统计这个阶段的信息,并且基于规则进行动态调整并修正还未执行的任务逻辑计算与物理计划(在条件运行的情况下),使得 Spark 程序在接下来的运行过程中得到优化。

2.2 减少reduce的数量

计算引擎为Hive,可以使用参数进行控制:

set mapred.reduce.tasks=100; 设置reduce数量, mapper数量:reduce数量 = 10:1)set mapred.reduce.tasks=100; insert overwrite table xxx.xxx partition(ds='${lst1date}')

2.3 Distribute By Rand() 

Distribute by rand()控制分区中数据量,使得Spark SQL的执行计划中多一个Shuffle,用于代码结尾(Distribute by :用来控制Map输出结果的分发,即Map端如何拆分数据给Reduce端。 会根据Distribute by 后边定义的列,根据Reduce的个数进行数据分发,默认是采用hash算法。当 Distribute by 后边跟的列是Rand()时,即保证每个分区的数据量基本一致)​​​​​​​

where  t0.ds='${lst1date}'and xxx=xxxdistribute by rand()

2.4 在数据传输任务后再做一个清洗任务

本质也是回刷分区合并小文件任务,去处理小文件保障从数据源开始小文件不向下游流去。

2.5 实时任务传输hive后采用每天调度任务来合并小文件

实时任务:

离线每日调度任务代码:​​​​​​​

set hive.exec.dynamic.partition.mode=nonstrict;set spark.sql.hive.convertInsertingPartitionedTable=false;set spark.sql.optimizer.insertRepartitionBeforeWriteIfNoShuffle.enabled=true;insert overwrite table xxx.ods_kafka_xxxx partition(ds)select id      ,xxx_date      ,xxx_type      ,dsfrom xxx.ods_kafka_xxxxwhere  ds='${lst1date}'—-t-1的参数 

2.6 通过参数方式合并小文件

Hive:​​​​​​​

set hive.merge.mapfiles=true;    默认值ture,在Map-only的任务结束时合并小文件。set hive.merge.mapredfiles=true;    默认值false,在Map-Reduce的任务结束时合并小文件。set hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat;  执行MAP前进行小文件合并

Spark2:

Set spark.sql.finalStage.adaptive.advisoryPartitionSizeInBytes=2048M;

03 已有的小文件处理

3.1 使用spark3进行动态分区刷新代码如下

set hive.exec.dynamic.partition.mode=nonstrict;set spark.sql.hive.convertInsertingPartitionedTable=false;set spark.sql.optimizer.insertRepartitionBeforeWriteIfNoShuffle.enabled=true;insert overwrite table xxx.xxx partition(ds)select id      ,xxx_date      ,xxx_type      ,dsfrom xxx.xxxwhere  ds<='2023-04-20'and ds>='2022-04-20'

3.2 重建表

这里如果是无分区的表可以考虑直接将表删掉,再重建,使用Spark3跑数据

04 小文件治理问题点

遇到问题点1:

用spark3+动态分区合并小文件发现一个问题,如果我给分区固定日期 小文件原30个会合并1个,如果用动态分区的话刷完可能部分分区还是30个,后面问了数据平台大佬,大佬说没加spark.sql.optimizer.insertRepartitionBeforeWriteIfNoShuffle.enabled=true ,原理是把inset select from这种简单的没shffule的合并小文件关掉的,动态分区写入和静态分区写入时候创建文件的姿势确实是不一样的

遇到问题点2:

实时数据传入hive小文件居多也需要合并,这里我们可以把历史数据通过spark3+动态分区先回刷 后续建一个每日spark3的调度任务刷t-1的小文件即可

遇到问题点3:

使用Spark3刷小文件时候如果用到Impala同学记住一定要加这个参数,解决Spark3刷新数据后无法同步到Imapla

set spark.sql.hive.convertInsertingPartitionedTable=false;

05 小文件治理工具化

这里使用网易数帆EasyData中数据治理服务-小文件治理为大家讲解,平台图展示如下:

概览下来我们能通过小文件执行趋势和存储量分区量方向判断需要治理数据表有哪些,其次可通过右边操作完成小文件优化。

合并小文件功能

实际是通过用户配置自动化生成计算引擎-spark3调度任务,并每天会调度(这里实现了与凌晨线上任务错峰,避免争抢资源)将数据写入新创建临时表合,再对数据进行校验,如果校验失败则回滚,如校验成功则将数据写入线上数据表中(保障数据质量,避免Bug产生)

  • 倒排小文件数后,找到对应的表;

  • 通过上述方法在任务中治理;

  • 点击操作-小文件,每日扫描去合并小文件(不适合分区多的表例如大于1年以上分区数的表,其次定时清理需要选择中午或晚上休息时间且为线上环境不可与线上任务争夺资源)。

任务运维

等同于日常的离线任务运维,可看合并小文件任务执行情况。

数据趋势

是指任务中文件总数优化趋势,不同于大盘优化趋势展示。

合并任务功能图:

06 小文件治理效果

优化及下线文件数较高的数据表x张,完成x个实时/离线同步任务小文件处理任务,小文件总数由1,217,927下降至680,133,优化率44.1%

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

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

相关文章

Cube Map 系列之:手把手教你 使用 立方体贴图

什么是Cube Map 在开始立方体贴图之前&#xff0c;我们先简单了解下cube map。 cube map 包含了六个纹理&#xff0c;分别表示了立方体的六个面&#xff1b; 相较二维的纹理使用坐标uv来获取纹理信息&#xff0c;这里我们需要使用三维的方向向量来获取纹理信息&#xff08;一…

[PyTorch][chapter 33][卷积神经网络]

前言 参考&#xff1a; 《数字图像处理与机器视觉》 第五章 空间域图像增强&#xff0c; 图像卷积&#xff1a; 空间域图像增强 图像增强是根据特定需要突出一副图像中的某些信息&#xff0c;同时削弱或去除 某些不需要信息的处理方法,其主要目的是是的处理后的图像对某种特定的…

有人问C# web怎么部署iis上面

C# web怎么部署iis上面 C# web项目怎么来&#xff1f;&#xff1f;&#xff1f;IIS作用 IIS怎么开启步骤一&#xff1a;打开控制面板->程序->启动或关闭windows 功能->找到**Internet Information Services**步骤二&#xff1a;勾选 web管理工具&#xff0c;http错误&…

超好用的工具类网站分享,打工人必备!

今天给大家推荐几个超好用的工具类网站&#xff0c;无论是工作还是生活中堪称打工人必备工具。 Background Maker https://colorkit.co/background-maker/82cedd-b04a0d-56d8a9/ 网站内置了 7 种不同风格的背景&#xff0c;如渐变色、波浪、低三角形等&#xff0c;非常适合用作…

基于梯度提升决策树的组合特征方法,《百面机器学习》学习笔记

《百面机器学习》学习笔记&#xff1a;基于梯度提升决策树的组合特征方法 基于梯度提升决策树的组合特征方法梯度提升决策树这里举一个例子来说明梯度提升决策树的思想方法假设对于某种类型的输入&#xff0c;经过上述介绍的梯度提升决策树构建流程得到的模型如下图所示 基于梯…

开源的表单系统效果怎么样?

当前&#xff0c;开源的表单系统得到了企业的重视和喜爱&#xff0c;因为它的简洁、灵活、便捷等优势特点&#xff0c;助力企业提质增效&#xff0c;各部门之间的协作沟通效率得到提升&#xff0c;数据资源也获得了有效整理和应用。今天&#xff0c;我们就一起来看看开源的表单…

不愧是腾讯 ,问的贼细

腾讯软件测试岗位的面试流程可能会因个人经验和公司而异&#xff0c;但通常情况下&#xff0c;腾讯软件测试的面试分为初试、二面、三面和四面。以下是每一轮面试可能涉及到的问题&#xff1a; 初试&#xff1a; 请介绍一下自己&#xff0c;以及为什么想要加入腾讯软件测试团…

oracle 学习之 unpivot/pivot函数及hive实现该功能

Oracle中pivot函数详解_实泽有之&#xff0c;无泽虚之的博客-CSDN博客pivot函数格式&#xff1a;pivot(聚合函数 for 需要转为列的字段名 in(需要转为列的字段值))&#xff1b;pivot函数说明&#xff1a;实现将指定字段的值转换为列的效果。https://blog.csdn.net/qq_40018576/…

最新DNDC模型在土地利用变化、未来气候变化下的建模方法及温室气体时空动态模拟实践技术应用

由于全球变暖、大气中温室气体浓度逐年增加等问题的出现&#xff0c;“双碳”行动特别是碳中和已经在世界范围形成广泛影响。。DNDC&#xff08;Denitrification-Decomposition&#xff0c;反硝化-分解模型&#xff09;是目前国际上最为成功的模拟生物地球化学循环的模型之一&a…

Flutter报错Building with plugins requires symlink support的解决方法

错误 Building with plugins requires symlink support. Please enable Developer Mode in your system settings. Runstart ms-settings:developers to open settings. 原因 这个错误表示你的系统尚未启用开发者模式,所以无法使用Flutter的插件功能。 Flutter插件会通过符号…

OJ刷题 第十六篇(递推较多,难)

31012 - 贴瓷砖 时间限制 : 1 秒 内存限制 : 32 MB 有一块大小是 2 * n 的墙面&#xff0c;现在需要用2种规格的瓷砖铺满&#xff0c;瓷砖规格分别是 2 * 1 和 2 * 2&#xff0c;请计算一共有多少种铺设的方法。 输入 输入的第一行包含一个正整数T&#xff08;T<20&…

第十三章 使用DHCP动态管理主机地址

文章目录 第十三章 使用DHCP动态管理主机地址一、动态主机地址管理协议1、DHCP简介2、DHCP常见术语 二、部署DHCP服务程序1、安装DHCP服务程序2、配置文件参考模板3、dhcpd服务程序配置文件中常见参数及作用 三、自动管理IP地址1、机房所用的网络地址以及参数信息2、关闭虚拟网…

Agisoft Metashape 红外影像处理

系列文章目录 文章目录 系列文章目录前言一、加载红外影像二、对齐照片三、构建 DEM四、生成 DOM五、温度值可视化前言 Agisoft Metashape 专业版支持处理来自 AscTec(ARA 格式)、WIRIS(TIFF 格式)热成像仪和以 R-JPEG(FLIR 数据)格式保存数据的热成像数据。 在本文中,…

如何编写自动化测试用例,一篇带你解决

自动化测试脚本 什么是自动化测试&#xff1f; 自动化测试是验证和验证软件是否满足所有用户需求&#xff0c;并使用自动化工具按预期运行。它检查在产品开发阶段期间和之后出现的错误、问题和其他类型的缺陷。这种类型的软件测试运行在由测试工具处理的编程脚本上。有多种测…

linux基础(IO)

目录&#xff1a; 1.复习C文件IO相关操作 2.介绍C程序会默认打开3个输入输出流 3.学习文件的系统调用接口 ---------------------------------------------------------------------------------------------------------------------------- 1.复习C文件IO相关操作 fopen函数…

HTTP协议格式及 fiddler 的使用

HTTP 协议格式 简述 HTTP 协议fiddler(抓包工具) 的使用协议格式总结 : 简述 HTTP 协议 HTTP 协议是个使用非常广泛的应用层协议, 应用层协议通常是需要 “自定义协议” 的, 自定义协议可以基于现有协议进行定制, HTTP 之所以应用广泛就是因为其可定制性非常强. 日常生活中遇到…

网络安全工程师的岗位需求,破237万了!

3月底凌晨&#xff0c;腾讯QQ和微信的相关业务都出现了功能异常。 包括微信语音对话、朋友圈、微信支付&#xff0c;以及QQ文件传输、QQ空间和QQ邮箱在内的多个功能无法使用。 这事儿都听说了吧&#xff1f; 据报道&#xff0c;这次的事故是因为电信机房冷却系统故障导致。 …

Linux安装Tomcat搭建Jenkins

前提条件 由于Tomcat服务器主要用于部署java web项目。所以先安装java jdk。安装过程大家应该很轻车熟练了。 一、安装Tomcat 创建/usr/tomcat文件夹 mkdir -p /usr/tomcat下载tomcat安装包 wget https://archove.apache.org/dist/tomcat/tomcat-8/v8.0.23/bin/apache-tomcat…

umi4 实现msal aad 登录loginRedirect方式并获取令牌

在 Umi 4 中使用 Ant Design Pro Layout 以及 MSAL (Microsoft Authentication Library) 实现登录并获取令牌进入到首页&#xff0c;你需要按照以下步骤进行操作&#xff1a; 安装所需依赖&#xff1a; 使用 npm 或 yarn 安装所需的包&#xff1a; npm install azure/msal-bro…

从零开始Vue3+Element Plus后台管理系统(十)——自定义水印指令与全局注册

在实际项目开发中&#xff0c;自定义指令用得还是比较多的&#xff0c;比如&#xff1a;复制粘贴、输入框防抖、输入框禁止特殊字符、权限校验、背景水印、拖拽等等… 指令确实是个优雅的存在。 Vue3中定义一个普通的自定义指令的详细说明参见官网&#xff1a;https://cn.vue…