Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark Spark中的内存分配_Apache Spark - Fatal编程技术网

Apache spark Spark中的内存分配

Apache spark Spark中的内存分配,apache-spark,Apache Spark,例如,我正在学习Spark并试图理解为什么我会做以下事情: 我在Spark做了三件主要的事情,一件接一件,让我们称之为处理器。它们并非都相互依赖。 1.打开.csv文件,执行一些处理和计算,如分组、查找平均值、中值等(ProcessorOne) 2.打开另一个.csv文件,执行不同的处理。(ProcessorTwo) 3.打开第三个文件,执行另一个计算。(ProcessorTree) 我期望Spark在完成第一个进程后启动ProcessorTwo。 但在日志输出中,我看到第3部分、第2部分和第1

例如,我正在学习Spark并试图理解为什么我会做以下事情:

我在Spark做了三件主要的事情,一件接一件,让我们称之为处理器。它们并非都相互依赖。 1.打开.csv文件,执行一些处理和计算,如分组、查找平均值、中值等(ProcessorOne) 2.打开另一个.csv文件,执行不同的处理。(ProcessorTwo) 3.打开第三个文件,执行另一个计算。(ProcessorTree)

我期望Spark在完成第一个进程后启动ProcessorTwo。 但在日志输出中,我看到第3部分、第2部分和第1部分的语句混淆了。 例如,我可以看到它正在ProcessorTree中提交任务,但我还没有看到ProcessorOne的结果

18/04/17 15:03:56 INFO scheduler.DAGScheduler: Submitting 31 missing tasks from Stage 6 (MapPartitionsRDD[17] at mapToPair at ProcessorThree.java:99)
起初,我认为它应该先完成ProcessorOne

我认为,在完成ProcessorOne之后,它将分配内存来读取ProcessorTwo中的文件,内存将被释放。这是否意味着它首先将内存分配给所有处理器?
为什么它对我很重要:当我在小数据集上运行我的应用程序时,它很好。但是,当我增加每个处理器使用的数据量时,它开始变慢,并且要花很长时间才能完成我的应用程序。

您是如何以及何时从每个进程收集/写入数据的?Spark是懒惰的,只会在需要的时候进行计算。请给我们看一下你的代码。我在循环中运行这3个类的处理器。每个处理器都有processData()。此方法返回javapairdd。在循环之前,我指定结果变量。对于每个处理器,我将每个processData()方法的结果与结果变量连接起来,结果变量将保存所有3个处理器的结果。循环的3次迭代完成后,我将保存到文件result变量,该变量现在包含所有3个处理器的结果。注意,虽然输入数据相当大,但每个处理器的结果只是几行。如何让Spark处理一个又一个处理器?