我有一个关于如何使用spark处理大文件的问题。假设我有一个非常大的文件(1 tb),而我只能访问集群中的500gb ram。一个简单的wordcount应用程序如下所示: sc.textfile(path_to_file).flatmap(split_line_to_words).map(lambda x: (x,1)).reduceByKey()
当我没有足够的内存时,上面的应用程序会因为oom而失败吗?如果是这样,我有什么方法可以解决这个问题?
我有一个关于如何使用spark处理大文件的问题。假设我有一个非常大的文件(1 tb),而我只能访问集群中的500gb ram。一个简单的wordcount应用程序如下所示: sc.textfile(path_to_file).flatmap(split_line_to_words).map(lambda x: (x,1)).reduceByKey()
当我没有足够的内存时,上面的应用程序会因为oom而失败吗?如果是这样,我有什么方法可以解决这个问题?
1条答案
按热度按时间gojuced71#
好吧,这不是问题。
n个分区等于hdfs(like)文件系统的块大小,将在物理上的某个阶段在工作节点上创建,从而在spark应用程序的生命周期内,可以轻松地在500gb内执行许多n个小任务。
分区及其等效任务将根据您分配的执行器数量并发运行。例如,如果有m个执行器具有1个核心,那么最多可以并发运行m个任务。还取决于调度和资源分配模式。
spark句柄就像任何操作系统一样,在大小和资源的情况下,根据可用资源的不同,或多或少都可以完成。dag调度程序在这一切中起着重要作用。但在这里保持简单。