Spark优化

https://blog.csdn.net/u012102306/article/details/51322209#commentBox

https://blog.csdn.net/winner941112/article/details/82899277

1. 避免使用触发shuffle的算子,例如reduceByKey、join、distinct、repartition

        a. 使用broadcast与map代替join算子

        https://blog.csdn.net/winner941112/article/details/82899850

2. 使用persist持久化RDD
    https://blog.csdn.net/winner941112/article/details/82899483

代码实例

            知识点:persist和cache的关系
                cache算子等同于执行了persist算子且持久化级别为MEMORY_ONLY

            知识点:cache()和persist()的使用规则为,必须在transformation或者textFile等创建一个rdd之后,直接连续调用cache()和persist()才可以

3. 使用预聚合的shuffle操作

    a. 使用reduceByKey或者aggregateByKey算子来替代groupByKey算子,执行时,对每个节点本地的相同key进行预聚合;而groupByKey算子是不会进行预聚合的,全量的数据会在集群的各个节点之间分发和传输,性能相对来说比较差

4. 使用高性能算子

    使用reduceByKey/aggregateByKey替代groupByKey

    使用mapPartitions替代普通map

    使用foreachPartitions替代foreach(将RDD中数据写入mysql)

    使用filter之后进行coalesce操作,手动减少RDD的partition数量

    使用repartitionAndSortWithinPartitions替代repartition与sort类操作

5. 广播大变量
    如果使用的外部变量比较大,建议使用Spark的广播功能,广播后的变量,会保证每个Executor的内存中,只驻留一份变量副本,而Executor中的task执行时共享该Executor中的那份变量副本,这样的话,可以大大减少变量副本的数量,从而减少网络传输的性能开销,并减少对Executor内存的占用开销,降低GC的频率

6. 使用Kryo优化序列化性能

    spark中,主要有三个地方涉及到了序列化

        在算子函数中使用到外部变量

        将自定义的类型作为RDD的泛型类型时,所以自定义类型对象,都会进行序列化,因此这种情况下,也要求自定义的类必须实现Serializable接口

        使用可序列化的持久化策略时,Spark会将RDD中的每个partition都序列化成一个大的字节数组

    对于这三种出现序列化的地方,我们都可以通过使用kryo序列化类库,来优化序列化和反序列化的性能

    Spark默认使用java序列化机制

    Kryo要求最好要注册所有需要进行序列化的自定义类型

    步骤:设置序列化类,再注册要序列化的自定义类型(比如算子函数中使用到的外部变量类型、作为RDD泛型类型的自定义类型等)


kryo的使用实例

7. 优化数据结构

    Java中,有三种类型比较耗费内存:对象、字符串、集合类型

    Spark建议,在Spark编码实现中,特别是对于算子函数中的代码,尽量不要使用上述三种数据结构,尽量使用字符串替代对象,使用原始类型替代字符串,使用数组替代集合类型,这样尽可能减少内存占用,从而降低GC频率,提升性能。但是要保证代码的可维护性

8. 资源参数调优

    ./bin/spark-submit \

  --master yarn-cluster \

  --num-executors 100 \

  --executor-memory 6G \

  --executor-cores 4 \

  --driver-memory 1G \

    ## 设置每个stage的默认task数量

  --conf spark.default.parallelism=1000 \

    ## 设置RDD持久化数据在Executor内存中能占的比例,默认为0.6

  --conf spark.storage.memoryFraction=0.5 \

    ## 设置shuffle过程中一个task拉取到上个stage的task的输出后,进行聚合操作时能够使用的Executor内存的比例,默认是0.2

  --conf spark.shuffle.memoryFraction=0.3 \

9. 数据倾斜优化

    https://blog.csdn.net/u012102306/article/details/51556450

10. spark-submit参数优化

    https://my.oschina.net/rosetta/blog/777771

    --conf spark.yarn-executor.memoryOverhead=2048

    --conf spark.core.connection.ack.wait.timeout=300(默认60s)

11. 数据倾斜只会发生在shuffle过程中,常用并且可能触发shuffle操作的算子有:distinct groupByKey reduceByKey aggregateByKey join cogroup repartition

12. spark-submit通过—conf传参时,key必须以spark.开头,然后通过

    spark.sparkContext.getConf.get(“spark….”, “-9999”)

13. 

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,928评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,192评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,468评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,186评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,295评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,374评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,403评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,186评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,610评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,906评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,075评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,755评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,393评论 3 320
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,079评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,313评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,934评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,963评论 2 351

推荐阅读更多精彩内容