Spark CSV IOException Mkdirs无法创建文件

时间:2016-06-14 14:31:03

标签: apache-spark apache-spark-sql spark-hive

TL; DR

Spark 1.6.1无法在独立群集上使用Spark CSV 1.4编写CSV文件而没有HDFS和IOException Mkdirs无法创建文件

更多详情:

我正在使用一个Spark 1.6.1应用程序在一个独立的集群上运行它,使用本地文件系统(我运行的机器上甚至没有HDFS)和Scala。我有这个数据框,我试图使用HiveContext保存为CSV文件。

这就是我正在运行的:

exportData.write
      .mode(SaveMode.Overwrite)
      .format("com.databricks.spark.csv")
      .option("delimiter", ",")
      .save("/some/path/here") // no hdfs:/ or file:/ prefix in the path

我使用的Spark CSV是1.4。 运行此代码时,我得到以下异常:

WARN  TaskSetManager:70 - Lost task 4.3 in stage 10.0: java.io.IOException: Mkdirs failed to create file: /some/path/here/_temporary/0

完整的堆栈跟踪是:

at org.apache.hadoop.fs.ChecksumFileSystem.create(ChecksumFileSystem.java:442)
        at org.apache.hadoop.fs.ChecksumFileSystem.create(ChecksumFileSystem.java:428)
        at org.apache.hadoop.fs.FileSystem.create(FileSystem.java:908)
        at org.apache.hadoop.fs.FileSystem.create(FileSystem.java:801)
        at org.apache.hadoop.mapred.TextOutputFormat.getRecordWriter(TextOutputFormat.java:123)
        at org.apache.spark.SparkHadoopWriter.open(SparkHadoopWriter.scala:91)
        at org.apache.spark.rdd.PairRDDFunctions$$anonfun$saveAsHadoopDataset$1$$anonfun$13.apply(PairRDDFunctions.scala:1193)
        at org.apache.spark.rdd.PairRDDFunctions$$anonfun$saveAsHadoopDataset$1$$anonfun$13.apply(PairRDDFunctions.scala:1185)
        at org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:66)
        at org.apache.spark.scheduler.Task.run(Task.scala:89)
        at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:214)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at java.lang.Thread.run(Thread.java:745)

输出目录确实已创建,但为空。

我尝试使用spark shell运行它,我所做的是创建一个虚拟数据帧,然后使用完全相同的代码保存它(也是相同的路径)。它成功了。

我检查了我写入的文件夹的权限并将其更改为777,但基本上它在运行Spark作业时仍然无法正常工作

谷歌搜索建议:

  • 通过删除hdfs:/更改文件前缀,无论如何我都没有。我还尝试添加文件:/,file://,file:///前缀没有运气
  • 权限问题 - 我尝试通过制作文件夹777
  • 来解决此问题
  • 因为我在Ubuntu上工作,可能与我无关的一些MacBook问题
  • 安全问题 - 检查我的堆栈跟踪,我无法发现任何安全问题。
  • 删除文件路径开头的/前缀 - 我也试过没有运气
  • 有关此问题的其他未解答的问题

有没有人知道究竟是什么问题?以及如何克服它?

提前致谢

1 个答案:

答案 0 :(得分:0)

好的,所以我发现了问题,我希望这会有助于其他人

显然,我正在运行的机器上安装了hadoop。当我运行hadoop version时输出:Hadoop 2.6.0-cdh5.7.1与我的Spark版本冲突

另外,我不太确定它是否相关,但我是从root运行spark而不是Spark用户可能导致一些权限问题

将hadoop版本与我们的spark相匹配(在我们的例子中,我们将Spark与cloudera的Spark匹配)并以Spark用户身份运行代码,此故障停止发生