我刚刚创建了一个 7 节点 spark 集群,每个 worker 有 8GB 内存和 4 个内核。它不是一个巨大的集群,但是 对于一个简单的 terasort,只有 10GB 的数据会出现“超出 GC 开销限制”而失败。
我想知道如何确定 Spark 集群的这些基本参数,以便作业不会随着数据大小的增长而失败。
- 执行者数量
- 分区数
- 并行性
- 执行器核心
- 执行者记忆
如果配置不正确,我不介意工作运行缓慢,但由于内存不足而导致进程死亡是一个很大的危险信号。
我刚刚创建了一个 7 节点 spark 集群,每个 worker 有 8GB 内存和 4 个内核。它不是一个巨大的集群,但是 对于一个简单的 terasort,只有 10GB 的数据会出现“超出 GC 开销限制”而失败。
我想知道如何确定 Spark 集群的这些基本参数,以便作业不会随着数据大小的增长而失败。
如果配置不正确,我不介意工作运行缓慢,但由于内存不足而导致进程死亡是一个很大的危险信号。
一些信息,如 spark 版本、输入格式(文本、parquet、orc)、压缩等,肯定会有所帮助。
但简而言之,以下通常是经验法则。
最可能的配置(但效率较低) num-executors=7, executor-cores=4, executor-memory=8g 在这种情况下,一个 executor 被 4 个任务共享。如果其中一个失败,则整个 executor 被标记为失败。
更好的配置 num-executors=14(每个节点 2 个),executor-cores=2(每个执行器 2 个),executor-memory=3g(每个执行器 3g,剩下 2g 用于其余进程)
请注意,每个执行程序 1 个核心也不好,因为在这种情况下执行程序启动时间可能太多。
在这种情况下,您正在划分资源以避免杀死整个执行程序。
并行性这取决于输入数据的格式。