【发布时间】:2015-05-05 17:52:21
【问题描述】:
我的集群:
- 5个数据节点
- 每个数据节点有:8 个 CPU,45GB 内存
由于其他一些配置限制,我只能在每个数据节点上启动 5 个执行器。所以我做到了
spark-submit --num-executors 30 --executor-memory 2G ...
所以每个执行器使用 1 个核心。
我有两个数据集,每个大约 20 GB。在我的代码中,我做到了:
val rdd1 = sc...cache()
val rdd2 = sc...cache()
val x = rdd1.cartesian(rdd2).repartition(30) map ...
在 Spark UI 中,我看到 repartition 步骤耗时 30 多分钟,导致数据 shuffle 超过 150GB。
我认为这是不对的。但我不知道出了什么问题...
【问题讨论】:
-
顺便说一句,你应该总是在重新分区后缓存,否则你最终会在每次点击时随机播放。
标签: apache-spark