我刚刚创建了一个7节点的Spark集群,每个工作人员具有8GB内存和4个内核。它不是一个巨大的集群,但是失败了,结果为“超出了GC开销限制”
一个简单的Terasort仅需10GB的数据。
我想知道如何确定Spark群集的这些基本参数,以使作业不会随着数据大小的增长而失败。
我不介意如果配置不正确,但作业运行缓慢,但是由于内存不足而导致的进程崩溃是一个很大的危险信号。
最佳答案
某些信息,例如Spark版本,输入格式(文本,拼花,兽人),压缩等肯定会有所帮助。
简而言之,以下通常是经验法则。
最可能的配置(但效果较差)
num-executors = 7,executor-cores = 4,executor-memory = 8g
在这种情况下,一个执行程序由4个任务共享。如果其中之一失败,则整个执行程序都标记为失败。
更好的配置
num-executors = 14(每个节点2个),executor-cores = 2(每个执行者2个),executor-memory = 3g(每个执行者3g,其余2g供其余过程使用)
请注意,每个执行者1个内核也不是很好,因为在这种情况下执行者启动时间可能过多。
在这种情况下,您将分配资源以避免杀死整个执行程序。
平行性
这取决于您输入数据的格式。
关于hadoop - Databricks是否为给定的群集和数据集提供建议的 Spark 参数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38316640/