Spark 调优(重点)
1. spark1.6以下的版本中execution和storage的内存是各自固定的,执行内存负责transform算子和shuffle算子,storage负责catch部分和广播变量的存储。通过以下两个参数改变它们的大小。
spark.shuffle.memoryFraction=0.2 spark.storage.memoryFraction=0.6
2. spark1.6以上的版本时使用联合内存机制,两者可以互相借用内存,但是如果执行内存不够时会强制回收storage借走的内存。
因此如果要进行大缓存任务时建议手动设置固定内存机制。
3. 1.6以上的版本还额外增加了堆外内存,调用persist方法时指定StorageLevel.OFF_HEAP参数,配合分布式内存文件系统Tachyon将需要缓存很久的数据存放到堆外内存,大幅降低full GC的发生频率。
. 使用repartition增加分区数量,降低每个task的大小
4. 当合并分区的数据量过大时,可以使用repartition并手动指定使用shuffle来进行带shuffle的合并操作,可以在合并前先进行一次聚合。
5. 使用shuffle算子时指定分区数量或指定自定义分区器避免数据倾斜
6. 当某个数据重复很多时,尽量用一个对象来代表这些数据,可以是string,也可以是带计数器的map。
7. 使用mapPartition代替map可以提升效率,但要注意内存紧缺时不能使用。
8. map端join:当join小表时,可以先用collect将数据收集到driver端,然后用广播变量的方式发送到各个节点上,避免丝瓜视频官方 的迁移。
9. 可以使用map端reduce的方式进一步减少网络IO。调用combineByKey算子。
10. 内存不足时使用rdd.persist(StorageLevel.MEMORY_AND_DISK_SER),直接缓存到磁盘。
11. spark集群节点应该覆盖hbase,因为spark读取hbase时是按region读取,在同一个节点上可以避免大量数据迁移
12. 参数设置: spark.driver.memory (default:1G) 设置driver端内存 spark.rdd.compress设置压缩内存的rdd数据,减少内存的占用,但是增加CPU负担 spark.serializer设置默认kyro spark.memory.storageFraction设置storage在内存中的比例,根据缓存的大小决定spark.locality.wait设置等待任务的等待时间,如果某个任务等待数据到达的时间超过该时间,就会被下调优先级spark.speculation设置空闲节点是否执行某个长时间未结束的task,有点类似hive的预测执行,建议开启。
总结 减少GC:增加计算用的内存;把频繁使用的大缓存缓存到堆外内存;使用计数器存储重复的数据 增加并行度:shuffle时指定分区数量、repartition增加分区(可用线程的2-3倍)、减小分区可以指定带shuffle的repartition进行局部聚合 减少shuffle:使用指定的分区器进行分区,使得相同的key都处于同一分区中(主要用在数据清洗时按自定义分区器存储数据)
map端join:先读取小表到driver端存成广播变量,再读取大表使用广播变量进行join map端reduce:使用combineByKey算子
指定persist : 内存不足时用persisit指定缓存磁盘来代替catch
参数调优:设置压缩RDD(节约内存,加重CPU)、设置kyro序列化、延长下调本地化级别的等待时间、开启预测执行等等

猜你喜欢LIKE
相关推荐HOT
更多>>
无重复字符的最长子串
题目描述:给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1: 输入: "abcabcbb" 输出: 3解释: 因为无重复字符的最长子串...详情>>
2022-10-11 14:52:00
如何自定义累加器
spark提供了一个累加器用于在整个流程中额外执行一个MR任务,它可以在driver端被初始化发送给各个Task,然后在每个Task中为它添加数据,最终经...详情>>
2022-09-30 15:17:00
如何写数据
1. 客户端从zk中获取meta表位置,到对应regionServer上获取该表,或直接从缓存中读取该表。 2. 客户端从meta表中获取要写的数据存放的region和...详情>>
2022-09-26 11:24:00
spark作业的最大并行度
spark作业的最大并行度=excutor个数*每个excutor的cpu core数 但spark的当前并行度取决于task数,而task数=分区数。详情>>
2022-09-23 16:29:00
kafka的topic,partition,replica,message的理解
如果配置为2,表示除了leader节点,对于topic里的每一个partition,都会有一个额外的备份。message:实际写入Kafka中并可以被读取的消息记录。每...详情>>
2022-09-20 16:59:00丝瓜视频官方 丝瓜视频苹果版 问答更多>>
新丝瓜视频官方 适合女生学吗?
新哪家丝瓜视频官方 分析丝瓜视频苹果版 班好
新丝瓜视频官方 丝瓜视频苹果版 班需要多少钱?怎么挑选丝瓜视频官方 丝瓜视频苹果版 班
新丝瓜视频官方 丝瓜视频苹果版 班需要多少钱?丝瓜视频官方 就业方向有哪些
新丝瓜视频官方 丝瓜视频苹果版 班靠谱吗?丝瓜视频官方 发展前景怎么样
新丝瓜视频官方 分析丝瓜视频苹果版 哪里好
新丝瓜视频官方 丝瓜视频苹果版 学费多少?课程内容是什么
丝瓜视频官方 面试题库 更多>>
丝瓜视频官方 的五个V是什么?
数据及集群管理(三)
数据及集群管理(二)
数据及集群管理(一)
丝瓜视频官方 之hbase的优化读数据方面
丝瓜视频官方 之hbase的优化写入数据方面
开班信息
北京校区
- 北京校区
- 大连校区
- 广州校区
- 成都校区
- 杭州校区
- 长沙校区
- 合肥校区
- 南京校区
- 上海校区
- 深圳校区
- 武汉校区
- 郑州校区
- 西安校区
- 青岛校区
- 重庆校区
- 太原校区
- 沈阳校区
- 北京校区
- 大连校区
- 广州校区
- 成都校区
- 杭州校区
- 长沙校区
- 合肥校区
- 南京校区
- 上海校区
- 深圳校区
- 武汉校区
- 郑州校区
- 西安校区
- 青岛校区
- 重庆校区
- 太原校区
- 沈阳校区
