Spark优化-优化原则

    xiaoxiao2021-03-25  108

    1、避免创建重复的RDD  val rdd1 = sc.textFile("hdfs://ip:port/log.txt")   val rdd2 = sc.textFile("hdfs://ip:port/log.txt")     (1)对于业务逻辑比较复杂的情况,那么就会产生rdd串比较长,会忘记之前是否创建过相同的RDD。     (2)对于初学者可能会犯这样的错误 2、尽量复用同一个RDD val rdd1 = (key-value) rdd2 = rdd1.map(_._2) rdd2.map(....).count 那么对于这种情况,rdd2完全是rdd1的子集,完全可以直接复用rdd1就可以完成业务逻辑‘ 3、rdd的持久化,rdd.cache()  rdd.persist() rdd.checkpoint() persist的时候可以手动指定持久化的级别 MEMORY_ONLY MEMORY_ONLY_SER MEMORY_AND_DISK MEMORY_AND_DISK_SER DISK_ONLY DISK_ONLY_SER MEMORY_AND_DISK_2 MEMORY_AND_DISK_SER_2 DISK_ONLY DISK_ONLY_2 4、避免shuffle类的算子  distinct reaprtition resuceByKey countByKey groupByKey join join(broadcast) val rdd3 = rdd1.join(rdd2) 使用广播变量: val map = rdd2.collect val mapBroadcast = sc.broadcast(map) rdd1.map(mapBroadcast) 5、使用高性能的算子 map mapPartition foreach foreachPartition reduceByKey 6、尽量map端预聚合的算子 reduceByKey aggregateByKey 7、尽量使用多的广播大变量 val listbroadcast= sc.broadcast(list) rdd1.map(listbroadcast) 8、使用kyro序列化器 9、优化数据结构 
    转载请注明原文地址: https://ju.6miu.com/read-10012.html

    最新回复(0)