一些 MaxCompute 日常优化案例分享

一些MaxCompute日常优化案例分享

作者:开七

一、前言

MaxCompute 优化是一个多样而又重要的过程,优化过程中若能够深入理解 ODPS 的工作原理和内部机制,才能够更明确的发现运行过程中存在的问题,这样才能更有针对性地进行优化,优化需要不断思考和尝试不同的想法和方法,适当的时候我们可以寻求平台技术人员帮助,以找到最适合的优化方案。

以下通过日常几个优化案例,最终优化手段可能非常简单,但其中的分析过程较为重要,希望对他人有所启发。

二、dmj 针对多 union 的一种优化

任务内容:多个表 union all 后对其中的一些表进行 distmapjoin 关联。

任务线上经常报内存不够,以往处理基本是增加内存,内存到 8192 后则增加 shard_count 数量来减少内存使用,此种治标不治本的手段无法根治问题,仔细分析执行任务图发现,其中对应的加工逻辑有多个 union all +distmapjoin,导致不合理的执行图如下:

图中可以看出一份数据对应 4 次分发(主表有 union all 四份数据),个人分析一个 distmapjoin 对应多路分发不合理,合理应该分发一份,但个人无法处理,寻求平台人员:

经测试此参数无效,平台人员给出另一参数。

关键参数:

set odps.optimizer.union.split.enable=false;

效果:执行图变的更加清爽,相对原来 30 步变为 21 步。

修改前资源消耗:

修改后资源消耗:

小结:

由于消除了 union all 对应同一表多个 distmap 分发,最终运行 cu 及内存都减少一大半,整体运行稳定性提高。但我们开发任务时还是尽量不要加各种参数,去参数化也是平台人员的优化方向。

btw:关于参数设置带来收益问题可能很多人会有疑问,为什么平台不直接默认这些参数的合理设置,因为很多坏例子平台人员看到了而我们没有感知。当把这些坏例子消除则参数就不需要设置。

三、一个 json 解析参数的优化

前几天在针对一些计算资源较大任务排查时发现一任务曝光任务,任务整体执行一个小时,执行计划较简洁。

一千四百亿数据量运行一小时也问题不大,但当点击执行图中 M5 的详细内容如后

发现除读写外,project1 算子占比 64%(时间都花在这了),而且发现里面内容 get_json_object 调用 9 次,时间应该就是花在此处,记得多个 get_json_object 现在平台会自动转化为 GET_JSON_OBJECT_TUPLE,但此处的确没有。因此任务增加参数。

set odps.sql.udf.getjsonobj.new =true;

查看第二天任务运行情况,已转为 GET_JSON_OBJECT_TUPLE 批量取数,且 project1 算子占比出变成 34%。

效果:

执行时间对比:

加参数前:

加参数后:

整体可以看出,加参数前平均实例由 15 分钟变成 7 分钟,计算 cu 及内存将近下降一半,效果非常显著。

小结

优化的过程往往都不是什么高大上,建议正确的技能认知、有意识的发现及定位问题,解决问题可能就非常简单。

四、一个去 group by 操作的优化

一位同学咨询一个问题,由于数据量特别大,里面涉及数据膨胀且最终 group by 做汇总,整体消耗非常大,但发现 group by 前后数据量只有微小变化,因此沟通是否可以剔除 group by 操作。

而且此数据是先膨胀后,里面有非常多的字段行间是相同的,因此增加重排可能会有较好效果,因此建议同学对 sql 进行改写

最终结果

存储:

此处数据量由 600 亿变 900 亿不是因为剔除了 group by 操作,是因为当天业务量增长的变成造成,但可以看到,由于增加了局部重排,存储减少非常多。

时间:

小结

很多时候 group by 操作是否必要有业务要求,但也应该关注数据量的变化,一般情况需要考虑指数级别的数量减少,另外优化需要结合着多种手段,此处增加事中重排,存储减少带来收益的同时,下游读表的资源也将大大减少。最后的最后,若表只是简单 map 操作,那就变成简单加工,就应该考虑干掉这个任务或者视图替代了

总结

odps 性能优化是数据开发人员的必备技能,降低成本同时也能让乏味的工作有一丝丝乐趣。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Vue.js组件精讲 基础:Vue.js组件的三个API:prop、event、slot

如果您已经对 Vue.js 组件的基础用法了如指掌,可以跳过本小节,不过当做复习稍读一下也无妨。 组件的构成 一个再复杂的组件,都是由三部分组成的:prop、event、slot,它们构成了 Vue.js 组件的 API。如果你开发的是一个…

w1r3s 靶机学习

w1r3s 靶机学习 0x01 IP C for command kali ip 10.10.10.128victim ip 10.10.10.1290x02 开扫 C sudo nmap -sn 10.10.10.0/24-sn 多一步入侵和轻量级侦察 发送四项请求 -sL 列表扫描,多用于探测可用ip,广播扫描 –send-ip 时间戳请求&#xff0…

YOLOv7全网独家改进: 卷积魔改 | 变形条状卷积,魔改DCNv3二次创新

💡💡💡本文独家改进: 变形条状卷积,DCNv3改进版本,不降低精度的前提下相比较DCNv3大幅度运算速度 💡💡💡强烈推荐:先到先得,paper级创新,直接使用; 💡💡💡创新点:1)去掉DCNv3中的Mask;2)空间域上的双线性插值转改为轴上的线性插值; 💡💡💡…

JavaSE:预定义类,访问修饰符,Java面向对象的特征

预定义类 JDK提供的类就是预定义类 Date类,LocalDate类等 访问修饰符 Java提供了四种访问修饰符,访问范围从大到小是:public > protected > 缺省 > private public:不同包的不相关子类 protected:不同包…

