IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> Spark程序调优 -> 正文阅读

[大数据]Spark程序调优

Spark性能调优兹以为可分为三大块:

  • JVM层面的调优
  • 程序层面的调优
  • 业务和平台层面的调优

本篇主要描述程序层面的调优。主要包括三方面:

1,数据序列化

序列化对提高分布式程序的性能起到非常重要的作用。一个不好的序列化方式(如序列化模式的速度非常慢或者序列化结果非常大)会极大降低计算速度。在很多情况下这是我们优化Spark应用的第一选择。Spark试图在方便和性能之间获得一个平衡。Spark提供了两个序列化类库。

  • java序列化(默认):Java序列化非常灵活,但是速度较慢,在某些情况下序列化的结果也比较大。
  • Kyro序列化:速度快,产生的结果也比较紧凑。缺点是不支持所有类型,需要提前注册程序中所有的类。

如果需要使用Kryo序列化。要经过连个步骤:(1)申明使用kryo序列化(2)注册序列化类

  • 申明使用kryo序列化
//两种方式:(1)在程序中指定
val conf = new SparkConf
conf.set("spark.serializer", "org.apache.spark.serializer.KryoSerializer")
//(2)在spark-submit的时候指定
spark-submit --conf spark.serializer=org.apache.spark.serializer.KryoSerializer
  • 注册序列化类
//自定义的类要实现KryoRegistrator
public class User implements KryoRegistrator


val conf = new SparkConf
//申明序列化方式
conf.set("spark.serializer", "org.apache.spark.serializer.KryoSerializer")
//注册序列化类
.registerKryoClasses(Array(classOf[com.spark.test.offline.udf.User]))
//也可以换一种注册方式
//conf.set("spark.kryo.classToRegister","User")

2,内存优化

Spark内存优化

3,其他优化

Spark程序优化最主要的是数据序列化和内存优化,对于大多数程序而言,采用Kryo序列化能够解决性能有关的大部分问题。除此之外还有其他的一些序列化方式。

3.1 并行度

除非为每一个操作都设置足够高的并行度,否则集群不能有效地被利用。Spark会根据每一个文件的大小自动设置map task的个数(我们也可以通过SparkContext的配置参数来控制);对于分布式reduce任务(例如groupByKey或者reduceByKey),则利用最大RDD的分区数,我们可以通过配置reduceByKey这些方法的第二个参数来传入并行度或者通过系统参数spark.default.parallelism来改变默认值。通常来说,我们,在集群中,我们建议为每一个CPU 核分配2-3个任务。

3.2 Reduce Task的内存的使用

有时候我们会碰到OOM的错误,这并不是因为我们的RDD不能加载到内存,而是因为任务执行的数据集过大,例如正在执行groupByKey操作的Reduce任务。最简单的方法是增加并行度,这样每一个任务的输入会变得更小。

3.3 广播“大变量”

使用SparkContext的广播变量可以有效减少每一个任务的大小以及在集群中启动作业的消耗。

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-08-09 10:18:18  更:2021-08-09 10:20:35 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/17 20:16:13-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码