在执行Spark程序期间,让我们说,
将10GB数据读入内存,然后进行过滤,映射,然后保存到另一个存储中。
我是否可以根据负载自动扩展群集,例如,如果此程序最终需要挂起1TB而不是10GB,则可以向本程序添加更多工作节点?
如果可以,怎么办呢?
答案 0 :(得分:0)
在某种程度上,可能使用dynamic allocation,但行为取决于作业延迟,而不是直接使用特定资源。
你必须记住,一般来说,Spark可以处理比内存更大的数据,而内存问题通常是由用户错误或恶性垃圾收集周期引起的。通过"添加更多资源"
,这些都不容易解决答案 1 :(得分:0)
如果使用任何云平台来创建集群,则可以使用自动扩展功能。可以水平扩展集群(具有变化的节点数)
答案 2 :(得分:0)
同意@ user8889543-与内存相比,您可以读取更多的数据。
关于动态添加更多资源。它取决于您的群集类型。 我使用独立模式,并且我有一个代码,该代码会自动添加到自动连接到主服务器的实时计算机上,这样我的集群便拥有更多的内核和内存。
如果您仅在集群中有工作/程序,那么这很简单。只需设置
spark.cores.max
到很高的数量,这项工作将始终占据集群的所有核心。 see
如果集群中有多个作业,它将变得很复杂。如@ user8889543答案中所述。