我有一个 Spark 作业,它正在生成一组带有统计信息的结果。我的工作项目数量超过了奴隶数量。所以我对每个奴隶做不止一个处理。
因为我有多个写操作,所以我cache
在生成RDD
对象后能够重用它们:一个用于结果对象,另一个用于统计。两种写操作都使用saveAsHadoopFile
.
在没有缓存的情况下,Spark 会在每次写入操作时再次重新运行该作业,这需要很长时间并重做两次相同的执行(如果我有更多的写入,则更多)。
通过缓存,我达到了内存限制。一些先前计算的结果在缓存期间丢失,我看到了"CacheManager:58 - Partition rdd_1_0 not found, computing it"
消息。Spark 最终会进入一个无限循环,因为它试图缓存更多结果而丢失一些其他结果。
我知道 Spark 有不同的缓存存储级别。使用内存+磁盘可以解决我们的问题。但我想知道我们是否可以直接在工作人员中写下文件而不生成RDD
对象。我不确定这是否可能。是吗?