2016-03-03 12 views
7

Tôi hiện đang chạy một ứng dụng Spark Java trong tomcat và nhận được ngoại lệ sau đây:Spark saveAsTextFile() kết quả trong Mkdirs thất bại trong việc tạo ra cho một nửa của thư mục

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

trên dòng

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

Vấn đề là/opt/folder/tmp/đã tồn tại và tạo thành công tối đa /opt/folder/tmp/file.json/_temporary/0/ và sau đó nó chạy vào vấn đề trông giống như sự cho phép với phần còn lại một phần của đường dẫn _temporary/attempt_201603031703_0001_m_000000_5 chính nó, nhưng tôi đã cho phép người dùng tomcat (chown -R tomcat:tomcat tmp/chmod -R 755 tmp/) vào thư mục tmp /. Có ai biết điều gì có thể xảy ra không?

Cảm ơn

Chỉnh sửa cho @javadba:

[[email protected] 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 . 

[[email protected] tmp]# cd file.json/ 
[[email protected] 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 . 

[[email protected] file.json]# cd _temporary/ 
[[email protected] _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 . 

[[email protected] _temporary]# cd 0/ 
[[email protected] 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 . 

Trường hợp ngoại lệ trong 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 
+0

bạn có thể đăng cách bạn gửi đơn đăng ký của mình không? thầy gì và bạn có sử dụng suy đoán bằng bất kỳ cơ hội nào không? –

Trả lời

2

Tôi đề nghị để cố gắng thay đổi để 777 tạm thời. Xem nếu nó hoạt động tại thời điểm đó. Đã có lỗi/vấn đề quyền wrt trên hệ thống tệp cục bộ. Nếu điều đó vẫn không hoạt động, hãy cho chúng tôi biết nếu có bất kỳ điều gì thay đổi hoặc chính xác kết quả tương tự.

+0

Đã thử rằng trước năm 755 kết quả cũng không may. – DeeVu

+0

vui lòng cho chúng tôi biết kết quả của 'ls -lrta/opt/folder/tmp/file.json/_temporary/0/_temporary' – javadba

+0

Xin lỗi vì sự chậm trễ. Đã thêm cập nhật. Thats như xa như nó đi. Nó không thể mkdir qua '0 /' nó sẽ có vẻ – DeeVu

1

Có thể nào là selinux/apparmor có thể giúp bạn lừa không? Kiểm tra với ls -Z và nhật ký hệ thống.

8

saveAsTextFile thực sự được xử lý bởi trình thực thi Spark. Tùy thuộc vào thiết lập Spark của bạn, người thực thi Spark có thể chạy dưới dạng người dùng khác nhau so với trình điều khiển ứng dụng Spark của bạn. Tôi đoán các trình điều khiển ứng dụng tia lửa chuẩn bị thư mục cho công việc tốt, nhưng sau đó các nhà điều hành chạy như một người dùng khác nhau không có quyền viết trong thư mục đó.

Thay đổi thành 777 sẽ không hữu ích, vì quyền không được thừa kế bởi các thư mục con, vì vậy bạn sẽ nhận được 755 anyways.

Thử chạy ứng dụng Spark của bạn với tư cách là người dùng chạy Spark của bạn.

+0

Hầu hết các phản ứng có thể xảy ra. Tôi chỉ cần thiết lập ứng dụng của tôi để sử dụng HDFS/S3 như một công việc xung quanh. Đã không chạy vào các vấn đề với quyền hạn, nếu tôi có cơ hội Ill backtrack và xác nhận điều này. – DeeVu

+0

làm thế nào để bạn chạy các trình thực thi tia lửa trong cùng một người dùng? – thebeancounter

0

Vì vậy, tôi đã gặp phải vấn đề tương tự, với thiết lập của tôi không có HDFS và Spark đang chạy ở chế độ độc lập. Tôi đã không thể lưu các dataframes tia lửa vào một chia sẻ NFS bằng cách sử dụng các phương thức Spark gốc. Quá trình này chạy như một người dùng cục bộ, và tôi cố gắng ghi vào thư mục home users. Ngay cả khi tạo thư mục con với 777 tôi không thể ghi vào thư mục.

Giải pháp thay thế cho việc này là chuyển đổi khung dữ liệu với toPandas() và sau đó to_csv(). Điều này kỳ diệu hoạt động.

Các vấn đề liên quan