【问题标题】:Spark streaming jobs fail when chained链接时 Spark 流作业失败
【发布时间】:2015-03-30 02:49:01
【问题描述】:

我正在使用 HDFS 以 Yarn-cluster 模式运行的 Hadoop 集群上以链的形式运行几个 Spark Streaming 作业(一个在前一个的输出文件夹中查找输入)。

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

【问题讨论】:

  • 你能在集群上运行job1,现在把2和3注释掉吗?这行得通吗?
  • 是的,作业在集群上单独运行。
  • 会不会是因为饥饿,即工作 2-4 也尝试消耗工作 1 的输入?也许一些代码会有所启发?

标签: hadoop hdfs apache-spark spark-streaming


【解决方案1】:

即使 Mapreduce 忽略以 .或 _,Spark Streaming 没有。

问题是,当一个文件被复制或处理或其他任何事情并且在 HDFS 上找到文件的踪迹(即“somefilethatsuploading.txt.tmp”)时,Spark 会尝试处理它。

当进程开始读取文件时,文件要么已经消失,要么尚未完成。

这就是流程不断崩溃的原因。

忽略以 .或 _ 或以 .tmp 结尾可解决此问题。

补充: 我们一直遇到连锁作业的问题。似乎一旦 Spark 注意到一个文件(即使它没有完全写入),它就会尝试处理它,而忽略所有额外的数据。文件重命名操作通常是原子,应该可以防止出现问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多