一例Foxmail的发件错误问题及解决方案

问题 Foxmail发件时,提示“连接失败” 点击左上角“收取”也连接失败 解决方法 点击右上角三个横线: 再点击“设置”在“网络”中,看看默认代理是不是“不使用代理” 如果不是,选成第一个 再在“账号”里选择自己用的账号&a…

NLP在搜索召回领域中的应用场景

自然语言处理(NLP)在搜索召回领域中的应用场景非常广泛,它通过理解和分析人类语言,提高了信息检索的准确性和效率。以下是一些具体的应用场景: 1. 搜索引擎优化 NLP技术可以用于优化搜索引擎的查询处理,通…

Centos 下载地址

下载镜像地址: 1、官网地址:The CentOS Project 2、阿里镜像站:centos安装包下载_开源镜像站-阿里云 3、清华镜像源:Index of /centos/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror 3.、CentOS搜狐镜像&#xff1…

针对于OB_GINS的CMakeList文件的深入学习

Project()——配置项目信息 project(CMakeTemplate VERSION 1.0.0 LANGUAGES C CXX DESCRIPTION "A cmake template project") //通过project命令配置项目信息project(项目名称 VERSION major.minor.patch.tweak )CMake会将对应的值分别赋值给以下变量: PROJECT_VE…

家庭网络防御系统搭建-将NDR系统的zeek日志集成到securit yonion

在前面的文章中安装了zeek,这里,安装了securityonion,这里,本文讲述如何将zeek生成的日志发送到siem security onion之中。 所有日志集成的步骤分为如下几步: 日志收集配置日志发送接收日志解析配置日志展示配置 ZEEK日志收集配…

购买国外虚拟主机应该怎么支付

国外虚拟主机支付,大多接受visa信用卡支付方式,如果用一张visa信用卡相对会方便很多,此外像Skrill、PayPal、比特币等,部分虚拟主机服务商也接受,另外还有小部分服务商接受支付宝、微信形式。 美国虚拟主机&#xff0…

大厂高频面试题复习JAVA学习笔记-学习路线

对于应届生,要找到一份java工作,你得大概学会: java基础:javase、jvm、juc、gc、mysql、jdbc,计网计组 Java微服务基础Maven→Gradle→Spring6→SpringMVC→MyBatis→MyBatisPlus→SSM->Redis7->SpringBoot2-&…

matlab:有限差分求解纳维尔(Navier)边界的双调和(Biharmonic)方程,边值为零

我们考虑如下形式的双调和方程的数值解 其中,Ω是欧氏空间中的多边形或多面体域,在其中,d为维度,具有分段利普希茨边界,满足内部锥条件,f(x) ∈ L2(Ω)是给定的函数,∆是标准的拉普拉斯算子。算…

飞腾银河麒麟(ARM架构)离线安装MySql8.0.28版本

下载安装包 下载地址:https://downloads.mysql.com/archives/community/ 解压后上传到服务器(或者直接上传到服务器用tar -zxvf xxx.tar命令解压) 卸载mariadb 卸载命令:yum remove mariadb-server mariadb 检查是否还有未删除的包: rpm -…

计算机视觉——引导APSF和梯度自适应卷积增强夜间雾霾图像的可见性算法与模型部署(C++/python)

摘要 在夜间雾霾场景中,可见性经常受到低光照、强烈光晕、光散射以及多色光源等多种因素的影响而降低。现有的夜间除雾方法常常难以处理光晕或低光照条件,导致视觉效果过暗或光晕效应无法被有效抑制。本文通过抑制光晕和增强低光区域来提升单张夜间雾霾…

掌握网络抓取技术:利用RobotRules库的Perl下载器一览小红书的世界

引言 在信息时代的浪潮下,人们对于获取和分析海量网络数据的需求与日俱增。网络抓取技术作为满足这一需求的关键工具,正在成为越来越多开发者的首选。而Perl语言,以其卓越的文本处理能力和灵活的特性,脱颖而出,成为了…

LabVIEW厂房漏水检测监控系统

LabVIEW厂房漏水检测监控系统 随着信息技术和智能制造的快速发展,对于精密仪器和重要物品存放场所的环境监控日益重要,特别是防止漏水带来的潜在风险。漏水不仅可能导致珍贵资料或仪器的损坏,还可能引发安全事故,给企业和研究机构…

C语言 | 字符函数和字符串函数

目录: 1. 字符分类函数 2. 字符转换函数 3. strlen的使用和模拟实现 4. strcpy的使用和模拟实现 5. strcat的使用和模拟实现 6. strcmp的使用和模拟实现 7. strncpy函数的使用 8. strncat函数的使用 9. strncmp函数的使用 10. strstr的使用 11. strtok函…

数据库 06-03 时间戳,多版本MVCC,快照隔离,幻读

01.什么是时间戳 “时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数。通俗的讲, 时间戳是一份能够表示一份数据在一个特定时间点已经存在的完整的可验证的数据。 02.用时间戳实现调度 定义 数据库给予一个事务一个时…

美国B2987A是德科技静电计

181/2461/8938产品概述: 图形皮安计/静电计,可自信地测量低至0.01 fA和高达10 PΩ的电流 是德科技B2981A和B2983A毫微微/皮安计以及B2985A和B2985A静电计/高阻计不仅提供同类最佳的测量性能,还提供前所未有的功能来最大限度地提高您的测量信…

网络广播系统是什么?网络广播的作用及应用

网络广播系统是什么?网络广播的作用及应用 商场广播的目的:提醒人员有序、监控配合点对点呼叫、物品遗失广播、背景音乐防噪、紧急情况呼叫等等,各个场景有各个场景的需求模式,广播系统的建设重点在于突发情况的应对,国家已经把广…