Java Apache Spark作业失败,FileNotFoundExceptoin

Java Apache Spark作业失败,FileNotFoundExceptoin,java,hadoop,apache-spark,Java,Hadoop,Apache Spark,我有一个由5个节点组成的spark集群,我有一个用Java编写的spark作业,它从目录中读取一组文件,并将内容发送到Kafka 当我在本地测试这项工作时,一切正常 当我尝试将作业提交到集群时,作业失败,出现FileNoTFoundException 需要处理的文件存在于安装在所有5个节点上的目录中,因此我确信文件路径出现在异常存在中 以下是提交作业时出现的异常 java.io.FileNotFoundException: File file:/home/me/shared/input_1.tx

我有一个由5个节点组成的
spark
集群,我有一个用Java编写的spark作业,它从目录中读取一组文件,并将内容发送到
Kafka

当我在本地测试这项工作时,一切正常

当我尝试将作业提交到集群时,作业失败,出现
FileNoTFoundException

需要处理的文件存在于安装在所有5个节点上的目录中,因此我确信文件路径出现在异常存在中

以下是提交作业时出现的异常

java.io.FileNotFoundException: File file:/home/me/shared/input_1.txt does not exist
    at org.apache.hadoop.fs.RawLocalFileSystem.deprecatedGetFileStatus(RawLocalFileSystem.java:534)
    at org.apache.hadoop.fs.RawLocalFileSystem.getFileLinkStatusInternal(RawLocalFileSystem.java:747)
    at org.apache.hadoop.fs.RawLocalFileSystem.getFileStatus(RawLocalFileSystem.java:524)
    at org.apache.hadoop.fs.FilterFileSystem.getFileStatus(FilterFileSystem.java:409)
    at org.apache.hadoop.fs.ChecksumFileSystem$ChecksumFSInputChecker.<init>(ChecksumFileSystem.java:140)
    at org.apache.hadoop.fs.ChecksumFileSystem.open(ChecksumFileSystem.java:341)
    at org.apache.hadoop.fs.FileSystem.open(FileSystem.java:766)
    at org.apache.hadoop.mapred.LineRecordReader.<init>(LineRecordReader.java:108)
    at org.apache.hadoop.mapred.TextInputFormat.getRecordReader(TextInputFormat.java:67)
    at org.apache.spark.rdd.HadoopRDD$$anon$1.<init>(HadoopRDD.scala:239)
    at org.apache.spark.rdd.HadoopRDD.compute(HadoopRDD.scala:216)
    at org.apache.spark.rdd.HadoopRDD.compute(HadoopRDD.scala:101)
    at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:300)
    at org.apache.spark.rdd.RDD.iterator(RDD.scala:264)
    at org.apache.spark.rdd.MapPartitionsRDD.compute(MapPartitionsRDD.scala:38)
    at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:300)
    at org.apache.spark.rdd.RDD.iterator(RDD.scala:264)
    at org.apache.spark.rdd.MapPartitionsRDD.compute(MapPartitionsRDD.scala:38)
    at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:300)
    at org.apache.spark.rdd.RDD.iterator(RDD.scala:264)
    at org.apache.spark.rdd.MapPartitionsRDD.compute(MapPartitionsRDD.scala:38)
    at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:300)
    at org.apache.spark.rdd.RDD.iterator(RDD.scala:264)
    at org.apache.spark.rdd.MapPartitionsRDD.compute(MapPartitionsRDD.scala:38)
    at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:300)
    at org.apache.spark.rdd.RDD.iterator(RDD.scala:264)
    at org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:66)
    at org.apache.spark.scheduler.Task.run(Task.scala:88)
    at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:214)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:745)
我面临着一种奇怪的行为。当目录仅包含一个文件时,我提交了作业,驱动程序上引发了异常,但文件处理成功。然后,我添加了另一个文件,同样的行为发生了。但是,一旦我添加了第三个文件,就会抛出异常,作业失败

编辑2
经过一些尝试,我们发现挂载的目录中有一个问题导致了这种奇怪的行为。Spark默认为HDFS。这看起来像一个NFS文件,请尝试使用:
file:///home/me/shared/input_1.txt


是的,三个

以下是解决问题的方法。这很奇怪,我不知道真正的问题是什么

我只是要求系统管理员装载另一个目录,而不是我正在使用的目录。在那之后,一切都很顺利


似乎旧的挂载目录中存在问题,但我不知道实际的问题是什么

spark应用程序用户是否有权限访问这些已装载的目录?是的,权限没有问题。实际上,目录/home/me/shared/中有许多文件,我想处理它们。因此,在代码中,我使用context.textFile(“/home/me/shared/*”);你的答案仍然有效吗?是的!请尝试
context.textFile(“file:///home/me/shared/*");不幸的是,它不起作用。有一种奇怪的行为发生了。我测试了同一个作业,目录中只包含一个文件。提交作业时引发了相同的异常,但该异常继续工作,文件已成功处理。然后添加另一个文件,重新启动作业,工作正常。添加第三个文件后,作业失败。
bin$ ./spark-submit --total-executor-cores 20 --executor-memory 5G --class org.company.java.FileMigration.FileSparkMigrator --master spark://spark-master:7077 /home/me/FileMigrator-0.1.1-jar-with-dependencies.jar /home/me/shared kafka01,kafka02,kafka03,kafka04,kafka05 kafka_topic