spark sql合并小文件_Spark SQL小文件问题在OPPO的解决方案

Spark SQL小文件是指文件大小显著小于hdfs block块大小的的文件。过于繁多的小文件会给HDFS带来很严重的性能瓶颈,对任务的稳定和集群的维护会带来极大的挑战。

一般来说,通过Hive调度的MR任务都可以简单设置如下几个小文件合并的参数来解决任务产生的小文件问题:

set hive.merge.mapfiles=true;
set hive.merge.mapredfiles=true;
set hive.merge.size.per.task=xxxx;
set hive.merge.smallfiles.avgsize=xxx;

然而在我们将离线调度任务逐步从Hive迁移到Spark的过程中,由于Spark本身并不支持小文件合并功能,小文件问题日益突出,对集群稳定性造成很大影响,一度阻碍了我们的迁移工作。

为了解决小文件问题,我们经历了从开始的不断调整参数到后期的代码开发等不同阶段,这里给大家做一个简单的分享。

1. Spark为什么会产生小文件

Spark生成的文件数量直接取决于RDD里partition的数量和表分区数量。注意这里的两个分区概念并不相同,RDD的分区与任务并行度相关,而表分区则是Hive的分区数目。生成的文件数目一般是RDD分区数和表分区的乘积。因此,当任务并行度过高或者分区数目很大时,很容易产生很多的小文件。

f7a2169e54aa093a341656c7bbf424f5.png

图1:Spark RDD分区数

因此,如果需要从参数调整来减少生成的文件数目,就只能通过减少最后一个阶段RDD的分区数来达到了(减少分区数目限制于历史数据和上下游关系,难以修改)

2. 基于社区版本的参数进行调整的方案

2.1 不含有Shuffle算子的简单静态分区SQL 

这样的SQL比较简单,主要是filter上游表一部分数据写入到下游表,或者是两张表简单UNION起来的任务,这种任务的分区数目主要是由读取文件时Partition数目决定的。

  •  因为从Spark 2.4以来,对Hive orc表和parquet支持已经很不错了,为了加快运行速率,我们开启了将Hive orc/parquet表自动转为DataSource的参数。对于这种DataSource表的类型,partition数目主要是由如下三个参数控制其关系。

spark.sql.files.maxPartitionBytes;
spark.sql.files.opencostinbytes;
spark.default.parallelism;

其关系如下图所示,因此可以通过调整这三个参数来输入数据的分片进行调整:

       39dd42f921cb511c41875d085ae67c75.png

  • 而非DataSource表,使用CombineInputFormat来读取数据,因此主要是通过MR参数来进行分片调整:

    mapreduce.input.fileinputformat.split.minsize

虽然我们可以通过调整输入数据的分片来对最终文件数量进行调整,但是这样的调整是不稳定的,上游数据大小发生一些轻微的变化,就可能带来参数的重新适配。

为了简单粗暴的解决这个问题,我们对这样的SQL加了repartition的hint,引入了新的shuffle,保证文件数量是一个固定值。

d19fa3c8f83e45ab05f3f3bccb7f4566.png

2.2 带有Shuffle算子的静态分区任务 

在ISSUE SPARK-9858中,引入了一个新的参数:

spark.sql.adaptive.shuffle.targetPostShuffleInputSize,

后期基于spark adaptive又对这个参数做了进一步增强,可以动态的调整partition数量,尽可能保证每个task处理targetPostShuffleInputSize大小的数据,因此这个参数我们也可以用来在一定程度上控制生成的文件数量。

2.3 动态分区任务  

动态分区任务因为存在着分区这一变量,单纯调整rdd这边的partition数目很难把控整体的文件数量。

在hive里,我们可以通过设置hive.optimize.sort.dynamic.partition来缓解动态分区产生文件过多导致任务执行时task节点经常oom的状况。这样的参数会引入新的的shuffle,来对数据进行重排序,将相同的partition分给同一个task处理,从而避免了一个task同时持有多个文件句柄。

因此,我们可以借助这样的思想,使用distribute by语句来修改sql,从而控制文件数量。一般而言,假设我们想对于每个分区生成不超过N个文件,则可以在SQL末尾增加DISTRIBUTE BY [动态分区列],ceil(rand() * N)。

2fd31fc47c7466fd040562186737d73e.png

3. 自研可合并文件的commitProtocol方案

