山大软工实践hive(3)-算子做了什么

导数在工程与AI中的12个实战应用解析 导数作为数学中的基本概念,本质是描述变化率的工具,其核心价值在于将非线性问题局部线性化处理。从原理上看,通过极限过程捕捉函数瞬时变化特性,使工程师能精确控制系统动态行为,帮助科学家量化自然规律变化速率。在技术实现层面,现代符号计算(如Mathematica)、数值计算(如MATLAB)和自动微分(如PyTorch)工具链的发展,大幅提升了导数计算的效率与精度。典型应用场景涵盖机械控制(如ABS防抱死系统)、金融工程(如期权希腊值计算)、医疗影像(如Canny边缘检测)等领域。特别在机器学习中,反向传播算法依 阅读详情

2021SC@SDUSC

山大软工实践hive(3)-算子做了什么

目标

上一篇初步知道算子是什么,这一篇需要深入了解各算子

各算子

TS

扫描表以获取数据,但实际是Hadoop完成的表数据读取,该算子的作用是把从底层获取的数据传输给子节点处理

SEL

用于投影操作,对应select语句

FIL

用于投影,对应sql 的where语句

RS

mapReduce中间有个shuffle过程,实现map结果到reduce任务的映射采集,而RS算子实现了类似shuffle的功能,包括了数据采集(运用算法把数据分配给不同的reduce任务),排序方式(对数据按照key排序),输出数据

GBY

对应groupby

hive实现了两种聚合方式,而GBY基于这两种实现
1.hash聚合,用hash表把key值相同的数据聚合在一起(在读取表数据的时候通过hash表完成计算,避免了排序),不需要进行shuffle操作,但是只能做局部聚合,用于map端减少数据量,对应GBY->RS->GBY中第一个GBY
2.sort聚合,通过RS算子对数据排序分组,让具有相同key的数据被分到一组,然后对每组数据聚合。对应GBY->RS->GBY中第二个GBY

如果同时用groupby 与 orderby,则计算会用sort聚合(顺便排序)

基于hash聚合的实现


散列因子=散列条目数/总数,如果小于定的最小值(如0.5),则代表聚集效果不好,(如0.5时平均每个散列条目对应2条数据),则需要放弃hash转而使用sort聚合,这是用hashAggr变量区分。然后就进行局部聚合。对应下面的代码

在GBY process方法中的一段
 if (numRowsHashTbl > numRowsInput * minReductionHashAggr) {
          LOG.warn("Disable Hash Aggr: #hash table = " + numRowsHashTbl
              + " #total = " + numRowsInput + " reduction = " + 1.0
              * (numRowsHashTbl / numRowsInput) + " minReduction = "
              + minReductionHashAggr);
          flushHashTable(true);
          hashAggr = false;
          }
          
在 processKey方法中一段
 if (hashAggr) {
      newKeys.setHashKey();
      processHashAggr(row, rowInspector, newKeys);  对应hash聚合
    } else {
      processAggr(row, rowInspector, newKeys);  对应sort聚合
    }
基于sort聚合的实现


currentKey为groupby 分组中该分组的key值,newKey则是每次父节点传的条目对应的key值,也就是说,一旦newKey!=currentKey,就代表该组已完成,可以输出结果。反之,不断合并输入的局部聚合的结果
在process方法中进行了对newKeys的计算,而在processAggr中,进行了currentKey与newKey的比较,代码如下

processAggr中
boolean keysAreEqual = (currentKeys != null && newKeys != null)?
        newKeys.equals(currentKeys) : false;
        
    if (currentKeys != null && !keysAreEqual) {
      
      if (!conf.isDontResetAggrsDistinct()) {
        forward(currentKeys.getKeyArray(), aggregations);
        countAfterReport = 0;
      }
    }
实际过程

hashGBY负责把数据分开地进行局部聚合,通过RS算子 传输给sortGBY,然后全局聚合得到结果,比如

select id,count(word) from a group by id

元组形式如(0,a),(1,b)


这解释了为什么会有GBY->RS->GBY的结构

关于局部聚合

比如原本聚合数据中有相同key的数据,在key前面加上数字变成如1_key,2_key,再对这些数据聚合,得到(1_key,value1),(2_key,value2)。这一部分是局部聚合
之后去除前面部分,变成(key,value1),(key,value2),再对数据聚合,得到最终结果。这部分是全局聚合
之所以要这样两阶段聚合,是为了防止数据倾斜(给某个任务节点分配的数据太多,导致性能下降)
上面是一种实现方式,至于hive应该是直接把数据分发给不同的map节点进行聚合,而不需要添加字段内容

JOIN

对应表的join运算


RS对数据分组排序,并且加上标签以区分数据来自哪个表,然后再由join算子进行join运算

不过JOIN算子有很多种如CommonJoinOperator,CommonMergeJoinOperator等等,这将在下一节区分

