当前位置: 首页 > 科技观察

你知道Spark性能调优的核心原理吗?

时间:2023-03-17 20:32:38 科技观察

一直在用spark这么久,今天总结一下它的一些核心优化原理,今天从几个方面讲一下:1.RDDRDD是elasticdistributeddataset的缩写,是一个后来者。比如DataFrame、DataSet等基础。他有四个核心属性,如下图。这四种属性可以分为两类,水平属性和垂直属性。其中,horizo??ntal属性锚定数据分片实体,指定数据分片在分布式集群中的分布方式。利用垂直属性在深度方向构造DAG,通过提供重构RDD的容错能力保证内存计算的稳定性。其实RDD还有一个特点:优先位置列表。算起来,它一共有5大特点。大白话概括就是:3个列表,2个函数。三个列表分别是分区列表、依赖列表和优先位置列表;这两个函数是:计算函数和分区函数。2.内存计算在Spark中,内存计算有两个含义:第一个含义是众所周知的分布式数据缓存,第二个含义是stage中的流水线计算模式。流水线计算模式是指:在同一个stage内,将所有算子融合成一个函数,stage的输出结果由这个函数一次性作用于输入数据集产生。所谓内存计算,不仅仅意味着数据可以缓存在内存中,更重要的是通过计算的融合,可以大大提高数据在内存中的转换效率,从而提高应用程序整体的执行性能.比如这个栗子:如图所示,在上面的计算过程中,如果把管道当做内存,每一步操作之后都会产生临时数据,比如图中的clean和slice,而这些临时数据会缓存在内存中。但是在后面的内存计算中,会将clean、slice、bake等所有操作步骤揉在一起,形成一个函数。该函数一次性作用于“土豆配土豆泥”,直接生成“即食薯片”,无需在内存中生成任何中间数据形式。补充:从程序员的角度来看,DAG的构建是通过在分布式数据集上不断调用算子完成的。DAG从Actions算子开始,从后面回溯到前面,以Shuffle操作为界,分为不同的Stages。同一阶段的所有算子被融合成一个函数,该阶段的输出结果由这个函数一次性作用于输入数据集产生。