我刚刚创建了一个7节点火花簇,每个工作站有8GB内存和4个内核 . 它不是一个庞大的集群,但是对于一个简单的terasort只有10GB的数据而无法使用 "GC overhead limit exceeded" .
我想知道如何确定spark群集的这些基本参数,以便在数据大小增加时作业不会失败 .
个执行者数量
个分区数
并行性
执行者核心
执行者记忆
如果配置不正确,我不介意工作运行缓慢但由于内存不足而导致处理死亡是一个很大的危险信号 .
一些信息,如火花版本,输入格式(文本,镶木地板,orc),压缩等肯定会有所帮助 .
但总之,以下通常是拇指规则 .
num-executors - 这是整个集群为此作业投入的执行程序总数 . 执行程序可以包含一个或多个任务 . 人们倾向于认为一个节点=一个执行者 . 每个节点最多有一个执行程序 . 更多关于这个在后面的答案 .
executor-cores - 这是每个执行程序的核心(任务)总数 . 在您的情况下,起始点是每个 Actuator 4个核心(即每个节点) .
executor-memory - 每个执行程序的总内存 . 这由执行程序中的所有任务或核心共享 .
最有可能的配置(但效果较差)num-executors = 7,executor-cores = 4,executor-memory = 8g在这种情况下,一个 Actuator 由4个任务共享 . 如果其中一个失败,则整个执行程序被标记为失败 .
更好的配置num-executors = 14(每个节点2个),executor-cores = 2(每个 Actuator 2个), Actuator - 内存= 3g(每个 Actuator 3g,其余进程留2g)
请注意,每个执行程序1个核心也不好,因为在这种情况下执行程序启动时间可能太长 .
在这种情况下,您要划分资源以避免杀死整个执行程序 .
并行性这取决于输入数据的格式 .
1 回答
一些信息,如火花版本,输入格式(文本,镶木地板,orc),压缩等肯定会有所帮助 .
但总之,以下通常是拇指规则 .
num-executors - 这是整个集群为此作业投入的执行程序总数 . 执行程序可以包含一个或多个任务 . 人们倾向于认为一个节点=一个执行者 . 每个节点最多有一个执行程序 . 更多关于这个在后面的答案 .
executor-cores - 这是每个执行程序的核心(任务)总数 . 在您的情况下,起始点是每个 Actuator 4个核心(即每个节点) .
executor-memory - 每个执行程序的总内存 . 这由执行程序中的所有任务或核心共享 .
最有可能的配置(但效果较差)num-executors = 7,executor-cores = 4,executor-memory = 8g在这种情况下,一个 Actuator 由4个任务共享 . 如果其中一个失败,则整个执行程序被标记为失败 .
更好的配置num-executors = 14(每个节点2个),executor-cores = 2(每个 Actuator 2个), Actuator - 内存= 3g(每个 Actuator 3g,其余进程留2g)
请注意,每个执行程序1个核心也不好,因为在这种情况下执行程序启动时间可能太长 .
在这种情况下,您要划分资源以避免杀死整个执行程序 .
并行性这取决于输入数据的格式 .