下一步

算子源码分析得并不详细,因为一难以找到上层谁调用该方法,二找到了也不知道上层在干嘛,三是变量方法太多了,如果不参考别人博客的解析,实在寸步难行。所以下一步做什么主要看参考博客下一步做什么。

参考

魔鬼_的博客

jiayuanv_127的博客

Vue3 与 Bpmn-js:打造现代化 BPMN 流程设计器 随着业务流程的复杂化,流程设计器成为企业级应用中不可或缺的一部分。BPMN(Business Process Model and Notation)是一种标准的业务流程建模语言,广泛应用于业务流程管理。本文将介绍如何使用 Vue3 和 Bpmn-js 打造一个现代化的 BPMN 流程设计器。 阅读详情

相关推荐

嵌入式下载故障排查:ST-LINK与GD32 Programmer典型问题解决

嵌入式固件烧录是MCU开发的关键环节,其本质依赖于调试器(如ST-LINK、GD-Link)与目标芯片间的协议通信、驱动加载及硬件接口协同。原理上,SWD/JTAG协议需在正确时序、电平与供电条件下完成设备枚举、ID读取与Flash编程;技术价值在于保障量产烧录稳定性与调试可重复性;典型应用场景涵盖STM32/GD32教学开发、工业控制板量产调试及Windows 11新系统适配。本文聚焦ST-LINK-V2在Keil MDK中的下载失败和GD32 All In One Programmer的DLL加载异常两

weixin_35006125的博客 153

hive 配置参数说明

hive.exec.mode.local.auto 决定 Hive 是否应该自动地根据输入文件大小,在本地运行(在GateWay运行) true hive.exec.mode.local.auto.inputbytes.max 如果 hive.exec.mode.local.auto 为 true,当输入文件大小小于此阈值时可以自动在本地模式运行,默

chaoping315的专栏 4万+

利用 Openocd 和 FT2232H 实现 ARMv8(Coretex-A53)高效调试方案

本文详细介绍了如何利用开源工具OpenOCD与高性能USB转接芯片FT2232H,构建一套针对ARMv8架构(如Cortex-A53)的高效、低成本调试方案。内容涵盖从环境搭建、驱动配置、核心调试架构解析到实战问题排查的全过程,帮助开发者实现对多核处理器的透明、可控调试,是嵌入式Linux及底层开发的实用指南。

weixin_29163581的博客 280

数仓Hive基础调优

引言 此篇文章主要针对hive在执行hql时候,所面临的执行效率慢、数据倾斜、jobs任务过多情况进行分析调优;由于本人也是初次了解hive调优方面知识,在网上也查阅了很多资料,写下此篇文章也是为了巩固自己的知识点及能够与各位同学相互交流学习。以下本人会针对配置参数、HQL语句两个方面进行相关调优说明,另外在优化过程中,需要结合业务逻辑去优化会达到事半功倍的效果,后续会陆续更新此方面知识。 ...

Monstar_L的博客 953

NXP实战笔记(十五):32K3xx基于RTD-SDK在S32DS上安装HSE之后,进行AB SWAP功能实现OTA升级。

1.HSE 切换服务相关的变量,要放在合理的内存空间,可以参照HSE 安装的潜在失败原因分析。例如,在切换过程中,存在下面的变量,如果不放在dtcm或者no-cable的话,可能会导致切换不成功(非常重要)。链接文件里面设置2.连续两次操作,间隔时间太短,一般认为小于1s.如果连续两次切换,会导致程序死掉。但是重新上电reset之后,程序仍然会执行切换后block的程序。解释如下图:3.切换时未获取SU权限。但在实际的项目工程中,经调试发现如果不获取SU权限,也可以实现。

梦想技术家 3114

泛微E8流程监控指南:如何用SQL实时追踪审批节点状态?

本文详细介绍了如何利用SQL实时监控泛微E8系统中的审批流程状态,包括核心数据表结构解析、全链路监控SQL实战以及智能预警机制设计。通过数据库直接查询和状态关联分析,帮助企业快速定位卡顿节点,提升流程效率。适用于需要优化OA系统流程管理的企业IT人员和业务主管。

weixin_30687051的博客 438

山大软工实践hive(4)-join算子

2021SC@SDUSC 标题 文章目录标题杂碎common joinMap joinBucketMapJoinSMB joinSkew Join参考 杂碎 hive支持等值join,但不支持非等值join,也就是涉及<>的比较在join后进行 common join 在Mapper阶段读取表的数据转换为键值对,经过shuffle让有相应key的输出到相应Reducer 在JoinOperator process方法中 // The input is sorted by alias

meloneatingguy的博客 300

ensp企业网综合实验(课程设计)

使用MSTP+VRRP技术实现负载均衡以及增加网络的可靠性;出口配置napt;所有用户均为自动获取IP地址;

