Spark
文章平均质量分 73
数据建筑师
做一个有输出的人。面对现实,忠于理想。老骥伏枥,志在千里。
展开
-
深入分析数据倾斜出现的原因与优化
目录数据倾斜发生时的现象数据倾斜发生的场景shuffle倾斜一、数据倾斜发生的原理二、数据倾斜的解决方案解决方案一:将reduce join转为map join解决方案二:过滤少数导致倾斜的key解决方案三:两阶段聚合(局部聚合+全局聚合)解决方案四:使用随机前缀和扩容RDD进行join输入倾斜一、数据倾斜发生的原理二、数据倾斜的解决方案膨胀倾斜一、数据倾斜发生的原理二、数据倾斜的解决方案数据倾斜发生时的现象绝大多数task执行得都非常原创 2023-11-26 21:37:16 · 1247 阅读 · 0 评论 -
大数据的小文件优化指引
如果结果文件的平均大小小于hive.merge.mapfiles设置的值,则额外启动一轮job进行小文件的合并,合并后的期望文件大小由max(hive.merge.size.per.task, hive.merge.smallfiles.avgsize)来决定。此时也需要在结果写入到hdfs之后启动一轮额外的任务来合并小文件,方法是使用distribute by 把相同分区的数据分发到相同的task中,如果一个分区用一个task会处理较多的数据,可以把一个分区散列成多个task来处理。原创 2023-05-04 20:16:06 · 222 阅读 · 0 评论 -
SparkUI超详细解释(7)——Debug
如果想看一个任务在不同时间点占用的executor数量,应该看numExistingExecutors数量,需要注意的是executor数量并不能等同于CU的用量,一方面是一个executor可能占用更多内存换算成CU会占用更多的CU,还可能是一个executor会占用多个core(通过设置spark.executor.cores)也会占用更多的CU。为方便用户查看任务执行期间申请的Executor数量,Spark UI增加了Debug页面。原创 2023-04-28 17:19:01 · 288 阅读 · 0 评论 -
SparkUI超详细解释(6)——SQL
DAG图,以图形的形式展示了整个作业的执行过程,每个色块代表了一种算子,WholeStageCodeGen是用动态代码生成的方式把几个算子转换成java函数,提升计算效率。在spark2.x可以通过coordinatorid来关联,spark3可以勾选stageid,也可用用过WholeStageCodeGen后面的数字来关联。sql页面的列表页罗列了提交到spark的所有sql,所有设置的参数,以及所有的创建临时函数的语句。1.如何从stage的DAG图关联到SQL的DAG图。有关SQL页面的自问自答。原创 2023-04-28 17:09:15 · 871 阅读 · 0 评论 -
SparkUI超详细解释(5)——Executors
executors页面展示了executor和driver的一些统计信息和明细信息,汇总信息包括内存、磁盘、cpu的使用量,任务执行时间、GC时间,成功、失败、完成的task数量,以及输入输出的数据量等内容。需要注意的是,这个页面中显示的内存使用和executor状态信息都是瞬时值,任务在执行过程中会一直变化,任务执行结束内存指标都会清零。executor和driver并不是物理上的机器,而是宿主在机器上的跑在jvm上的进程,这点从address也可以看出(机器名+端口号)原创 2023-04-27 12:27:23 · 650 阅读 · 0 评论 -
storage memory是什么意思,如何计算得出的
但是查看GC日志发现,oldgen的内存大小是固定的,但是eden、from和to的大小是动态变化的。storage memory,虽然名字看起来是存储内存的大小,但实际上由于spark1.6之后已经实现了统一内存管理(即执行内存和存储内存使用同一个统一内存),所以storage memory实际上是统一内存的大小,是sparkSQL中我们设置spark.executor.memory和spark.memory.fraction,在jvm中能够被用来计算和存储的内存。可以说是一点都不差!原创 2023-04-27 12:20:01 · 546 阅读 · 0 评论 -
SparkUI超详细解释(4)——Environment
的参数设置,可以在该页面查看(某些参数是xt默认提交,有些是集群默认设置,有些是spark hbo的自动调整等,都会和xt模板里人工设置的参数有所不同)。”,比如参数的“=”两边有空格,都会造成设置的参数不生效),所以当实际执行结果和预期不符时在这个页面check下是有必要的。有些特殊情况要注意,比如下图在设置spark.sql.shuffle.partitions参数时不小心少打一个s变成了一个错误的不存在的参数,在Environment页面依然能够看到这个参数,但实际上参数是不生效的。原创 2023-04-27 12:03:28 · 232 阅读 · 0 评论 -
SparkUI超详细解释(3)——Storage
比如我们经常写的with xxx as是把一段逻辑封装成一个虚拟表,但是真正在计算时,多次引用会多次触发这段逻辑计算,所以只是写起来精简,但执行上并没有一次运行多次复用。有时我们使用create [temporary] table来固话一段逻辑的结果也可以实现类似的效果,只不过cache table大多在内存中,访问速度会非常快,非常适合内存中的迭代计算。具体含义可以看下面的截图,大致分为内存对象、内存和磁盘、内存序列化、内存和磁盘序列化、磁盘、双副本、堆外内存。有关storage页面的自问自答。原创 2023-04-26 19:40:36 · 446 阅读 · 2 评论 -
SparkUI超详细解释(2)——Stages
推测的原因是这个stage对应的是以下面的代码,上下两个shuffle的key相同又有一次union all,所以可以放在一个stage中,虽然task数量是4000,但是上面的shuffle数据是分在2000个task中,下面的是另一个2000task中,并不会两者合在一起hash到4000个task中。”下的一些指标上,也可以看到相关信息,或更具体的说明。task的时间线,以条形图+不同颜色的方式描述了各个task的不同动作下的耗时,鼠标浮动到某个条形图上,可以看到该task具体的各项时间。原创 2023-04-26 19:35:11 · 2055 阅读 · 8 评论 -
SparkUI超详细解释(1)——Jobs
当遇到action算子时就会划分出一个新的job,action算子常见的有reduce、collect、count等,作者并没有找到和sql关键字的对应关系,笼统的说需要落盘存储的一般都是action算子。该时间不是所有job的执行时间之和(有并行的job,job与job之间也有时间间隔),也不是最后一个job的结束时间。可以,常见的如多个表join,每读一个表可能是一个job,多个表就是多个job,可以并行执行(前提是资源足够)job的划分没有太多的意义,可以不必关注,关注stage的划分更有意义。原创 2023-04-26 19:10:16 · 612 阅读 · 3 评论 -
【基本功】Spark常用参数详解
官网文档永远是最好的指导手册。原创 2023-04-24 19:52:59 · 1727 阅读 · 2 评论