Apache spark Spark CSV IOException Mkdirs无法创建文件

Apache spark Spark CSV IOException Mkdirs无法创建文件,apache-spark,apache-spark-sql,spark-hive,Apache Spark,Apache Spark Sql,Spark Hive,TL;博士 Spark 1.6.1无法在没有HDFS的独立群集上使用Spark CSV 1.4写入CSV文件,IOException Mkdirs无法创建文件 更多详情: 我正在使用Scala开发一个Spark 1.6.1应用程序,该应用程序在一个独立集群上运行,使用本地文件系统(我运行的机器上甚至没有HDFS)。我有一个数据框,我正试图使用HiveContext将其保存为CSV文件 这就是我正在运行的: exportData.write .mode(SaveMode.Overwri

TL;博士

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

更多详情:

我正在使用Scala开发一个Spark 1.6.1应用程序,该应用程序在一个独立集群上运行,使用本地文件系统(我运行的机器上甚至没有HDFS)。我有一个数据框,我正试图使用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://,file:///前缀,但没有成功
  • 权限问题-我尝试通过创建文件夹777来解决此问题
  • 一些MacBook的问题可能与我无关,因为我在Ubuntu上工作
  • 安全问题-检查stacktrace时,我没有发现任何安全故障
  • 删除文件路径开头的/前缀-我也尝试过,但没有成功
  • 关于此问题的其他未回答问题
有人知道到底是什么问题吗?如何克服它


提前感谢

好的,我发现了问题,希望这能帮助其他人

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

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


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

请解释您如何纠正上述问题。我也有同样的问题