假设我们有1000个输入文件。 我们正在对文件进行一些处理。
我们将num executors设置为200,处理后我们将结果写在磁盘上。
我们将num executors设置为200,处理完毕后我们将结果合并(1)并将结果写入磁盘。
我们将num executors设置为200,并且在处理缓存结果之后,我们将缓存的结果合并(1)并写入磁盘。
我们将num executors设置为200,并且在处理后将结果保留在磁盘上,而不是合并(1)持久化结果并写入磁盘。
我们将num executors设置为200,处理后我们重新分区(1)结果并将结果写在磁盘上。
我们将num executors设置为200,并在处理缓存结果后,重新分区(1)缓存的结果并写入磁盘。
我们将num executors设置为200,并且在处理后将结果保留在磁盘上,而不是重新分区(1)持久化结果并写入磁盘。
有人能解释执行人员在这些案件中会做多少工作吗?
我的经验是当我尝试将小结果文件折叠成一个具有coalesce(1)的文件而不是单个执行程序完成所有处理时,即使我之前缓存了结果(应该触发一个操作)据我所知)。所以我做了以下“黑客”。我在磁盘上写了多文件结果,而不是将其读回coalesce(1)并再次写回来。 注意:我处理了多个TB数据,结果很小,只有几kb。
我觉得我错过了一些或者没有做对,或者因为合并(1)它必须由一个执行者处理,无论如何?一个合乎逻辑的步骤是结果的金字塔合并。
我使用Spark 1.6