0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Spark优化:小文件合并的步骤

如意 来源:segmentfault.com 作者:华为云开发者社区 2020-08-13 17:53 次阅读

我们知道,大部分Spark计算都是在内存中完成的,所以Spark的瓶颈一般来自于集群(standalone, yarn, mesos, k8s)的资源紧张,CPU网络带宽,内存。Spark的性能,想要它快,就得充分利用好系统资源,尤其是内存和CPU。有时候我们也需要做一些优化调整来减少内存占用,例如将小文件进行合并的操作。

一、问题现象

我们有一个15万条总数据量133MB的表,使用SELECT * FROM bi.dwd_tbl_conf_info全表查询耗时3min,另外一个500万条总数据量6.3G的表ods_tbl_conf_detail,查询耗时23秒。两张表均为列式存储的表。

大表查询快,而小表反而查询慢了,为什么会产生如此奇怪的现象呢?

二、问题探询

数据量6.3G的表查询耗时23秒,反而数据量133MB的小表查询耗时3min,这非常奇怪。我们收集了对应的建表语句,发现两者没有太大的差异,大部分为String,两表的列数也相差不大。

CREATE TABLE IF NOT EXISTS `bi`。`dwd_tbl_conf_info` ( `corp_id` STRING COMMENT ‘’, `dept_uuid` STRING COMMENT ‘’, `user_id` STRING COMMENT ‘’, `user_name` STRING COMMENT ‘’, `uuid` STRING COMMENT ‘’, `dtime` DATE COMMENT ‘’, `slice_number` INT COMMENT ‘’, `attendee_count` INT COMMENT ‘’, `mr_id` STRING COMMENT ‘’, `mr_pkg_id` STRING COMMENT ‘’, `mr_parties` INT COMMENT ‘’, `is_mr` TINYINT COMMENT ‘R’, `is_live_conf` TINYINT COMMENT ‘’ ) CREATE TABLE IF NOT EXISTS `bi`。`ods_tbl_conf_detail` ( `id` string, `conf_uuid` string, `conf_id` string, `name` string, `number` string, `device_type` string, `j_time` bigint, `l_time` bigint, `media_type` string, `dept_name` string, `UPDATETIME` bigint, `CREATETIME` bigint, `user_id` string, `USERAGENT` string, `corp_id` string, `account` string )

因为两张表均为很简单的SELECT查询操作,无任何复杂的聚合join操作,也无UDF相关的操作,所以基本确认查询慢的应该发生的读表的时候,我们将怀疑的点放到了读表操作上。通过查询两个查询语句的DAG和任务分布,我们发现了不一样的地方。

查询快的表,查询时总共有68个任务,任务分配比如均匀,平均7~9s左右,而查询慢的表,查询时总共1160个任务,平均也是9s左右。如下图所示:

Spark优化:小文件合并的步骤

至此,我们基本发现了猫腻所在。大表6.3G但文件个数小,只有68个,所以很快跑完了。而小表虽然只有133MB,但文件个数特别多,导致产生的任务特别多,而由于单个任务本身比较快,大部分时间花费在任务调度上,导致任务耗时较长。

那如何才能解决小表查询慢的问题呢?

三、业务调优

那现在摆在我们面前就存在现在问题:

为什么小表会产生这么小文件 已经产生的这么小文件如何合并

带着这两个问题,我们和业务的开发人员聊了一个发现小表是业务开发人员从原始数据表中,按照不同的时间切片查询并做数据清洗后插入到小表中的,而由于时间切片切的比较小,导致这样的插入次数特别多,从而产生了大量的小文件。

那么我们需要解决的问题就是2个,如何才能把这些历史的小文件进行合并以及如何才能保证后续的业务流程中不再产生小文件,我们指导业务开发人员做了以下优化:

使用INSERT OVERWRITE bi.dwd_tbl_conf_info SELECT * FROM bi.dwd_tbl_conf_info合并下历史的数据。由于DLI做了数据一致性保护,OVERWRITE期间不影响原有数据的读取和查询,OVERWRITE之后就会使用新的合并后的数据。合并后全表查询由原来的3min缩短到9s内完成。 原有表修改为分区表,插入时不同时间放入到不同分区,查询时只查询需要的时间段内的分区数据,进一步减小读取数据量。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • cpu
    cpu
    +关注

    关注

    68

    文章

    10437

    浏览量

    206527
  • 数据库
    +关注

    关注

    7

    文章

    3590

    浏览量

    63365
  • SPARK
    +关注

    关注

    1

    文章

    99

    浏览量

    19727