综上种种,每个方法都存在一定的弊端,众多规则也在实际使用过程中对业务方造成很大困扰。

因此我们产生了想在spark这边实现和hive类似的小文件合并机制。在几个可能的方案选型中,我们最终选择了:重写spark.sql.sources.commitProtocolClass方法。

一方面,该方案对Spark代码无侵入,便于Spark源码的维护,另一方面,该方案对业务方使用友好,可以动态通过set命令设置,如果出现问题回滚也十分方便。业务方在使用过程中,只需要简单设置:

spark.sql.sources.commitProtocolClass,即可控制是否开启小文件合并。

在开启小文件合并参数后,我们会在commit阶段拿到生成的所有文件,引入两个新的job来对这些文件进行处理。首先我们在第一个job获取到所有大小小于spark.compact.smallfile.size的文件,在查找完成后按照spark.compact.size参数值对组合文件,并在第二个job中对这些文件进行合并。

6cf3babbeb6f0ca4353f465a91036aad.png

691c6edc73247ac49d50c86e26a9829a.png

☆ END ☆

招聘信息

OPPO互联网技术团队招聘一大波岗位,涵盖C++、Go、OpenJDK、Java、DevOps、容器、Linux内核开发、产品经理、项目经理等多个方向,请在公众号后台回复关键词“招聘”查看查详细信息。

你可能还喜欢

OPPO自研ESA DataFlow架构与实践

OPPO 实时数仓揭秘:从顶层设计实现离线与实时的平滑迁移

OPPO异地多活实践——缓存篇

OPPO百万级高并发MongoDB集群性能数十倍提升优化实践(上)

OPPO百万级高并发MongoDB集群性能数十倍提升优化实践(下)

更多技术干货

扫码关注

OPPO互联网技术

5b4cbd1bad88c82085233309ea2b0026.png 我就知道你“在看”d34700448dcb6849d0fd25d3d2f80db4.gif

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

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

相关文章

白春礼:探究物质世界奥秘的一把金钥匙——纪念元素周期表发表150周年

来源:中国科学报联合国大会宣布2019年为国际化学元素周期表年,旨在纪念俄罗斯化学家门捷列夫在150年前发表元素周期表这一科学发展史上的重大成就。世界万物是由什么最基本的物质构成的?这些最基本的物质又是怎样变成万物世界的?这…

莫名的证书错误...ERROR ITMS-90035:Invalid Signature.

请删除 .DS_Store 这种类似的文件再尝试转载于:https://www.cnblogs.com/decode1234/p/6529601.html

linux里工作目录的字体变蓝,netterm访问Linux时字体和背景颜色随目录发生改变的问题解决...

方法很多,除了改用其他仿真终端程序外,继续使用netterm可用下面方法解决。方法1:修改netterm参数,最简单选项-->屏幕颜色-->允许图形编译码 重置颜色至默认值点选上,见下图:这种方法的最大特点是目录…

因果关系:真的存在吗?

来源:白驹静夜思学图灵奖获得者、贝叶斯网络之父 Judea Pearl 和他的同事在 2018 年完成了的著作《The Book of Why: The New Science of Cause and Effect》(中文名《为什么》)中认为:机器学习不过是在拟合数据和概率分布曲线。变…

ThinkPhp知识大全(非常详细)

