Spark企业级应用开发和调优
1.Spark企业级应用开发和调优
Spark项目编程优化历程记录,主要介绍了Spark企业级别的开发过程中面临的问题和调优方法。包含合理分配分片,避免计算中间结果(大数据量)的collect,合理使用map,优化广播变量等操作,降低网络和磁盘IO,提高计算效率。
2.核心技术优化方法对比
首先如下图(2.1),Spark应用开发在集群(伪分布式)中的记录,每一种不同颜色的折线代表一个分布式机器
最终,图4中四条折线并行达到峰值(即CPU100%).降低了处理时间,增大了处理效率.
2.1.重要并行计算模型构建对比
图1 传统方式计算模型在模拟集群计算概览图
图2 spark并行模型1在模拟集群并行计算概览图
图3 spark并行模型2在模拟集群并行计算概览图
图4 spark并行模型3在模拟集群并行计算概览图
2.2.Spark优化技术要点
2.2.1.如何构建一个合理的弹性分布式数据集(RDD)
Spark之所以快速,一是分而治之,二是允许基于内存计算.
第一步,常用的构建一个分布式数据方式:
- 方式一:基于文件读取
- textFile(name, minPartitions=None, use_unicode=True) 返回RDD,可以读取text本地文件,HDFS等等
sc.textFile("file:///native/dir")
sc.textFile("/HDFS/dir")
- 方式二:基于内存读取
- parallelize(c, numSlices=None) 返回RDD,基于内存读取.
sc.parallelize([0, 2, 3, 4, 6], 5).glom().collect()
在项目模型中,计算模型将的x,y坐标xyload = sc.parallelize(xyload)通过内存读成RDD模式.
2.2.2.如何处理一个弹性分布式数据集
在处理弹性是分布式数据集之前,应该充分利用RDD本质的性质,RDD执行策略是懒操作,在转换和执行两个状态中,只有执行才会真正去计算,如将一个文件textFile至RDD,这个文件并没有做物理上的动作,而RDD只是逻辑映射,当执行college或者split等可以返回一个新RDD时,才会发生资源分配,计算.可以简单理解为,一个RDD转变成另个新的RDD时,才发生了真正的资源调度,计算,IO等操作.
在项目中,
cellist=xyload.map(getCellList)
cellisttxt = cellist.filter(lambda x : x != None)
其中,
- map
map(f, preservesPartitioning=False)
返回一个新的RDD,并对RDD中的每个元素做操作(如功能函数的运算或者定义的循环,针对的元素级别的)
在项目中,实现Celllist循环操作,操作级别对弹性分布式元素中的每个元素.
- filter(f)
cellisttxt = cellist.filter(lambda x : x != None)
返回一个新的RDD,包含满足功能函数的元素.
在项目中,实现返回cellist中元素去除None元素,保证RDD后续业务操作正确性.
2.2.3.如何优化处理数据过大的中间结果
RDD的collect操作可以实现元素级别的聚合,但是这个执行过程会造成单一driver大量IO,内存占用过大,网络传输量大等等瓶颈.
所以,在getcellist方法后,将分布式持久化,然后再通过文件批量依次读取过程,避开driver开销过大的难题.
2.2.4.广播变量的合理使用
增加广播变量降低读写。适用于某变量需要反复使用,如在各个分片中都有一个数组固定的计算值,这个数组不要反复从文件读取而直接用广播变量,最大限度降低集群的IO.
3.大数据模型开发历程
由图5,在企业中开发Spark应用,以接口的服务方式,第一次post大数据平台文件上传服务,上传所需的数据文件,二次post调用服务接口,传入Spark分布式模型必备的参数,包括执行本次执行ID,输入路径,输出路径.一期模型开始监控大数据平台执行返回的状态.
此时,基于每个RDD内存做计算,map操作得到getcellist,并通过filter去除脏数据(None),形成中间结果,分布式持久化,最后通过numpy依次读取持久化文件,并做排序后保存成最终结果.
图5 分布式Spark模型的主要执行过程示意图
最终,业务平台通过大数据平台监控得到执行成功状态信号,get最终结果文件至业务平台.
Spark企业级应用开发和调优的更多相关文章
- 【Spark深入学习 -14】Spark应用经验与程序调优
----本节内容------- 1.遗留问题解答 2.Spark调优初体验 2.1 利用WebUI分析程序瓶颈 2.2 设置合适的资源 2.3 调整任务的并发度 2.4 修改存储格式 3.Spark调 ...
- 浅谈Spark应用程序的性能调优
浅谈Spark应用程序的性能调优 :http://geek.csdn.net/news/detail/51819 下面列出的这些API会导致Shuffle操作,是数据倾斜可能发生的关键点所在 1. g ...
- (转)Spark性能优化:资源调优篇
在开发完Spark作业之后,就该为作业配置合适的资源了.Spark的资源参数,基本都可以在spark-submit命令中作为参数设置.很多Spark初学者,通常不知道该设置哪些必要的参数,以及如何 ...
- 【转载】 Spark性能优化:资源调优篇
在开发完Spark作业之后,就该为作业配置合适的资源了.Spark的资源参数,基本都可以在spark-submit命令中作为参数设置.很多Spark初学者,通常不知道该设置哪些必要的参数,以及如何设置 ...
- Spark性能优化:资源调优篇(转)
在开发完Spark作业之后,就该为作业配置合适的资源了.Spark的资源参数,基本都可以在spark-submit命令中作为参数设置.很多Spark初学者,通常不知道该设置哪些必要的参数,以及如何设置 ...
- Spark性能优化--数据倾斜调优与shuffle调优
一.数据倾斜发生的原理 原理:在进行shuffle的时候,必须将各个节点上相同的key拉取到某个节点上的一个task来进行处理,比如按照key进行聚合或join等操作.此时如果某个key对应的数据量特 ...
- Spark性能优化:shuffle调优
调优概述 大多数Spark作业的性能主要就是消耗在了shuffle环节,因为该环节包含了大量的磁盘IO.序列化.网络数据传输等操作.因此,如果要让作业的性能更上一层楼,就有必要对shuffle过程进行 ...
- Spark性能优化:资源调优篇
在开发完Spark作业之后,就该为作业配置合适的资源了.Spark的资源参数,基本都可以在spark-submit命令中作为参数设置.很多Spark初学者,通常不知道该设置哪些必要的参数,以及如何设置 ...
- 基于CDH 5.9.1 搭建 Hive on Spark 及相关配置和调优
Hive默认使用的计算框架是MapReduce,在我们使用Hive的时候通过写SQL语句,Hive会自动将SQL语句转化成MapReduce作业去执行,但是MapReduce的执行速度远差与Spark ...
随机推荐
- [NodeJS]Jenkins-cli
使用npm 包nestor 触发jenkins job, 达到命令行管理Jenkins功能. 1. install nestor : npm install -g nestor 2. set JENK ...
- php7 中?? 和 ?:的区别
$b = $a?? $c ;相当于$b= isset($a)?$a:$c; $b = $a?: $c ;则是 $b = !empty($a) ? $a:$c;
- dubbo核心流程一览
整体设计 图中从下至上分为十层,各层均为单向依赖,右边的黑色箭头代表层之间的依赖关系,每一层都可以剥离上层被复用,其中,Service 和 Config 层为 API,其它各层均为 SPI. Serv ...
- Vue-cli3 WARNING in asset size limit: The following asset(s) exceed the recommended size limit (244 KiB)
在vue.config.js里 添加 configureWebpack : { performance: { hints:'warning', //入口起点的最大体积 整数类型(以字节为单位) max ...
- 文献综述十七:基于 sql环境下超市管理系统的设计与实现
一.基本信息 标题:基于 sql环境下超市管理系统的设计与实现 时间:2018 出版源:智能计算机与应用 文件分类:uml技术的研究 二.研究背景 从超市管理系统的实际应用出发,在系统分析过程中,从功 ...
- 浏览器在初始化JS 环境时都发生了些什么
原文:https://segmentfault.com/a/1190000005754797 1.用 C/C++ 构造内部数据结构创建一个 OP 即(Object.prototype)以及初始化其内部 ...
- (转)expect命令脚本语言介绍及生产实践
原文:http://www.fblinux.com/?p=526 Expect介绍 expect是一个用来实现自动交互功能的软件套件,是用来实现自动和交互式任务程序进行通信,无需人的手工干预.比如SS ...
- centos 7安装phpMyadmin
1.phpmyadmin官网下载多语言包 2.找到libraries目录下的config.default.php1)查找$cfg['PmaAbsoluteUri'] 设置默认访问网址 2)查找$cfg ...
- hadoop命令详解
一.用户命令1.archive命令 (1).什么是Hadoop archives?Hadoop archives是特殊的档案格式.一个Hadoop archive对应一个文件系统目录. Hadoop ...
- 架构实战项目心得(六):后台服务nosql数据库mongodb
一.架构介绍 mongodb有几种部署方式,这里采用的是副本集架构(Replica Set). 为了防止单点故障就需要引副本(Replication),当发生硬件故障或者其 ...