天天看点

Spark企业级应用开发和调优1.Spark企业级应用开发和调优2.核心技术优化方法对比

spark项目编程优化历程记录,主要介绍了spark企业级别的开发过程中面临的问题和调优方法。包含合理分配分片,避免计算中间结果(大数据量)的collect,合理使用map,优化广播变量等操作,降低网络和磁盘io,提高计算效率。

首先如下图(2.1),spark应用开发在集群(伪分布式)中的记录,每一种不同颜色的折线代表一个分布式机器

最终,图4中四条折线并行达到峰值(即cpu100%).降低了处理时间,增大了处理效率.

Spark企业级应用开发和调优1.Spark企业级应用开发和调优2.核心技术优化方法对比
Spark企业级应用开发和调优1.Spark企业级应用开发和调优2.核心技术优化方法对比
Spark企业级应用开发和调优1.Spark企业级应用开发和调优2.核心技术优化方法对比
Spark企业级应用开发和调优1.Spark企业级应用开发和调优2.核心技术优化方法对比

spark之所以快速,一是分而治之,二是允许基于内存计算.

第一步,常用的构建一个分布式数据方式:

方式一:基于文件读取

textfile(name, minpartitions=none, use_unicode=true) 返回rdd,可以读取text本地文件,hdfs等等

方式二:基于内存读取

parallelize(c, numslices=none) 返回rdd,基于内存读取.

在项目模型中,计算模型将的x,y坐标<code>xyload = sc.parallelize(xyload)</code>通过内存读成rdd模式.

在处理弹性是分布式数据集之前,应该充分利用rdd本质的性质,rdd执行策略是懒操作,在转换和执行两个状态中,只有执行才会真正去计算,如将一个文件textfile至rdd,这个文件并没有做物理上的动作,而rdd只是逻辑映射,当执行college或者split等可以返回一个新rdd时,才会发生资源分配,计算.可以简单理解为,一个rdd转变成另个新的rdd时,才发生了真正的资源调度,计算,io等操作.

在项目中,

其中,

map

返回一个新的rdd,并对rdd中的每个元素做操作(如功能函数的运算或者定义的循环,针对的元素级别的)

在项目中,实现celllist循环操作,操作级别对弹性分布式元素中的每个元素.

filter(f)

返回一个新的rdd,包含满足功能函数的元素.

在项目中,实现返回cellist中元素去除none元素,保证rdd后续业务操作正确性.

rdd的collect操作可以实现元素级别的聚合,但是这个执行过程会造成单一driver大量io,内存占用过大,网络传输量大等等瓶颈.

所以,在getcellist方法后,将分布式持久化,然后再通过文件批量依次读取过程,避开driver开销过大的难题.

增加广播变量降低读写。适用于某变量需要反复使用,如在各个分片中都有一个数组固定的计算值,这个数组不要反复从文件读取而直接用广播变量,最大限度降低集群的io.

Spark企业级应用开发和调优1.Spark企业级应用开发和调优2.核心技术优化方法对比

由图5,在企业中开发spark应用,以接口的服务方式,第一次post大数据平台文件上传服务,上传所需的数据文件,二次post调用服务接口,传入spark分布式模型必备的参数,包括执行本次执行id,输入路径,输出路径.一期模型开始监控大数据平台执行返回的状态.

此时,基于每个rdd内存做计算,map操作得到getcellist,并通过filter去除脏数据(none),形成中间结果,分布式持久化,最后通过numpy依次读取持久化文件,并做排序后保存成最终结果.

图5 分布式spark模型的主要执行过程示意图

Spark企业级应用开发和调优1.Spark企业级应用开发和调优2.核心技术优化方法对比

最终,业务平台通过大数据平台监控得到执行成功状态信号,get最终结果文件至业务平台.