视频链接

A Deeper Understanding of Spark Internals - Aaron Davidson (Databricks)

  • 理解 Spark 的运行机制,重点关注性能
  • 执行模型
  • 数据输运
  • 缓存
  • DAG of RDDs
  • DAG 的逻辑执行计划
  • 安排并执行任务
  • 尽可能地流程化
  • 根据组织数据要求划分执行阶段
  • Shuffle
  • 在不同节点之间重新分布
  • Hash keys into buckets
  • 尽量避免 shuffle
  • Map side combine; 操作压缩
  • Pull-based, not push-based
  • 中间结果写到硬盘
  • 对硬盘上的文件进行筛选处理
  • 每个节点建立 hash map
  • 足够多的划分
  • 尽量减少内存使用
  • 减少数据传输
  • 了解标准库
  • 划分不能太少也不能太多
  • 一般是 100 - 10000 个
  • 下限:至少是核数的两倍
  • 上限:保证每个任务至少花 100 毫秒
  • 内存使用问题
  • 性能难以理解地差
  • 机器挂掉
  • PrintGCDetails
  • HeapDumpOnOutOfMemoryError
  • dmesg
  • oom-killer
  • 加内存
  • 增加划分
  • 改变程序结构
  • 显式划分
  • 避免冗余数据结构,避免没必要的中间变量
  • reduceByKey 比 groupBy 好