【问题标题】:Spark CSV IOException Mkdirs failed to create fileSpark CSV IOException Mkdirs 未能创建文件
【发布时间】:2016-10-15 08:37:23
【问题描述】:

TL;DR

Spark 1.6.1 无法在没有 HDFS 且 IOException Mkdirs failed to create file 的独立集群上使用 Spark CSV 1.4 写入 CSV 文件

更多细节:

我正在使用带有 Scala 的本地文件系统(我正在运行的机器上甚至没有 HDFS)在独立集群上运行 Spark 1.6.1 应用程序。我有这个数据框,我正在尝试使用 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 上工作
  • 安全问题 - 检查我的堆栈跟踪,我找不到任何安全故障。
  • 删除文件路径开头的 / 前缀 - 我也尝试过,但没有成功
  • 有关此问题的其他未解答问题

有没有人知道到底是什么问题?又该如何克服呢?

提前致谢

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 请说明您是如何纠正上述问题的。我自己也遇到了同样的问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-24
    • 1970-01-01
    • 2022-08-23
    • 1970-01-01
    相关资源
    最近更新 更多