spark开发及调优
一、spark开发调优
1.避免重复RDD
- 原则一:避免创建重复的RDD
- 对同一份数据,只应该创建一个RDD,不能创建多个RDD来代表同一份数据
- 极大浪费内存
2.尽可能复用RDD
- 原则二:尽可能复用同一个RDD
- 比如:一个RDD数据格式是key-value,另一个是单独value类型,这两个RDD的value部分完
全一样,这样可以复用达到减少算子执行次数
- 比如:一个RDD数据格式是key-value,另一个是单独value类型,这两个RDD的value部分完
3.多次使用的RDD持久化
原则三:对多次使用的RDD进行持久化处理
- 每次对一个RDD执行一个算子操作时,都会重新从源头处理计算一遍,计算出那个RDD出来,然后进一步操作,这种方式性能很差
- 对多次使用的RDD进行持久化,将RDD的数据保存在内存或磁盘中,避免重复劳动
- 借助cache()和persist()方法
原则三:对多次使用的RDD进行持久化处理
- persist持久化级别
- persist持久化级别
4.避免shuffle
- 原则四:避免使用shuffle类算子
- 在spark作业运行过程中,最消耗性能的地方就是shuffle过程
- 将分布在集群中多个节点上的同一个key,拉取到同一个节点上,进行聚合和join处理,比如
groupByKey、reduceByKey、join等算子,都会触发shuffle
- Broadcast+map的join操作,不会导致shuffle操作,但前提适合RDD数据量较少时使用
5.map-side预聚合
- 原则五:使用map-side预聚合的shuffle操作
- 一定要使用shuffle的,无法用map类算子替代的,那么尽量使用map-site预聚合的算子
- 思想类似MapReduce中的Combiner
- 可能的情况下使用reduceByKey或aggregateByKey算子替代groupByKey算子,因为
reduceByKey或aggregateByKey算子会使用用户自定义的函数对每个节点本地相同的key进行
预聚合,而groupByKey算子不会预聚合
6.使用Kryo优化序列化性能
- 原则六:使用Kryo优化序列化性能
- Kryo是一个序列化类库,来优化序列化和反序列化性能
- Spark默认使用Java序列化机制(ObjectOutputStream/ ObjectInputStream API)进行序列化和反序列化
- Spark支持使用Kryo序列化库,性能比Java序列化库高很多,10倍左右
7.数据倾斜解决方案
1、提高shuffle操作的并行度。
2、使用随机数前缀进行Join操作。对key增加随机数。
3、将reduce join转为map join。
4、过滤少数导致数据倾斜的 key。如null值数据。
5、使用hive预处理数据。
6、使用两阶段聚合操作。
7、单独处理倾斜的key
8、rangepartioner+key转换处理
二、spark开发环境准备
1.提交spark任务准备:如开发spark_wordcount
(1)SBT编译器安装
安装包: sbt-0.13.15.tgz
(2)拷贝spark-assembly-1.6.0-hadoop2.6.0.jar
- 创建文件
[root@master spark_test]# mkdir -p spark_wordcount/lib
[root@master spark_test]# mkdir -p spark_wordcount/project
[root@master spark_test]# mkdir -p spark_wordcount/src
[root@master spark_test]# mkdir -p spark_wordcount/target
[root@master spark_test]# mkdir -p spark_wordcount/src/main/scala
- 拷贝spark-assembly-1.6.0-hadoop2.6.0.jar到spark_wordcount/lib目录下
(3)编译
- 写完code后,执行编译:
- ]# sbt compile
(4)打包
- 执行打包命令:
- ]# sbt package
(5)提交任务
- spark-submit命令
- yarn cluster:调试后在集群跑任务,适用于生产模式
- yarn client:适用于交互和调试
- Driver在任务提交机上运行
- AM(ApplicationMaster)只负责向RM(ResourceManager)申请executor需要的资源。
- 基于yarn时,spark-shell和pyspark必须要使用yarn-client模式。
- yarn cluster和yarn client唯一的区别:cluster模式是AM在RM指定的NM上运行,哪个空闲哪个概率大;client模式是AM运行在提交任务的节点上。
- 示例
- spark进程
- Yarn(通用)
- Master/Slave结构
- RM:全局资源管理器,负责系统的资源管理和分配
- NM:每个节点上的资源和任务管理器
- AM:每个应用程序都有一个,负责任务调度和监视,并与RM调度器协商为任务获取资源
- Master/Slave结构
- Standalone(Spark自带)
- Master/Slave结构
- Master:类似Yarn中的RM
- Worker:类似Yarn中的NM
- Master/Slave结构
- Yarn(通用)
(6)杀死任务
- 另外:杀死一个任务的方法:
- ]# yarn application -kill application_1491925179093_0012
2.使用IDEA配置spark运行环境运行WordCount
(1)安装scala插件、添加scala sdk
- 安装scala插件
- file-setting-plugins搜索scala安装
- file-setting-plugins搜索scala安装
- 添加scala sdk
(2)配置SDK、JDK
- 添加jdk:file-project Structure-Project SDK
新建maven项目
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.adihs</groupId><artifactId>wordcount_spark</artifactId><version>1.0-SNAPSHOT</version><properties><scala.version>2.11</scala.version><spark.version>2.0.2</spark.version></properties><dependencies><dependency><groupId>org.apache.spark</groupId><artifactId>spark-core_2.11</artifactId><version>${spark.version}</version></dependency><dependency><groupId>org.apache.spark</groupId><artifactId>spark-streaming_2.11</artifactId><version>${spark.version}</version></dependency><dependency><groupId>org.apache.spark</groupId><artifactId>spark-sql_2.11</artifactId><version>${spark.version}</version></dependency><dependency><groupId>org.apache.spark</groupId><artifactId>spark-hive_2.11</artifactId><version>${spark.version}</version></dependency><dependency><groupId>org.apache.spark</groupId><artifactId>spark-mllib_2.11</artifactId><version>${spark.version}</version></dependency></dependencies>
</project>
三、其他博客
1.sparksql操作hive
spark开发及调优相关推荐
- Spark开发性能调优
Spark开发性能调优 标签(空格分隔): Spark –Write By Vin 1. 分配资源调优 Spark性能调优的王道就是分配资源,即增加和分配更多的资源对性能速度的提升是显而易见的,基本上 ...
- Spark系列之Spark的资源调优
title: Spark系列 第十一章 Spark的资源调优 11.1 概述 在开发完Spark作业之后,就该为作业配置合适的资源了.Spark的资源参数,基本都可以在sparksubmit命令中 ...
- spark 资源参数调优
资源参数调优 了解完了Spark作业运行的基本原理之后,对资源相关的参数就容易理解了.所谓的Spark资源参数调优,其实主要就是对Spark运行过程中各个使用资源的地方,通过调节各种参数,来优化资源使 ...
- Apache Spark Jobs 性能调优(二)
Apache Spark Jobs 性能调优(二) 调试资源分配 调试并发 压缩你的数据结构 数据格式 在这篇文章中,首先完成在 Part I 中提到的一些东西.作者将尽量覆盖到影响 Spark 程序 ...
- Apache Spark Jobs 性能调优(一)
Apache Spark Jobs 性能调优(一) Spark 是如何执行程序的 选择正确的 Operator 什么时候不发生 Shuffle 什么情况下 Shuffle 越多越好 二次排序 结论 当 ...
- Spark的性能调优
下面这些关于Spark的性能调优项,有的是来自官方的,有的是来自别的的工程师,有的则是我自己总结的. 基本概念和原则 首先,要搞清楚Spark的几个基本概念和原则,否则系统的性能调优无从谈起: 每一台 ...
- Spark RDD JOIN 调优
Spark RDD JOIN 调优 一. 大表关联小表 1. 小表数据量非常小时 一般当副表的数据比较小时,可以考虑将这部分的小表数据直接加载到内存中,如加工成为一个Map 结构的对象,在使用的时候将 ...
- Spark+Alluxio性能调优十大技巧
戳蓝字"CSDN云计算"关注我们哦! 由于统一访问对象存储(如S3)和HDFS数据的场景的出现和普及,Apache Spark结合Alluxio的大数据栈越来越受欢迎.此外,越来越 ...
- Apache Spark Jobs 性能调优
当你开始编写 Apache Spark 代码或者浏览公开的 API 的时候,你会遇到各种各样术语,比如transformation,action,RDD(resilient distributed d ...
最新文章
- 用什么服务器开发小程序,开发小程序用什么服务器系统
- GitHub:TensorFlow、PyTorch最全资料集锦
- 【Groovy基础系列】 Groovy运算符
- LinuxC下获取UDP包中的路由目的IP地址和头标识目的地址
- Android技术博文
- NIO和BIO如何影响应用程序的设计-设置处理线程数
- android jxl.jar 使用,使用jxl.jar在Android中操作Excel表格——重中之重——对隐藏表的处理...
- c++设置一个二维字符组初值_C语言 | 统计一段话中的字符
- 雷军:哈哈哈哈哈哈 网友:小米9要来了!
- 遍历字段_以字段覆盖标准指导的高效测试生成技术
- MTK6589百度云ROM移植教程
- web day2 作业
- 毕业设计 单片机心率检测器设计与实现 - stm32
- Debian - Add the checking mail notification - mutt
- Matlab填充多边形
- 导航栏保持居中并使用swiper作为轮播图进行背景轮播背景
- AI人工智能图片无损放大软件,这软件神了
- C语言编程题—结构体—设计程序,已知学生的记录由学号和学习成绩构成,N名学生的数据已存入a结构体数组中。请编写函数 fun:找出成绩最低的学生记录,通过形参返回主函数(规定只有一个最低分
- Linux 下的网卡配置文件解析
- MPEG DASH MPD文件字段解释
热门文章
- 浅谈 Facade 模式
- spo2数据集_氧仪主要测量指标分别为脉率、血氧饱和度、灌注指数(PI)
- mysql主从复制(一):一主多从
- 项目经理需要的基本技能
- 计算机里没有四款小游戏,电脑里一些隐藏在程序里有趣的小游戏
- 鸿蒙os适配机vivo型,originos系统适配机型有哪些
- 【日常】pytorch编写“自创”的MRR损失函数
- Blackbox_exporter概述
- PHP:【微信小程序】初识微信小程序,微信小程序配置
- 31 个Python代码实现的常用功能(附案例源码)