【Spark系列】:Spark调优策略

本文深入探讨了大数据性能调优的本质,聚焦于Spark的性能优化,包括资源使用原理、关键调优措施和具体配置建议。文章强调了硬件层面的优化,特别是CPU、内存和IO的调优,并详细阐述了如何处理数据本地性和数据倾斜问题。此外,还介绍了Spark的Shuffle调优、JVM优化、Kryo序列化以及堆外内存的调整策略。
摘要由CSDN通过智能技术生成

1. 大数据性能调优的本质

编程的时候发现一个惊人的规律,软件是不存在的!所有编程高手级别的人无论做什么类型的编程,最终思考的都是硬件方面的问题!最终思考都是在一秒、一毫秒、甚至一纳秒到底是如何运行的,并且基于此进行算法实现和性能调优,最后都是回到了硬件!

在大数据性能的调优,它的本质是硬件的调优!即基于 CPU(计算)、Memory(存储)、IO-Disk/ Network(数据交互) 基础上构建算法和性能调优!我们在计算的时候,数据肯定是存储在内存中的。磁盘IO怎么去处理和网络IO怎么去优化。

2. Spark性能调优分析点

  • 并行度
  • 压缩
  • 序例化
  • 数据倾斜
  • JVM调优 (例如 JVM 数据结构化优化)
  • 内存调优
  • Task性能调优 (例如包含 Mapper 和 Reducer 两种类型的 Task)
  • Shuffle 网络调优 (例如小文件合并)
  • RDD 算子调优 (例如 RDD 复用、自定义 RDD)
  • 数据本地性
  • 容错调优
  • 参数调优

大数据最怕的就是数据本地性(内存中)和数据倾斜或者叫数据分布不均衡、数据转输,这个是所有分布式系统的问题!数据倾斜其实是跟你的业务紧密相关的。所以调优 Spark 的重点一定是在数据本地性和数据倾斜入手。

  • 资源分配和使用:你能够申请多少资源以及如何最优化的使用计算资源
  • 关发调优:如何基于 Spark 框架内核原理和运行机制最优化的实现代码功能
  • Shuffle调优:分布式系统必然面临的杀手级别的问题
  • 数据倾斜:分布式系统业务本身有数据倾斜

3. Spark 资源使用原理流程

这是一张来至于官方的经典资源使用流程图,这里有三大组件,第一部份是 Driver 部份,第二就是具体处理数据的部份,第三就是资源管理部份。这一张图中间有一个过程,这表示在程序运行之前向资源管理器申请资源。在实际生产环境中,Cluster Manager 一般都是 Yarn 的 ResourceManager,Driver 会向 ResourceManager 申请计算资源(一般情况下都是在发生计算之前一次性进行申请请求),分配的计算资源就是 CPU Core 和 Memory,我们具体的 Job 里的 Task 就是基于这些分配的内存和 Cores 构建的线程池来运行 Tasks 的。
在这里插入图片描述

当然在 Task 运行的过程中会大量的消耗内存,而Task又分为 Mapper 和 Reducer 两种不同类型的 Task,也就是 ShuffleMapTask 和 ResultTask 两种类型,这类有一个很关建的调优点就是如何对内存进行使用。在一个 Task 运行的时候,默应会占用 Executor 总内存的 20%,Shuffle 拉取数据和进行聚合操作等占用了 20% 的内存,剩下的大概有 60% 是用于 RDD 持久化 (例如 cache 数据到内存),Task 在运行时候是跑在 Core 上的,比较理想的是有足够的 Core 同时数据分布比较均匀,这个时候往往能够充分利用集群的资源。

4. 具体调优的措施

4.1. 相关配置调优

核心调优参数如下:

num-executors
executor-memory
executor
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值