Spark在工作进程中写入文件

时间:2017-02-27 19:07:07

标签: caching apache-spark rdd apache-spark-1.6

我有一个Spark作业,它正在生成一组包含统计信息的结果。我的工作项数不仅仅是奴隶数。所以我为每个奴隶做了不止一次处理。

I cache生成RDD个对象后能够重用它们,因为我有多个写操作:一个用于结果对象,另一个用于统计。两个写操作都使用saveAsHadoopFile

没有缓存Spark每次写操作都会重新运行作业,这需要很长时间并重复执行两次相同的执行(如果我有更多写操作则更多)。

通过缓存,我达到了内存限制。以前计算的一些结果在缓存期间丢失,我看到"CacheManager:58 - Partition rdd_1_0 not found, computing it"条消息。 Spark最终会进入无限循环,因为它会尝试缓存更多结果而丢失其他结果。

我知道Spark有不同的缓存存储级别。使用内存+磁盘可以解决我们的问题。但我想知道我们是否可以在工作人员中写下文件而不生成RDD个对象。我不确定这是否可行。是吗?

1 个答案:

答案 0 :(得分:0)

事实证明,在Spark工作进程中编写文件与在Java进程中编写文件没有什么不同。写操作只需要创建序列化和保存文件到HDFS的功能。 This question有几个关于如何做的答案。

saveAsHadoopFile只是一种方便的方式。