提交到Spark集群时出现FileNotFoundException异常。

5

我使用Apache Spark创建了一个小应用程序,当我在本地运行应用程序时一切正常。但是当我将它提交到一个由6个节点组成的集群时,出现了FileNotFoundException,因为它找不到输入文件。

这是我的小应用程序。

def main (args: Array[String]) {
  val sparkContext = new SparkContext(new SparkConf())
  val tweets = sparkContext.textFile(args(0))

  tweets.map { line => (line, LanguageDetector.create().detect(line)) }
     .saveAsTextFile("/data/detected")
}

我用以下命令提交申请:

/opt/spark-1.0.2-bin-hadoop2/bin/spark-submit --class YarnTest --master spark://luthor-v1:7077 lang_detect.jar twitter_data 

提交后,我收到了以下异常信息:
Exception in thread "main" org.apache.spark.SparkException: Job aborted due to stage failure: Task 0.0:1 failed 4 times, most recent failure: Exception failure in TID 6 on host luthor-v5: java.io.FileNotFoundException: File file:/opt/bb/twitter_data does not exist

文件肯定在那里,jar包和文件在同一个目录中,可以解析完整路径。
提前感谢。

你尝试过输入文件扩展名吗?它可能是问题的原因。 - Mikel Urkia
尝试给出输入文件的完整路径(例如:/root/twitter_data)。它是否存在于所有的工作节点上? - Dan Osipov
@DanOsipov 不,该文件并不在所有工作节点上。它只存在于主节点上。我猜这就是我的问题所在。如下建议,我可以将文件存储在HDFS集群中。 - Mathias Lavaert
我和 OP 有同样的问题。我已经将文件复制到 HDFS,但仍然出现相同的错误。有什么建议吗? - Bhushan
2个回答

0

spark-submit 假设 jar 存储在当前的工作目录中,而所提及的文件则存储在 hdfs 中。您可以使用以下方式将本地文件系统中的文件 twitter_data 复制到 hdfs:

hadoop fs -copyFromLocal twitter_data /twitter_data

它将把文件复制到hdfs的/目录中。现在运行以下命令:

spark-submit --class YarnTest --master spark://luthor-v1:7077 lang_detect.jar /twitter_data

我和 OP 有同样的问题。我已经将文件复制到 HDFS,但仍然出现相同的错误。有什么建议吗? - Bhushan
有没有办法让Spark上下文来做这件事?我不想手动将文件放入HDFS。它不能自己完成吗? - salvob
@salvob 请查看这个问题。 - Anas

0
Hadoop配置目录中的“spark-env.sh”可能不正确,请检查一下。应该是:“your_hadoop_dir /etc/hadoop/”。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接