收藏 人收藏

    评论

    相关推荐

    Spark基于DPU Snappy压缩算法的异构加速方案

    使 Spark 在某些工作负载方面表现得更加优越。换句话说,Spark 启用了内存分布数据集,除了能够提供交互式查询外,它还可以优化迭代工作负载。Spark SQL是
    的头像 发表于 03-26 17:06 205次阅读
    <b class='flag-5'>Spark</b>基于DPU Snappy压缩算法的异构加速方案

    RDMA技术在Apache Spark中的应用

    背景介绍 在当今数据驱动的时代,Apache Spark已经成为了处理大规模数据集的首选框架。作为一个开源的分布式计算系统,Spark因其高效的大数据处理能力而在各行各业中广受欢迎。无论是金融服务
    的头像 发表于 03-25 18:13 1067次阅读
    RDMA技术在Apache <b class='flag-5'>Spark</b>中的应用

    基于DPU和HADOS-RACE加速Spark 3.x

    背景简介 Apache Spark(下文简称Spark)是一种开源集群计算引擎,支持批/流计算、SQL分析、机器学习、图计算等计算范式,以其强大的容错能力、可扩展性、函数式API、多语言支持(SQL
    的头像 发表于 03-25 18:12 928次阅读
    基于DPU和HADOS-RACE加速<b class='flag-5'>Spark</b> 3.x

    下载bin文件步骤是什么?

    下载bin文件步骤是什么?求大神指教
    发表于 02-04 08:58

    请问如何防止tasking将const变量合并

    编译中发现tasking将const变量值相同的变量合并了,先去掉一些优化选项还是不起作用,只能改变const变量的值,是不是有什么编译选项可以去掉这个优化或者功能?
    发表于 02-02 08:07

    KT148A语音芯片智能锁扩展语音地址以及如何支持大量小文件的打包

    智能锁的语音播放需求中,有很多需要多国语言合并在一起的需求 其中语音文件数多,并且每个语音文件小的特点 如果使用OTP的语音芯片,就很麻烦,因为用户不可烧录,调试也很繁琐 同时大容量的又很贵
    的头像 发表于 01-16 11:52 142次阅读
    KT148A语音芯片智能锁扩展语音地址以及如何支持大量<b class='flag-5'>小文件</b>的打包

    将外部sql文件导入MySQL步骤

    将外部sql文件导入MySQL是一项非常常见的操作,它允许我们将事先准备好的数据或数据库结构导入到MySQL数据库中。本文将详细介绍该过程的步骤,并提供一些实用的技巧和注意事项。 在开始之前,我们
    的头像 发表于 11-21 11:00 588次阅读

    如何合并生成的esp8266固件为一个文件?

    如何合并生成的esp8266固件为一个文件
    发表于 11-10 07:24

    二进制文件合并工具软件PackagingTool

    本帖最后由 harchy 于 2023-12-6 14:35 编辑 PackagingTool软件介绍: 该软件可进行多个二进制文件合并,可以打包bin档、字库dot档、jpg、avi
    发表于 11-09 22:24

    如何在COMSOL中优化合并解?

    在COMSOL中,使用多个模型是优化合并解的第一个步骤。您可以创建多个模型以探索不同的参数和方案。每个模型都可以保存在不同的文件中,并在需要时进行加载和分析。确保您在每个模型中定义和优化
    的头像 发表于 10-29 11:35 551次阅读

    Yonghong Desktop端Excel 数据集的优化

    优化,提升Excel 数据集使用体验。赶快来试试看有没有你想要的功能吧。 01 Excel 数据集支持同时上传多个文件,多个文件可以“合并为一个数据集”,也可以“生成多个数据集”。 “
    的头像 发表于 09-08 11:13 284次阅读
    Yonghong Desktop端Excel 数据集的<b class='flag-5'>优化</b>

    NVIDIA 携手腾讯开发和优化 Spark UCX 实现性能跃升

    腾讯网络平台部与数据平台部,联合 NVIDIA 合作开发和优化 Spark UCX,最终实现 Spark Shuffle 稳定加速 15% - 20%,平均降低现网 Spark 任务
    的头像 发表于 08-25 20:50 421次阅读
    NVIDIA 携手腾讯开发和<b class='flag-5'>优化</b> <b class='flag-5'>Spark</b> UCX 实现性能跃升

    在zynq调试更新xsa文件步骤有哪些?

    在zynq调试时,经常需要更新xsa文件,更新步骤如下
    的头像 发表于 08-14 09:14 697次阅读
    在zynq调试更新xsa<b class='flag-5'>文件</b>的<b class='flag-5'>步骤</b>有哪些?

    Spark ML算法提供GPU加速度

    新的 GPU 库降低了 Apache Spark ML 的计算成本
    的头像 发表于 07-05 16:30 574次阅读
    为<b class='flag-5'>Spark</b> ML算法提供GPU加速度

    HSE安全启动(S32K31x)合并srec文件要怎么操作?

    如果我创建安全引导加载程序“srec 文件”或“elf 文件”并且还有另一个应用程序“srec 文件”。 如何合并
    发表于 05-04 08:04