qq_50829760的博客 1万+

山大软工实践hive(11)-ConstantPropagate优化器的流程

2021SC@SDUSC

meloneatingguy的博客 367

实战指南:轻松破解DataDome滑块验证码的关键步骤

本文详细介绍了破解DataDome滑块验证码的关键步骤,包括理解其工作原理、准备工作、参数获取与配置、完整破解流程及API调用。通过使用Capsolver服务和模拟真实用户行为,帮助开发者有效绕过这一反机器人机制,同时强调了法律与道德考量。

weixin_30415113的博客 481

生成对抗网络——CGAN(代码+理解)

CGAN(Conditional Generative Adversarial Network)模型是一种 深度学习模型,属于生成对抗网络(GAN)的一种 变体。它的 基本思想是通过 训练生成器和判别器两个网络,使生成器能够生成与给定条件 相匹配的 合成数据,而判别器则 负责区分真实数据和 生成数据。相比于GAN它引入了条件信息(y),使得生成器可以生成与给定条件相匹配的合成数据,从而提高了生成数据的可控性和针对性。

CXDNW的博客 1万+

山大软工实践hive(5)-逻辑优化(1)

2021SC@SDUSC 逻辑优化 逻辑优化,顾名思义,就是通过调整语句的执行顺序,或者优化语句,减少时间、内存上的开销。许多思路与普通数据库的查询优化一样。根据这一阶段输入输出都是DAG,可以认为是用过调整DAG的结构达到目的。 几种方式 参考他人博客有以下几种方式 谓词下推 让选择运算优先执行,比如 select 1 from a join b on a.id=b.id where a.id=5 and b.id>10,会优先执行a.id=5与b.id>10,然后再进行join操作,因为jo

meloneatingguy的博客 881

31、双相不锈钢直齿轮加工与性能研究及人工神经网络在焊接中的应用

本文研究了双相不锈钢直齿轮在不同加工方法(WEDM与滚齿加工)下的磨损行为,分析了表面粗糙度、齿厚变化、磨损率及润滑性能随转速的变化规律,并对比了两种工艺的优劣。同时,探讨了人工神经网络(ANN)在AA7050铝合金搅拌摩擦焊中的应用,通过建立工艺参数与焊接质量之间的预测模型,实现了对焊缝硬度和峰值温度的准确预测。研究为高性能齿轮制造和铝合金焊接提供了理论支持和技术参考,并提出了未来在润滑优化、加工工艺改进及智能控制方面的研究方向。

ggg99的专栏 150

山大软工实践hive(7)-查看各优化器内容

2021SC@SDUSC 山大软工实践hive(7)-查看各优化器内容 文章目录山大软工实践hive(7)-查看各优化器内容ConstantPropagate PointLookupOptimizer PartitionColumnsSeparator ConstantPropagate 这个意外地眼熟,对应的是常量折叠3种的逻辑优化(在第5篇提到),能看出它的优化形式是从根节点遍历DAG ...

meloneatingguy的博客 1554

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

山大软工实践hive(10)-transform方法流程结束

2021SC@SDUSC 山大软工实践hive(10)- dispatch方法的后半部分 在我查看的这个优化器的transform方法里,defaultProc是null,不过这里rule多半不是null,如下 proCtx为null proc在这里只能取到FilterTransformer,它是该优化器的内部类 然后下下它调用了该类的process方法 可以看到除了nd其他都没有被使用 这个方法里要先解决这些标记荧光的地方是干什么的 继承了Node,可以看做是Node的扩展。里面的重点变量是 Ty

meloneatingguy的博客 1216

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

山大软工实践hive(9)-dispatch关于minCost的计算

