【问题标题】:Spark Streaming textFileStream COPYINGSpark Streaming textFileStream 复制
【发布时间】:2016-10-08 21:39:09
【问题描述】:

我正在尝试监视 HDFS 中的存储库以读取和处理复制到其中的文件中的数据(将文件从本地系统复制到 HDFS,我使用 hdfs dfs -put),有时它会产生问题:Spark Streaming: java .io.FileNotFoundException:文件不存在:.COPYING 所以我阅读了论坛中的问题和这里的问题Spark Streaming: java.io.FileNotFoundException: File does not exist: <input_filename>._COPYING_ 根据我阅读的内容,该问题与在 HDFS 和 Github 上完成复制之前读取文件的 Spark 流有关: https://github.com/maji2014/spark/blob/b5af1bdc3e35c53564926dcbc5c06217884598bb/streaming/src/main/scala/org/apache/spark/streaming/dstream/FileInputDStream.scala,他们说他们纠正了问题,但仅针对FileInputDStream,正如我所看到的,但我正在使用textFileStream 当我尝试使用FileInputDStream 时,IDE 会引发错误,无法从该位置访问符号。 有谁知道如何过滤掉仍在复制的文件,因为我试过了:

var lines = ssc.textFileStream(arg(0)).filter(!_.contains("_COPYING_") 

但这不起作用,这是意料之中的,因为过滤器应该应用于我猜我无法访问的文件进程的名称 如您所见,我在提出问题之前做了很多研究,但没有走运, 有什么帮助吗?

【问题讨论】:

  • 在您的代码中的什么时候出现错误?是在流式传输之后还是第一次转换时?
  • @Vale 这个错误不会一直出现,我做了一个 shell 程序,将文件放在 HDFS 中,它与 Spark Streaming 一起运行良好,直到我得到那个错误

标签: scala hadoop spark-streaming


【解决方案1】:

所以我看了一下:-put is the wrong method。查看最后的评论:您必须在 shell 脚本中使用 -rename 才能在 HDFS 上进行原子事务。

【讨论】:

  • 感谢您的回答,但能否请您解释一下我如何使用 rename ?你的意思是不是使用“hdfs dfs -put fileName directoryName”我应该使用“hdfs dfs -rename fileName directoryName”?
  • hadoop fs -mv oldName newName 用于以原子方式移动文件并重命名它们(重命名不在 hadoop 中;我错了,抱歉!)
  • 谢谢,但我很困惑,因为此命令没有目标目录,而且我不知道旧名称,因为我正在从本地文件中移动文件
  • 不不不,newName可以是目标目录! hadoop fs -mv yourFile destinationDirectory/yourFile如果是本地的,可能有问题:look at the documentation。不可能简单地“移动”,文件被复制然后在本地删除。你应该测试一下。请记得标记我的答案!
  • 非常感谢!
猜你喜欢
  • 2015-06-08
  • 1970-01-01
  • 1970-01-01
  • 2015-11-29
  • 1970-01-01
  • 2020-03-19
  • 1970-01-01
  • 2022-01-05
  • 2017-11-26
相关资源
最近更新 更多