
spark
文章平均质量分 76
Deegue
这个作者很懒,什么都没留下…
展开
-
Spark用HiveUDF get_json_object内存泄漏问题
1、问题背景首先我们支持Spark使用HiveUDF的实现,在某个任务中,executor GC时间普遍非常长,而Hive同样逻辑就没有问题。选取GC过长的一个executor,dump下内存,发现UDFJson对象非常大:于是推测其中存在内存泄漏。2、问题排查本文代码为社区Spark master分支a834dba120在解析SQL时我们可以看到注册UDF函数入口Analyzer.scala:发现函数注册提供qualifiedName以及不覆盖已注册的函数SessionCatalog原创 2020-11-17 16:53:20 · 923 阅读 · 1 评论 -
Spark 3.0 - AQE浅析 (Adaptive Query Execution)
1、前言近些年来,在对Spark SQL优化上,CBO是最成功的一个特性之一。CBO会计算一些和业务数据相关的统计数据,来优化查询,例如行数、去重后的行数、空值、最大最小值等。Spark根据这些数据,自动选择BHJ或者SMJ,对于多Join场景下的Cost-based Join Reorder(可以参考之前写的这篇文章),来达到优化执行计划的目的。但是,由于这些统计数据是需要预先处理的,会过时,所以我们在用过时的数据进行判断,在某些情况下反而会变成负面效果,拉低了SQL执行效率。AQE在执行过程中原创 2020-06-03 16:32:55 · 12862 阅读 · 0 评论 -
Spark Codegen原理分析
1、背景Spark Codegen是在CBO&RBO后,将算子的底层逻辑用代码来实现的一种优化。具体包括Expression级别和WholeStage级别的Codegen。2、举例说明① Expression级别:摘一个网上的例子:x + (1 + 2)用scala代码表示:Add(Attribute(x), Add(Literal(1), Literal(2)))语法树如...原创 2020-04-22 19:13:01 · 2052 阅读 · 0 评论 -
Spark CBO CostBasedJoinReorder源码解析
1、背景最近听到阿里大神分享,讲到Spark CBO中的JoinReorder处理inner join优化,用了动态规划+遗传算法,于是处于好奇,看了一下源码,这篇博客作为记录。2、CodeCostBasedJoinReorder入口,只匹配inner join,然后reorderreorder中树的深度在(2,`spark.sql.cbo.joinReorder.dp...原创 2019-01-05 11:04:10 · 1897 阅读 · 0 评论 -
Spark Adaptive Execution
最近遇到了很多spark性能优化的问题,刚好找到了一篇比较全面的总结,但没有给出具体实现方法。所以这边打算罗列一下计划优化的点,慢慢抽时间研究、优化,最后打算应用到公司业务中,并争取贡献到spark社区。----------------------------------------------------------------------------------------------...原创 2018-10-25 17:03:07 · 4705 阅读 · 1 评论 -
Spark常用算子
Spark的算子的分类 从大方向来说,Spark 算子大致可以分为以下两类: 1)Transformation 变换/转换算子:这种变换并不触发提交作业,完成作业中间过程处理。 Transformation 操作是延迟计算的,也就是说从一个RDD 转换生成另一个 RDD 的转换操作不是马上执行,需要等到有 Action 操作的时候才会真正触发运算。 2)...转载 2018-09-14 17:21:03 · 14196 阅读 · 0 评论 -
Spark执行计划分析与研究
在学习、使用和研究spark的过程中,逐渐会发现:单纯看官方文档对spark参数调优只能解决一小部分的问题,要想进一步的学习spark,进一步调优甚至在spark源码的基础上二次开发,我觉得收益最高的应该是学习执行计划了。因此在研究spark源码之前,学习执行计划 可以对整个spark执行过程、架构设计都有一个初步的认识。然而国内网站各大博客,都没有找到一个相关入门教程,笔者打算利用空余时...原创 2018-09-18 11:24:30 · 20649 阅读 · 5 评论 -
Spark RDD与Partion
一、RDD的概述1.1 什么是RDD?RDD(Resilient Distributed Dataset)叫做弹性分布式数据集,是Spark中最基本的数据抽象,它代表一个不可变、可分区、里面的元素可并行计算的集合。RDD具有数据流模型的特点:自动容错、位置感知性调度和可伸缩性。RDD允许用户在执行多个查询时显式地将工作集缓存在内存中,后续的查询能够重用工作集,这极大地提升了查询速度。...原创 2018-09-18 11:22:30 · 11621 阅读 · 0 评论 -
Spark性能优化之Whole-stage code generation
一、技术背景 Spark1.x版本中执行SQL语句,使用的是一种最经典,最流行的查询求职策略,该策略主要基于 Volcano Iterator Model(火山迭代模型)。一个查询会包含多个Operator,每个Operator都会实现一个接口,提供一个next()方法,该方法返回Operator Tree的下一个Operator,能够让查询引擎组装任意Operator,而不需要去考虑每...原创 2018-09-17 16:57:58 · 3926 阅读 · 0 评论 -
Spark 统一内存管理模型详解
堆内内存(On-heap Memory)默认情况下,Spark 仅仅使用了堆内内存。Executor 端的堆内内存区域大致可以分为以下四大块:Execution 内存:主要用于存放 Shuffle、Join、Sort、Aggregation 等计算过程中的临时数据 Storage 内存:主要用于存储 spark 的 cache 数据,例如RDD的缓存、unroll数据; 用户内存(Us...转载 2018-09-17 15:24:59 · 16091 阅读 · 3 评论 -
Spark DAG与RDD
1、DAGDAG图中,每个节点都是RDD窄依赖(也叫narrow依赖)从父RDD角度看:一个父RDD只被一个子RDD分区使用。父RDD的每个分区最多只能被一个Child RDD的一个分区使用从子RDD角度看:依赖上级RDD的部分分区 精确知道依赖的上级RDD分区,会选择和自己在同一节点的上级RDD分区,没有网络IO开销,高效。窄依赖包括:OneToOneDepen...原创 2018-09-17 13:45:02 · 7282 阅读 · 1 评论 -
broadcast hash join和sort merge join
Join操作是数据库和大数据计算中的高级特性,大多数场景都需要进行复杂的Join操作,本文从原理层面介绍了SparkSQL支持的常见Join算法及其适用场景。Join背景介绍Join是数据库查询永远绕不开的话题,传统查询SQL技术总体可以分为简单操作(过滤操作-where、排序操作-limit等),聚合操作-groupby以及Join操作等。其中Join操作是最复杂、代价最大的操作类型,也...转载 2018-10-26 14:02:35 · 603 阅读 · 0 评论 -
Spark执行流程与原理
Spark执行计划分析:https://blog.youkuaiyun.com/zyzzxycj/article/details/82704713-----------先贴一张sql解析的总流程图:第一次看这图可能还不是很理解,先看一个简单sql:select * from heguozi.payinfo where pay = 0 limit 10当这个sqlText,到...原创 2018-11-06 16:36:12 · 7618 阅读 · 0 评论 -
Spark Catalyst 缓存机制
1、背景Spark SQL 用thriftserver去接,使用的时候,经常会出现找不到hdfs上xxx文件,需要手动refresh table相关的表的情况。今天偶然看到Spark Catalyst中的相关代码,突然眼前一亮,摸索着看下去,终于得到了真香。2、代码中的实现步骤位于org.apache.spark.sql.catalyst.catalog包下的Session...原创 2018-12-21 17:51:15 · 1476 阅读 · 1 评论 -
使用Relational Cache加速Spark数据分析
本文转自云栖社区,作者:李呈祥(司麟)文中的Spark为阿里云EMR产品的Spark,博主之前也考虑过类似的问题,受到了一些启发,所以转载分享一下。背景Cache被广泛应用于数据处理的各个领域和方向上,在目前,计算速度远远大于IO访问速度依然是计算设备上最突出的矛盾,计算设备上的存储从HDD -> SSD -> NVMe -> Mem -> L3-L2-L1 Cach...转载 2019-06-03 19:43:58 · 884 阅读 · 0 评论 -
记一次Spark SQL问题排查的经历
起因分析师A:哇 你们这个数据查询平台查Spark ,同样的SQL结果每次都不同,这能用?我:???第一反应是你八成是在查一张,别人在更新数据的表吧。。(同个SQL也会去跑两遍 小声bb)排查过程过了一会儿,分析师A:看了半天了没人动数据啊,你这个Spark有问题吧?一脸蒙逼,开始排查问题。首先把SQL copy执行了下,果然每次都不一样,查了下源表 也没人在变更。SQL如下:se...原创 2019-06-19 17:50:33 · 1429 阅读 · 0 评论 -
记一次Spark ThriftServer Bug排查
问题描述我们在用Spark ThriftServer(以下简称STS)用在查询平台时,遇到了以下报错:ERROR SparkExecuteStatementOperation: Error executing query, currentState RUNNING,org.apache.spark.sql.AnalysisException: org.apache.hadoop.hive.q...原创 2019-07-01 15:22:08 · 2575 阅读 · 0 评论 -
Spark Dynamic Allocation 源码解析
为什么研究Dynamic Allocation的源码?在线上任务执行的过程中,有些任务占用着Yarn资源却并行度极低,比如申请了100核cpu(现象持续时间超过了executor idle time),但那个stage只有9个running task。最关键的是,在Spark-SQL中,Dynamic Allocation可以说是必用功能之一。因此知晓其原理才能更好的理解Spark动态资源调度...原创 2019-07-22 20:36:24 · 713 阅读 · 0 评论 -
Spark Skew Join Optimization
数据倾斜在分布式计算中是一个很常见的问题,Spark提供了一种比较便捷的方法来处理一些简单的数据倾斜场景。Spark中定位数据倾斜1、找到耗时长的stage并确定为shuffle stage。2、给所有的task按照shuffle records排序,找到最多数据的task。3、比较其他的task确定是否发生了倾斜。4、根据业务逻辑,Spark执行计划,找到倾斜的key。单表skew...原创 2019-08-01 16:23:22 · 938 阅读 · 2 评论 -
记一次多线程并发问题的排查
背景最近在做离线batch任务执行的中间件,目标将线上所有的批任务都接过来,以便Hive向Spark迁移,对任务整个链路追踪(从开始预执行,到执行引擎选择,到执行日志收集,到执行完成后结果分析 是否倾斜等等)。在做自适应选择执行引擎的时候,定义了一个proposer,里面写了一些规则,来决定使用Spark还是Hive。现象在大量并发提交任务时,会出先proposer不生效的情况,应该用H...原创 2019-08-27 17:06:09 · 960 阅读 · 0 评论 -
spark 数据倾斜调优
数据倾斜应该算是一个比较麻烦的问题,笔者也是刚刚开始学习相关的调优,将看到的比较全面、清晰的几种解决方案整合了一下,并加上了一些理解与心得,供参考!首先,需要对spark执行计划有一定的基础与理解,区分若干的stage进行的不同的操作,并且将数据倾斜问题定位到某个stage是非常关键的,之后就是根据不同业务场景进行相应的处理与调优了。以下内容部分摘自:https://www.iteblog...原创 2018-09-03 11:53:21 · 4242 阅读 · 0 评论 -
spark 参数调优11-Spark Streaming
spark参数调优系列 目录地址:https://blog.youkuaiyun.com/zyzzxycj/article/details/81011540 11 Spark Streamingspark.streaming.backpressure.enabled反压,默认false,详细了解请移步https://blog.youkuaiyun.com/zyzzxycj/article/detai...原创 2018-09-05 17:50:32 · 7910 阅读 · 0 评论 -
Spark Streaming 反压(Back Pressure)机制介绍
背景在默认情况下,Spark Streaming 通过 receivers (或者是 Direct 方式) 以生产者生产数据的速率接收数据。当 batch processing time > batch interval 的时候,也就是每个批次数据处理的时间要比Spark Streaming 批处理间隔时间长;越来越多的数据被接收,但是数据的处理速度没有跟上,导致系统开始出现数据堆积,可...转载 2018-09-04 16:38:00 · 5399 阅读 · 0 评论 -
Spark参数调优详解目录
Spark参数调优需要对各个参数充分理解,没有一套可以借鉴的参数,因为每个集群规模都不一样,只有理解了参数的用途,调试出符合自己业务场景集群环境,并且能在扩大集群、业务的情况下,能够跟着修改参数才算是正确的参数调优。本系列文章仅为个人理解与观点,如果任何地方有疑问与错误,欢迎评论指正!(上次更新时间---2018-09-0515:07)1、背景Spark2.2.1版本(现升级到了...原创 2018-07-12 10:30:30 · 15576 阅读 · 1 评论 -
spark作业调度原理
概述 spark有多种方式调度各个计算所需的资源. 首先,每个application(即sparkContext实例)有一组独立的Executor进程。各种cluster manager(yarn Resource manager,standalone master等等)为application间的调度提供自己的方式。 其次,一个applicatio...原创 2018-05-31 15:21:52 · 4956 阅读 · 0 评论 -
Zeppelin 搭建遇到的若干坑
最近搭建zeppelin,单独起了一台spark-thriftserver,进行hive库的查询。遇到了N多坑,这边记录一下几个主要的地方。当然,有zeppelin相关的疑问也欢迎在文末评论!1、无法启动 有好多种可能,详细可以查看/logs中得日志。可能是没有创建Log/Pid目录。可能是没有正确安装JDK,或者版本不对。确认JDK和系统版本:(我用的zeppel...原创 2018-06-21 16:56:42 · 20951 阅读 · 3 评论 -
Hive on Spark 搭建&踩坑
背景:想通过jdbc连接hive的方式,用spark引擎,hive的数据,来处理业务需求。环境:一台1C2G的ECS,渣渣机器;需要搭建集群的只需要更改yarn、slaves的配置即可。接下来肯定会关注的问题就是版本了,版本的选择有千千万万种,这边的参考版本可在下面的参考配置中获得。最关键的就是版本的匹配了,之前瞎配,最后会导致各种无法解决的问题。所以还是在动手前,先好好看看官方文档吧。Hive和...原创 2018-05-10 15:40:27 · 9167 阅读 · 0 评论 -
spark 持久化 cache和persist的区别
cache和persist都是用于将一个RDD进行缓存的,这样在之后使用的过程中就不需要重新计算了,可以大大节省程序运行时间。cache和persist的区别基于Spark 1.4.1 的源码,可以看到/** Persist this RDD with the default storage level (`MEMORY_ONLY`). */def cache(): this.type = pe...原创 2018-04-20 17:23:45 · 4381 阅读 · 0 评论 -
spark 参数调优1-Application Properties 应用基本属性
spark参数调优系列 目录地址:https://blog.youkuaiyun.com/zyzzxycj/article/details/81011540 ① Application Properties 应用基本属性spark.driver.cores driver端分配的核数,默认为1,thriftserver是启动thriftserver服务的机器,资源充足的话可以尽量给...原创 2018-08-31 14:36:32 · 14088 阅读 · 0 评论 -
spark 参数调优2-Runtime Environment 运行环境
spark参数调优系列 目录地址:https://blog.youkuaiyun.com/zyzzxycj/article/details/81011540 ② Runtime Environment 运行环境主要是一些日志,jvm参数的额外配置,jars等一些自定义的配置,稍后会完善这一块的内容。...原创 2018-08-31 14:39:42 · 11931 阅读 · 1 评论 -
spark 参数调优3-Shuffle Behavior
spark参数调优系列 目录地址:https://blog.youkuaiyun.com/zyzzxycj/article/details/81011540 ③ Shuffle Behavior spark.reducer.maxSizeInFlight默认48m。从每个reduce任务同时拉取的最大map数,每个reduce都会在完成任务后,需要一个堆外内存的缓冲区来存放结果,如果没有...原创 2018-08-31 14:41:19 · 12518 阅读 · 0 评论 -
Spark org.apache.spark.shuffle.FetchFailedException: Too large frame: xxxxxxxx
报错如下:FetchFailed(BlockManagerId(92, hadoop1136.prod.2dfire.info, 7337, None), shuffleId=4, mapId=42, reduceId=42, message=org.apache.spark.shuffle.FetchFailedException: Too large frame: 2292863140...原创 2018-08-24 19:19:15 · 10569 阅读 · 0 评论 -
spark 参数调优10-Dynamic Allocation动态分配
spark参数调优系列 目录地址:https://blog.youkuaiyun.com/zyzzxycj/article/details/81011540 ⑩ Dynamic Allocation 动态分配spark.dynamicAllocation.enabled是否开启动态资源配置,根据工作负载来衡量是否应该增加或减少executor,默认false以下相关参数:spar...原创 2018-08-31 15:19:48 · 32201 阅读 · 0 评论 -
spark 参数调优9-Scheduling调度
spark参数调优系列 目录地址:https://blog.youkuaiyun.com/zyzzxycj/article/details/81011540 ⑨ Schedulingspark.scheduler.maxRegisteredResourcesWaitingTime在执行前最大等待申请资源的时间,默认30s。spark.scheduler.minRegisteredRe...原创 2018-08-31 14:50:44 · 10938 阅读 · 0 评论 -
spark 参数调优8-Networking网络
spark参数调优系列 目录地址:https://blog.youkuaiyun.com/zyzzxycj/article/details/81011540 ⑧ Networkingspark.rpc.message.maxSizeexecutors和driver间消息传输、map输出的大小,默认128M。map多可以考虑增加。spark.driver.blockManager.po...原创 2018-08-31 14:48:59 · 13064 阅读 · 0 评论 -
spark 参数调优7-Executor behavior
spark参数调优系列 目录地址:https://blog.youkuaiyun.com/zyzzxycj/article/details/81011540 ⑦ Executor behaviorspark.broadcast.blockSizeTorrentBroadcastFactory中的每一个block大小,默认4m过大会减少广播时的并行度,过小会导致BlockManager...原创 2018-08-31 14:48:00 · 21115 阅读 · 0 评论 -
spark 参数调优6-Memory Management内存管理
spark参数调优系列 目录地址:https://blog.youkuaiyun.com/zyzzxycj/article/details/81011540 ⑥ Memory Managementspark.memory.fraction执行内存和缓存内存(堆)占jvm总内存的比例,剩余的部分是spark留给用户存储内部源数据、数据结构、异常大的结果数据。默认值0.6,调小会导致频繁...原创 2018-08-31 14:45:40 · 13070 阅读 · 0 评论 -
spark 参数调优5-Compression and Serialization压缩与序列化
spark参数调优系列 目录地址:https://blog.youkuaiyun.com/zyzzxycj/article/details/81011540 ⑤ Compression and Serializationspark.broadcast.compress广播变量前是否会先进行压缩。默认true (spark.io.compression.codec)spark.io....原创 2018-08-31 14:44:27 · 20122 阅读 · 0 评论 -
spark 参数调优4-Spark UI
spark参数调优系列 目录地址:https://blog.youkuaiyun.com/zyzzxycj/article/details/81011540 ④ Spark UI这一块配置,是有关于spark日志的。日志开关,日志输出路径,是否压缩。还有一些可视化界面、端口的配置 ,之后会完善。...原创 2018-08-31 14:42:47 · 8814 阅读 · 0 评论