我在Hadoop集群上运行一些Spark Streaming作业(一个在前一个输出文件夹中寻找输入),使用HDFS,在Yarn-cluster模式下运行。
job 1 --> reads from folder A outputs to folder A'
job 2 --> reads from folder A'outputs to folder B
job 3 --> reads from folder B outputs to folder C
...
独立运行作业时,它们的工作正常。
但是当他们都在等待输入并且我将文件放在文件夹A中时,job1会将其状态从运行更改为接受失败。
使用本地FS时,只有在群集上运行时才能重现此错误(使用HDFS)
Client: Application report for application_1422006251277_0123 (state: FAILED)
INFO Client:
client token: N/A
diagnostics: Application application_1422006251277_0123 failed 2 times due to AM Container for appattempt_1422006251277_0123_000002 exited with exitCode: 15 due to: Exception from container-launch.
Container id: container_1422006251277_0123_02_000001
Exit code: 15
答案 0 :(得分:0)
即使Mapreduce忽略了以...开头的文件。或_,Spark Streaming不会。
问题是,当正在复制文件或进程或其他任何文件并且在HDFS上找到文件的痕迹时(即#34; somefilethatsuploading.txt.tmp")Spark将尝试处理它。
当流程开始读取文件时,它已经消失或者尚未完成。
这就是为什么流程不断爆炸的原因。
忽略以。开头的文件。或_或以.tmp结尾修复此问题。
<强>增加:强> 我们一直遇到链式工作的问题。看来,只要Spark注意到一个文件(即使它没有完全写入),它就会尝试处理它,忽略所有其他数据。文件重命名操作通常是 atomic ,应该可以防止出现问题。