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】配置项调优

配置项可以分为三大类:硬件资源类、Shuffle类和Spark SQL类。

一 硬件资源类

| 配置项分类 | 子类细分 |配置项|含义|
|–|--|
|硬件资源类 |CPU|spark.cores.max|集群范围内满配CPU核数|
|硬件资源类 |CPU|spark.executor.cores|单个Executor的内CPU核数|
|硬件资源类 |CPU|spark.task.cpus|单个任务消耗的CPU核数|
|硬件资源类 |CPU|spark.default.parallelism|未指定分区数时的默认并行度|
|硬件资源类 |CPU|spark.sql.shuffle.partitions|数据关联、聚合操作中Reducer的并行度|
|硬件资源类 |内存|spark.executor.memory|单个Executor堆内存总大小|
|硬件资源类 |内存|spark.memory.offHeap.enabled|是否启用堆外内存,默认未False|
|硬件资源类 |内存|spark.memory.offHeap.size|单个Executor堆外内存总大小|
|硬件资源类 |内存|spark.memory.fraction|堆内内存中,用于缓存RDD和执行计算的内存比例,默认0.6|
|硬件资源类 |内存|spark.memory.storageFraction|用户缓存RDD的内存占比,执行内存占比为1-spark.memory.storageFraction|
|硬件资源类 |内存|spark.rdd.compress|RDD缓存是否压缩,默认不压缩|
|硬件资源类 |磁盘|spark.local.dir|用户缓存RDD和Shuffle中间文件的磁盘目录|

1.1 cpu相关配置

主要是配置 并行度 和 并行计算任务。

1.1.1 并行度

并行度,是从数据触达,明确数据划分的粒度,确定分布式数据集被划分为多少份。

1.1.2 并行计算任务

并行计算任务,是从计算任务、CPU出发,指的是任一时刻整个集群能够同时计算的任务数量。

1.2 内存相关配置

1.2.1 堆内存储与堆外存储的平衡

堆外内存的传递门:****
总之,与JVM堆内内存相比,堆外内存的优势是:可以更精确的统计内存占用、不需要垃圾回收机制、不需要序列化与反序列化。但其劣势是:紧凑的二进制格式,会使用到指针和偏移地址,当指针和偏移地址变多后,访问效率会大打折扣,并且内存泄漏的风险也会变大。
因此,对于需要处理的数据集,如果数据模式比较扁平,而且字段多是定长数据类型,便可更多的使用堆外内存;相反,如果数据模式比较复杂,嵌套结构或者变长字段很多,便可更多的使用JVM堆内内存。

1.2.2 User Memory与Spark可用内存的分配

当在JVM内平衡User Memory与Spark可用的内存时,可以考虑下应用中自定义的数据结构多不多、占比大不大?如果占比很小,可以将spark.memory.fraction配置项调高,让Spark可以享用更多的内存空间,用于分布计算和缓存分布式数据集。

1.2.3 Execution Memory 与Storage Memory的平衡

在统一内存管理模式下,spark.memory.storageFraction的设置显得没那么重要,因为无论这个参数设置多大,执行任务还是有机会抢占缓存内存,而且一旦完成抢占,就必须等到任务执行结束才会释放。

但仍然需要特别注意RDD缓存与执行效率之间的平衡,因为缓存会引入垃圾回收(GC)。

堆内内存会分为年轻代和老年代:
年轻代存储生命周期短、引用次数低的对象。
老年代则存储生命周期长,引用次数高的对象。像RDD cache这种一直缓存在内存中的数据,一定会被JVM安排到老年代。

年轻代的垃圾回收称为Young GC,老年代的垃圾回收称为Full GC。
当老年代可用内存不足时,就会出发JVM执行Full GC,在Full GC阶段,JVM会抢占应用程序执行线程,强行征用计算节点中的所有CPU线程,也就是“集中力量办大事”。当所有CPU线程都被拿去做垃圾回收工作的时候,应用程序的执行只能暂时搁置,只有等Full GC完事之后,把CPU线程释放出来,应用程序才能继续执行。

因此,在打算把大面积的内存空间用于RDD cache之前,需要衡量这么做可能会对执行效率产生影响。
如果一定要这么做,可以放弃对象值的缓存(默认是这种),该用序列化的缓存方式,序列化会把多个对象转换成一个字节数组。另外可以通过调节spark.rdd.compress这个参数,压缩RDD缓存。

1.3 磁盘相关配置

通过spark.local.dir这个配置项,允许开发者设置磁盘目录。

二 Shuffle类

三 Spark SQL类

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-08-24 15:37:49  更:2021-08-24 15:38:13 
 
开发: 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年11日历 -2024/11/23 13:13:53-

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