php框架 发瑞 一、真实项目开发步骤: 多人同时开发项目,协作开发项目、分工合理、效率有提高(代码风格不一样、分工不好)测试阶段上线运行对项目进行维护、修改、升级(单个人维护项目,十分困难&#xff…

盘点2019年336起机器人及相关领域投融资事件!注重细分领域深耕行业复苏趋势显现...

来源:机器人大讲堂2019年的投资就像是随着季节气候变化的,现在到了冬季,或许有些人等不到明年春天的回暖,但终究春天还是会来。机器人是继互联网热潮逐渐褪去后,投资人寻找到的新投资项目,科创板使得机器人…

项目管理论坛_【项目管理论坛】 第15期:如何做一名优秀的项目经理

点击上方蓝字关注中铁大桥局五公司企业是个人成长的平台,个人是企业发展的力量。心在一起,力出一孔。根据公司全年生产经营的“路线图”和“时间表”,围绕今年的任务目标,展开思考讨论,凝聚全员智慧,共同探…

单行文本与多行文本省略文本

一、单行文本省略 1.text-overflow:ellipsis;该属性用于当文本溢出的时候用省略号的方式显示。它还有一个属性值是clip(溢出部分直接裁剪掉)。 2.overflow:hidden;对溢出内容进行隐藏。 3.white-space:nowrap;强制在一行显示 二、多行文本省略 用-webkit…

推荐系统技术演进趋势:召回-排序-重排

来源:DataFunTalk导读:推荐系统技术,总体而言,与 NLP 和图像领域比,发展速度不算太快。不过最近两年,由于深度学习等一些新技术的引入,总体还是表现出了一些比较明显的技术发展趋势。这篇文章试…

ansbile简单应用

一、简介 Ansible is a radically simple configuration-management, application deployment, task-execution, and multinode orchestration engine. Design Principles Have a dead simple setup process and a minimal learning curve Be super fast & parallel by def…

世界上最顶尖的技术都在哪些国家?

文章来源:深度无聊半导体加工设备基本被日本,美国霸占。目前蚀刻设备精度最高的是日立。比如东丽,帝人的炭纤维,超高精密仪器,数控机床,光栅刻画机(这个最牛的也是日立,刻画精度达到…

Spring Boot Learning(模版引擎)

一. spring boot的web应用开发,是基于spring mvc 二. Spring boot 在spring默认基础上,自动配置添加了以下特性:1. 包含了ContentNegotiatingViewResolver和BeanNameViewResolver beans。2. 对静态资源的支持&#xff…

重磅!阿里达摩院发布《2020十大科技趋势》

来源:雷锋网2019年,是新兴科技发展史上的重要年份。 这一年,各大公司的AI、云计算、大数据走向下沉市场,空中博弈进入到地面作战,技术的商业化成为生意成败的重要考量。其间,产业与场景成为大漏斗&#xff…

下一个10年,可能改变世界的5项重大发现!真正革命性的进步

来源:博科园在过去的十年里,科学上出现了一些真正革命性的进步,从发现希格斯玻色子到使用CRISPR进行科幻风格的基因编辑。但是,还有哪些更大的突破还在后面呢?《Live Science》采访了所在领域的几位专家,他…

“不确定性问题”(Nondeterministic Problem,NP)与哥德尔不完全定理“

来源:柳渝科学网博客1931年哥德尔证明:任何无矛盾的公理体系,只要包含初等算术的陈述,则必定存在一个不可判定命题,用这组公理不能判定其真假。虽然哥德尔不完全定理只是针对包含数论的公理体系而言的,由于…

深度学习不能取代计算机视觉技术背后的真正原因

来源:电子发烧友深度学习只是一种计算机视觉工具,而不是包治百病的良药,不要因为流行就一味地使用它。传统的计算机视觉技术仍然可以大显身手,了解它们可以为你省去很多的时间和烦恼;并且掌握传统计算机视觉确实可以让…

win10控制面板快捷键_你没玩过的全新版本Win10,这些操作你知多少?

不知不觉,Windows 10与我们相伴已经整整四个年头了,从最开始的组团抗拒到现在的默默接受,个中滋味相信谁心里都有个数。近日微软开始推送“Win10更新五月版”,那么Win10中到底都有哪些“骚”操作?一起来看看吧。1、夜间…

1.编写登录接口

需求:.编写登录接口输入用户名密码认证成功后显示欢迎信息输错三次后锁定 # Author rendeleiwhile True: list1 [] list2 [] count int(3) f open("login.txt",‘w’) for line in f: hostname str(line.split(\t)…

吴恩达邀请9位AI大牛畅想2020:李开复看好医疗教育,LeCun强调自监督学习

来源:凹非寺2020,AI的研究会有哪些突破?2020,AI的应用又会有什么变化?吴恩达DeepLearning.ai旗下的THE BATCH刊物,分享了包括Yann LeCun、李开复、周志华、还有他们的老板吴恩达在内的10位AI大佬的新年寄语…

R pdf大小_限时免费获取 Mac上PDF压缩工具《Enolsoft PDF Compressor》

文章末尾有获取方式,按照以下步骤就能得到。我们不破解软件,所有优秀软件均来源于网络你的pdf文件太大使用不方便吗?赶紧来试试专业PDF压缩工具Enolsoft PDF Compressor破解版吧!可以快速的压缩PDF文件的大小,支持批量…