java - Spark saveAsTextFile() 导致 Mkdirs 无法为目录的一半创建

标签 java tomcat apache-spark spark-dataframe

我目前正在 tomcat 中运行 Java Spark 应用程序并收到以下异常:

Caused by: java.io.IOException: Mkdirs failed to create file:/opt/folder/tmp/file.json/_temporary/0/_temporary/attempt_201603031703_0001_m_000000_5

在线

text.saveAsTextFile("/opt/folder/tmp/file.json") //where text is a JavaRDD<String>

问题是/opt/folder/tmp/已经存在并成功创建了/opt/folder/tmp/file.json/_temporary/0/然后它遇到了看起来像剩余的权限问题部分路径 _temporary/attempt_201603031703_0001_m_000000_5本身,但我将 tomcat 用户权限( chown -R tomcat:tomcat tmp/chmod -R 755 tmp/ )授予了 tmp/目录。有谁知道会发生什么?

谢谢

为@javadba 编辑:

[root@ip tmp]# ls -lrta 
total 12
drwxr-xr-x 4 tomcat tomcat 4096 Mar  3 16:44 ..
drwxr-xr-x 3 tomcat tomcat 4096 Mar  7 20:01 file.json
drwxrwxrwx 3 tomcat tomcat 4096 Mar  7 20:01 .

[root@ip tmp]# cd file.json/
[root@ip file.json]# ls -lrta 
total 12
drwxr-xr-x 3 tomcat tomcat 4096 Mar  7 20:01 _temporary
drwxrwxrwx 3 tomcat tomcat 4096 Mar  7 20:01 ..
drwxr-xr-x 3 tomcat tomcat 4096 Mar  7 20:01 .

[root@ip file.json]# cd _temporary/
[root@ip _temporary]# ls -lrta 
total 12
drwxr-xr-x 2 tomcat tomcat 4096 Mar  7 20:01 0
drwxr-xr-x 3 tomcat tomcat 4096 Mar  7 20:01 ..
drwxr-xr-x 3 tomcat tomcat 4096 Mar  7 20:01 .

[root@ip _temporary]# cd 0/
[root@ip 0]# ls -lrta 
total 8
drwxr-xr-x 3 tomcat tomcat 4096 Mar  7 20:01 ..
drwxr-xr-x 2 tomcat tomcat 4096 Mar  7 20:01 .

catalina.out 中的异常

Caused by: java.io.IOException: Mkdirs failed to create file:/opt/folder/tmp/file.json/_temporary/0/_temporary/attempt_201603072001_0001_m_000000_5
    at org.apache.hadoop.fs.ChecksumFileSystem.create(ChecksumFileSystem.java:438)
    at org.apache.hadoop.fs.ChecksumFileSystem.create(ChecksumFileSystem.java:424)
    at org.apache.hadoop.fs.FileSystem.create(FileSystem.java:906)
    at org.apache.hadoop.fs.FileSystem.create(FileSystem.java:799)
    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:213)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    ... 1 more

最佳答案

saveAsTextFile 实际上是由 Spark 执行器处理的。根据您的 Spark 设置,Spark 执行程序可能以不同用户的身份运行,而不是您的 Spark 应用程序驱动程序。我想 spark 应用程序驱动程序为作业准备好目录,但是作为不同用户运行的执行者无权在该目录中写入。

更改为 777 无济于事,因为权限不会被子目录继承,所以无论如何您都会得到 755。

尝试以运行 Spark 的用户身份运行您的 Spark 应用程序。

关于java - Spark saveAsTextFile() 导致 Mkdirs 无法为目录的一半创建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35778653/

相关文章:

java - Android Rest Api Post 400 错误请求

java - 为什么 Java 的 SSLSocket 会发送版本 2 的客户端 hello?

java - 更新托管对象字段的 Realm 变慢

java - JProfiler:无法检测远程 JVM

apache-spark - 为什么我的 Spark Streaming 工作中有这么多任务

hadoop - Spark 和 HCatalog?

java - <service> MyFirebaseInstanceIdService 未在 list 中注册

java - Tomcat 类路径没有改变

javascript - servlet - 为什么 XMLHttpRequest 响应文本总是空白?

java Spark并行化方法参数