深入理解 Spark 内部机制
视频链接
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 好