2021SC@SDUSC 山大软工实践hive(9)-dispatch关于minCost的计算 文章目录山大软工实践hive(9)-dispatch关于minCost的计算从DefaultRuleDispatcher开始以上内容的总结接下来 上一节说到要去看dispatcher,并已经梳理了大致步骤,现在要去理解。 从初始化看是DefaultRuleDispatcher 从DefaultRuleDispatcher开始 追踪dispatcher.dispatch(nd, ndStack, nodeOutp

meloneatingguy的博客 790

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

山大软工实践hive(12)-逻辑优化过程中的六种基础接口的作用与关系的梳理

2021SC@SDUSC 逻辑优化过程中的六种基础接口的梳理 Node,Rule,GraphWalker,Dispatcher,NodepPocessor,NodepPocessorCtx

meloneatingguy的博客 1563

山大软工实践hive(2)-解析输入(OPTree是什么)

2021SC@SDUSC 魔鬼博客1,4推理 源码operator执行顺序分析 序列化反序列化 transient “Hive的本质是一条SQL生成的一系列Operators,并执行它们 每个Operators的原理和适应条件,决定查询的性能 这里的代码是” ...

meloneatingguy的博客 394

Hive的多机 AI Agent 协同看板实战:跨机留言、任务搁置、计划跟踪的三个设计取舍

本文介绍多机AI Agent协同系统Hive的三项关键设计取舍:跨机留言采用内存+本地文件存储,避免Git版本冲突与延迟;搁置状态主动释放资源并保留历史,通过按钮而非新增列管理,保持看板简洁;任务计划以Tab形式聚合任务,实现项目级进度追踪。核心原则是“能用文件解决就不加数据库,能复用界面就不新增层级”,所有功能均在零依赖前提下实现高可用与易用性。附带一次/api/plans 404排查,揭示了配置与路由匹配的深层陷阱,具有普遍参考价值。

skywalk8163的专栏 540

解决 java.lang.NoSuchMethodError 报错

NoSuchMethodError 是 Spring Boot 项目中因编译与运行时类版本不一致引发的典型链接错误。本质是方法签名在运行时缺失,常见于依赖冲突、框架升级或缓存残留。排查需定位实际加载类路径,通过 ProtectionDomain 或 Arthas 工具(sc、sm、jad)确认类来源与方法存在性,再结合依赖树分析(如 mvn dependency:tree)排除版本冲突,最终强制统一依赖版本解决。

小李同学的博客 269

Hive——把 Git 变成 AI Agent 的任务总线

Hive将Git仓库变为多机AIAgent协作的轻量任务总线,通过Git原子性实现无锁任务抢占,无需调度服务或数据库。总控写任务卡,Worker在独立worktree中抢卡执行,结果推回仓库,全程审计可溯。近期强化鲁棒性:引入租约持久化、世代计数器与化身号机制,支持故障恢复与宽限期,使极简架构真正可扛真实场景。适配CLI/GUI/人工操作,跨平台兼容,零运维成本。适合用Git管理代码的团队快速构建可靠协作系统。项目地址:github.com/skywalk163/hive。

skywalk8163的专栏 252

ubuntu安装hive

本文介绍基于Hive 4.0.1、Java 8与MapReduce的Hive分布式环境搭建流程:在master节点安装Hive、MySQL并配置元数据存储,通过HDFS保存数据;worker节点复用现有YARN资源。重点包括环境准备、Java 8与MySQL安装、Hive下载配置、JDBC驱动部署、Hive-site.xml连接设置及元数据库初始化。全程以dyl用户操作,确保兼容Hadoop 3.4.3,最终实现单机Hive服务运行,为后续分布式查询验证奠定基础。

qq_43592674的博客 294

ZArchiver安卓压缩解压缩工具下载安装

ZArchiver是一款功能强大的安卓文件压缩工具,支持7z、zip、rar、tar、iso等多种格式的压缩与解压,兼容Unicode文件名(UTF-8),完美显示中文不乱码。具备多线程加速、密码保护、分卷压缩包处理等功能,可创建和解压带密码的压缩文件,优化多核处理器性能,适用于日常高效管理文件。

hflmwl的博客 566

【SQL 数据分析知识点:Hive 差异、窗口函数】

本文通过5张表的小型数据集,系统梳理数仓开发中的高频陷阱与核心技能:分区字段遗漏导致全表扫描(Hive vs MySQL差异)、GROUP BY与窗口函数的本质区别(行数不变、贴列计算)、排序三件套(ROW_NUMBER/RANK/DENSE_RANK)的适用场景,并提炼出“开窗→过滤→聚合”的通用解题骨架,涵盖分组TopN、连续登录等五类经典题型,强调真实业务中排序兜底、口径对齐的重要性,助力高效精准的数据分析。

春风若有怜花意,可否许我再少年 314

【大数据处理与分析】数据仓库Hive:09 Hive 编程实践

本文介绍Hive的数据类型(基本类型与ARRAY、MAP、STRUCT集合类型)和基本操作,并通过WordCount实例说明Hive编程比MapReduce更简洁易用。

Morse_Chen的博客 263

服务器和windows客户端重启后,发现agent连不上lightmem和hive mcp了

服务器重启后,lightmem无法连接PostgreSQL(192.168.0.88:18444),日志显示connectECONNREFUSED。排查发现PG服务正常、jail运行中、bridge0成员齐全,但netstat -Iepair10a -b显示收包为0、错误计数持续增长,且arp无响应。最终定位为FreeBSD vnet jail的epair虚拟网卡在重启后“二次入狱”,导致跨vnet转发失效。修复方法:销毁并重建epair对,确保ifconfig epairXa up。同时发现lightme

skywalk8163的专栏 702
上一篇: 山大软工实践hive(2)-解析输入(OPTree是什么)
下一篇: 山大软工实践hive(4)-join算子
meloneatingguy
博客等级 码龄7年 1粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值