1. Spark没有伪分布式概念,主从节点设置全在spark-env里设置
  2. 基础调优
    1. 开发调优
      1. 基本原则
        1. 算子的合理使用
        2. RDD lineage设计
        3. 原则一:
        4. 避免重复创建RDD
        5. RDD会在每个算子过程中从头运行
        6. 同一个数据源尽可能只创建一个RDD,不创建多个
        7. 原则二:
        8. 尽量重用RDD
        9. 减少RDD的数量,从而减少算子执行的次数
        10. 原则三:
        11. RDD的持久化
        12. RDD持久化内存或者磁盘的策略,不需要下一个算子过程从头开始
        13. 对多次使用的RDD这样操作
        14. 持久化级别
        15. MEMORY_ONLY
        16. MEMORY_ONLY_SER
        17. 将RDD序列化后
        18. 保存到内存中
        19. 每个partition只是一个字节数组,大大减少了对象数量
        20. 降低内存着用
        21. 比上面的多的开销
        22. 序列化
        23. 反序列化
        24. MEMORY_AND_DISK
        25. MEMORY_AND_DISK_SER
        26. MEMORY_ONLY_2,MEMORY_AND_DISK_2,等等
        27. 上述任意一种持久化策略加上_2代表每个持久化数据备份并保存到其他节点
        28. 意义是容错,但性能极大降低
        29. 降低多少,可能不如从头一次计算
        30. 慎用
        31. 选择策略
        32. 默认下,性能最高
        33. MEMORY_ONLY
        34. 避免JVM的OOM内存溢出异常
        35. MEMORY_ONLY_SER
        36. 如果纯内存集别不行
        37. MEMORY_AND_DISK_SER策略
        38. 并不是MEMEORY_AND_DISK
        39. 序列化后的数据比较少,可以节省内存和磁盘的空间开销。
        40. 不建议使用结尾为_2的级别
        41. 除非是要求作业的高可用性
        42. 原则四:
        43. 避免shuffle的使用
        44. join,reducebykey,groupbykey,distinct,repartition 都会触发shuffle
        45. broadcast + map
        46. shuffle过程:
        47. 将分布在集群中多个节点上的同一个key,拉取到同一个节点上,进行聚合或join等操作
        48. 可能会发生大量的磁盘文件读写IO,数据的网络传输操作
        49. 原则五:
        50. 在shuffle前的预聚合map-side
        51. 每个节点本地先聚合一次相通key的
        52. 代替groupByKey使用
        53. reduceByKey
        54. aggregateByKey
        55. 原则六:
        56. 使用高性能算子
        57. 使用mapPartitions替代普通map
        58. mapPartitions类的算子,一次函数调用会处理一个partition所有的数据,而不是一次函数调用处理一条
        59. 使用foreachPartitions替代foreach
        60. 普通的foreach算子每次调用一条一条数据,建立数据库连接,引起多次创建和销毁表连接的操作
        61. 使用coalesce替代filter
        62. 使用repartitionAndSortWithin替代repartition与sort类操作
        63. 如果需要在repartition重分区之后,还要进行排序,建议直接使用
        64. 该算子可以一边进行重分区的shuffle操作,一边进行排序。
        65. 原则七:
        66. 广播大变量
        67. 原则八:
        68. 使用Kryo优化序列化性能
        69. 原则九:
        70. 优化数据结构
    2. 资源调优
      1. 调优概述
      2. Spark作业基本运行原理
  3. 资源倾斜调优
  4. 分支主题 3