SaveAsTextFile:空文件导致Spark流异常

时间:2016-04-23 17:22:26

标签: hadoop apache-spark spark-streaming

我正在使用SparkStreaming,我花了很长时间才找到这个问题的根本原因。

在我的源代码中,我使用saveAsTextFile将变量写入HDFS:

variable.coalesce(1,true).saveAsTextFile("/user/root/vector/training/")

我理解为每个分区创建一个文件,请参阅:What are the files generated by Spark when using “saveAsTextFile”?。 _SUCCESS文件始终为空。

我正在运行Spark KMeans Streaming algorithm中的示例代码。这是异常之前的日志:

[info] 2016-04-23 18:55:10 INFO  FileInputDStream:58 - New files at time 1461430510000 ms:
[info] hdfs://cluster:8020/user/root/vector/training/_SUCCESS
[info] hdfs://cluster:8020/user/root/vector/training/part-00000
[info] 2016-04-23 18:55:10 INFO  MemoryStore:58 - Block broadcast_0 stored as values in memory (estimated size 258.0 KB, free 258.0 KB)
[info] 2016-04-23 18:55:10 INFO  MemoryStore:58 - Block broadcast_0_piece0 stored as bytes in memory (estimated size 21.2 KB, free 279.2 KB)
[info] 2016-04-23 18:55:10 INFO  BlockManagerInfo:58 - Added broadcast_0_piece0 in memory on localhost:56035 (size: 21.2 KB, free: 743.2 MB)
[info] 2016-04-23 18:55:10 INFO  SparkContext:58 - Created broadcast 0 from textFileStream at streaming-kmeans.scala:35
[info] 2016-04-23 18:55:10 ERROR JobScheduler:95 - Error generating jobs for time 1461430510000 ms
[info] org.apache.hadoop.mapreduce.lib.input.InvalidInputException: Input path does not exist: hdfs://cluster:8020/user/root/vector/training/_SUCCESS 

当我将part-00000复制到HDFS时,它工作得很好。很明显,Spark Streaming尝试处理空文件,但是没有这样做。我查找了用于textFileStream和saveAsTextFile的API,但找不到一个好的方法来告诉Spark不要检测空文件。

在其他情况下,这不是一个常见问题吗? 我不想先写入另一个目录,然后将所有非空文件移动到我的Spark流式传输目的地。更好的想法?

0 个答案:

没有答案