【发布时间】:2017-05-11 09:12:36
【问题描述】:
我一直在尝试使用 sc.textFile()in spark 加载本地文件。
我已经阅读了[问题]:How to load local file in sc.textFile, instead of HDFS
我在 Centos 7.0 上的 /home/spark/data.txt 中有本地文件
当我使用val data = sc.textFile("file:///home/spark/data.txt").collect 时,出现如下错误。
16/12/27 12:15:56 WARN TaskSetManager: Lost task 0.0 in stage 5.0 (TID 36,): java.io.FileNotFoundException: 文件 file:/home/spark/data.txt 没有 存在 在 org.apache.hadoop.fs.RawLocalFileSystem.deprecatedGetFileStatus(RawLocalFileSystem.java:609) 在 org.apache.hadoop.fs.RawLocalFileSystem.getFileLinkStatusInternal(RawLocalFileSystem.java:822) 在 org.apache.hadoop.fs.RawLocalFileSystem.getFileStatus(RawLocalFileSystem.java:599) 在 org.apache.hadoop.fs.FilterFileSystem.getFileStatus(FilterFileSystem.java:421) 在 org.apache.hadoop.fs.ChecksumFileSystem$ChecksumFSInputChecker.(ChecksumFileSystem.java:140) 在 org.apache.hadoop.fs.ChecksumFileSystem.open(ChecksumFileSystem.java:341) 在 org.apache.hadoop.fs.FileSystem.open(FileSystem.java:767) 在 org.apache.hadoop.mapred.LineRecordReader.(LineRecordReader.java:109) 在 org.apache.hadoop.mapred.TextInputFormat.getRecordReader(TextInputFormat.java:67) 在 org.apache.spark.rdd.HadoopRDD$$anon$1.(HadoopRDD.scala:246) 在 org.apache.spark.rdd.HadoopRDD.compute(HadoopRDD.scala:209) 在 org.apache.spark.rdd.HadoopRDD.compute(HadoopRDD.scala:102) 在 org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:319) 在 org.apache.spark.rdd.RDD.iterator(RDD.scala:283) 在 org.apache.spark.rdd.MapPartitionsRDD.compute(MapPartitionsRDD.scala:38) 在 org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:319) 在 org.apache.spark.rdd.RDD.iterator(RDD.scala:283) 在 org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:70) 在 org.apache.spark.scheduler.Task.run(Task.scala:85) 在 org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:274) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 在 java.lang.Thread.run(Thread.java:745)
16/12/27 12:15:56 错误 TaskSetManager: 阶段 5.0 中的任务 0 失败 4 次;中止作业 org.apache.spark.SparkException:作业中止到期 到阶段失败:阶段 5.0 中的任务 0 失败了 4 次,最近一次 失败:在阶段 5.0 (TID 42) 中丢失任务 0.3: java.io.FileNotFoundException:文件文件:/home/spark/data.txt 不存在 在 org.apache.hadoop.fs.RawLocalFileSystem.deprecatedGetFileStatus(RawLocalFileSystem.java:609) 在 org.apache.hadoop.fs.RawLocalFileSystem.getFileLinkStatusInternal(RawLocalFileSystem.java:822) 在 org.apache.hadoop.fs.RawLocalFileSystem.getFileStatus(RawLocalFileSystem.java:599) 在 org.apache.hadoop.fs.FilterFileSystem.getFileStatus(FilterFileSystem.java:421) 在 org.apache.hadoop.fs.ChecksumFileSystem$ChecksumFSInputChecker.(ChecksumFileSystem.java:140) 在 org.apache.hadoop.fs.ChecksumFileSystem.open(ChecksumFileSystem.java:341) 在 org.apache.hadoop.fs.FileSystem.open(FileSystem.java:767) 在 org.apache.hadoop.mapred.LineRecordReader.(LineRecordReader.java:109) 在 org.apache.hadoop.mapred.TextInputFormat.getRecordReader(TextInputFormat.java:67) 在 org.apache.spark.rdd.HadoopRDD$$anon$1.(HadoopRDD.scala:246) 在 org.apache.spark.rdd.HadoopRDD.compute(HadoopRDD.scala:209) 在 org.apache.spark.rdd.HadoopRDD.compute(HadoopRDD.scala:102) 在 org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:319) 在 org.apache.spark.rdd.RDD.iterator(RDD.scala:283) 在 org.apache.spark.rdd.MapPartitionsRDD.compute(MapPartitionsRDD.scala:38) 在 org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:319) 在 org.apache.spark.rdd.RDD.iterator(RDD.scala:283) 在 org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:70) 在 org.apache.spark.scheduler.Task.run(Task.scala:85) 在 org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:274) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 在 java.lang.Thread.run(Thread.java:745)
驱动程序堆栈跟踪:在 org.apache.spark.scheduler.DAGScheduler.org$apache$spark$scheduler$DAGScheduler$$failJobAndIndependentStages(DAGScheduler.scala:1450) 在 org.apache.spark.scheduler.DAGScheduler$$anonfun$abortStage$1.apply(DAGScheduler.scala:1438) 在 org.apache.spark.scheduler.DAGScheduler$$anonfun$abortStage$1.apply(DAGScheduler.scala:1437) 在 scala.collection.mutable.ResizableArray$class.foreach(ResizableArray.scala:59) 在 scala.collection.mutable.ArrayBuffer.foreach(ArrayBuffer.scala:48) 在 org.apache.spark.scheduler.DAGScheduler.abortStage(DAGScheduler.scala:1437) 在 org.apache.spark.scheduler.DAGScheduler$$anonfun$handleTaskSetFailed$1.apply(DAGScheduler.scala:811) 在 org.apache.spark.scheduler.DAGScheduler$$anonfun$handleTaskSetFailed$1.apply(DAGScheduler.scala:811) 在 scala.Option.foreach(Option.scala:257) 在 org.apache.spark.scheduler.DAGScheduler.handleTaskSetFailed(DAGScheduler.scala:811) 在 org.apache.spark.scheduler.DAGSchedulerEventProcessLoop.doOnReceive(DAGScheduler.scala:1659) 在 org.apache.spark.scheduler.DAGSchedulerEventProcessLoop.onReceive(DAGScheduler.scala:1618) 在 org.apache.spark.scheduler.DAGSchedulerEventProcessLoop.onReceive(DAGScheduler.scala:1607) 在 org.apache.spark.util.EventLoop$$anon$1.run(EventLoop.scala:48)
在 org.apache.spark.scheduler.DAGScheduler.runJob(DAGScheduler.scala:632) 在 org.apache.spark.SparkContext.runJob(SparkContext.scala:1871) 在 org.apache.spark.SparkContext.runJob(SparkContext.scala:1884) 在 org.apache.spark.SparkContext.runJob(SparkContext.scala:1897) 在 org.apache.spark.SparkContext.runJob(SparkContext.scala:1911) 在 org.apache.spark.rdd.RDD$$anonfun$collect$1.apply(RDD.scala:893) 在 org.apache.spark.rdd.RDDOperationScope$.withScope(RDDOperationScope.scala:151) 在 org.apache.spark.rdd.RDDOperationScope$.withScope(RDDOperationScope.scala:112) 在 org.apache.spark.rdd.RDD.withScope(RDD.scala:358) 在 org.apache.spark.rdd.RDD.collect(RDD.scala:892) ... 48 已删除 作者:java.io.FileNotFoundException:文件文件:/home/spark/data.txt 不存在 在 org.apache.hadoop.fs.RawLocalFileSystem.deprecatedGetFileStatus(RawLocalFileSystem.java:609) 在 org.apache.hadoop.fs.RawLocalFileSystem.getFileLinkStatusInternal(RawLocalFileSystem.java:822) 在 org.apache.hadoop.fs.RawLocalFileSystem.getFileStatus(RawLocalFileSystem.java:599) 在 org.apache.hadoop.fs.FilterFileSystem.getFileStatus(FilterFileSystem.java:421) 在 org.apache.hadoop.fs.ChecksumFileSystem$ChecksumFSInputChecker.(ChecksumFileSystem.java:140) 在 org.apache.hadoop.fs.ChecksumFileSystem.open(ChecksumFileSystem.java:341) 在 org.apache.hadoop.fs.FileSystem.open(FileSystem.java:767) 在 org.apache.hadoop.mapred.LineRecordReader.(LineRecordReader.java:109) 在 org.apache.hadoop.mapred.TextInputFormat.getRecordReader(TextInputFormat.java:67) 在 org.apache.spark.rdd.HadoopRDD$$anon$1.(HadoopRDD.scala:246) 在 org.apache.spark.rdd.HadoopRDD.compute(HadoopRDD.scala:209) 在 org.apache.spark.rdd.HadoopRDD.compute(HadoopRDD.scala:102) 在 org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:319) 在 org.apache.spark.rdd.RDD.iterator(RDD.scala:283) 在 org.apache.spark.rdd.MapPartitionsRDD.compute(MapPartitionsRDD.scala:38) 在 org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:319)
在 org.apache.spark.rdd.RDD.iterator(RDD.scala:283) 在 org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:70)
在 org.apache.spark.scheduler.Task.run(Task.scala:85) 在 org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:274) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 在 java.lang.Thread.run(Thread.java:745)
显然这个路径中有一个文件。如果我使用了错误的路径,那么错误如下所示。
val data = sc.textFile("file:///data.txt").collect
org.apache.hadoop.mapred.InvalidInputException:输入路径不 存在:文件:/data.txt 在 org.apache.hadoop.mapred.FileInputFormat.singleThreadedListStatus(FileInputFormat.java:287) 在 org.apache.hadoop.mapred.FileInputFormat.listStatus(FileInputFormat.java:229) 在 org.apache.hadoop.mapred.FileInputFormat.getSplits(FileInputFormat.java:315) 在 org.apache.spark.rdd.HadoopRDD.getPartitions(HadoopRDD.scala:200)
在 org.apache.spark.rdd.RDD$$anonfun$partitions$2.apply(RDD.scala:248) 在 org.apache.spark.rdd.RDD$$anonfun$partitions$2.apply(RDD.scala:246) 在 scala.Option.getOrElse(Option.scala:121) 在 org.apache.spark.rdd.RDD.partitions(RDD.scala:246) 在 org.apache.spark.rdd.MapPartitionsRDD.getPartitions(MapPartitionsRDD.scala:35) 在 org.apache.spark.rdd.RDD$$anonfun$partitions$2.apply(RDD.scala:248) 在 org.apache.spark.rdd.RDD$$anonfun$partitions$2.apply(RDD.scala:246) 在 scala.Option.getOrElse(Option.scala:121) 在 org.apache.spark.rdd.RDD.partitions(RDD.scala:246) 在 org.apache.spark.SparkContext.runJob(SparkContext.scala:1911) 在 org.apache.spark.rdd.RDD$$anonfun$collect$1.apply(RDD.scala:893) 在 org.apache.spark.rdd.RDDOperationScope$.withScope(RDDOperationScope.scala:151) 在 org.apache.spark.rdd.RDDOperationScope$.withScope(RDDOperationScope.scala:112) 在 org.apache.spark.rdd.RDD.withScope(RDD.scala:358) 在 org.apache.spark.rdd.RDD.collect(RDD.scala:892)
我不知道为什么它不起作用。
有什么想法吗?
【问题讨论】:
-
我陷入了一个类似的问题,并且在过去 2 小时内一直在敲我的头。我的本地 unix 目录上有一个文件,并且 spark 在不同的机器上运行。我也收到了一个找不到文件的异常。
-
很抱歉我帮不了你。我也一直收到文件未找到异常。
-
我发现的一件事是,如果您的 spark 服务器和文件所在的服务器不同,那么您不能直接使用
sc.textFile。您必须先将文件放入 hdfs 然后才能使用它。我刚试过,它奏效了。 -
很好!我已经将文件放入 hdfs 但它不起作用......
标签: scala file apache-spark