Tôi đang viết một ứng dụng tia lửa đơn giản sử dụng một số RDD đầu vào, gửi nó tới tập lệnh bên ngoài qua đường ống và viết đầu ra của tập lệnh đó vào một tệp. Mã trình điều khiển trông giống như sau:Chạy công việc Spark trên cụm YARN với các tệp bổ sung
val input = args(0)
val scriptPath = args(1)
val output = args(2)
val sc = getSparkContext
if (args.length == 4) {
//Here I pass an additional argument which contains an absolute path to a script on my local machine, only for local testing
sc.addFile(args(3))
}
sc.textFile(input).pipe(Seq("python2", SparkFiles.get(scriptPath))).saveAsTextFile(output)
Khi tôi chạy nó trên máy cục bộ, nó hoạt động tốt. Nhưng khi tôi gửi nó cho một cụm YARN qua
spark-submit --master yarn --deploy-mode cluster --files /absolute/path/to/local/test.py --class somepackage.PythonLauncher path/to/driver.jar path/to/input/part-* test.py path/to/output`
nó không thành công với ngoại lệ.
Lost task 1.0 in stage 0.0 (TID 1, rwds2.1dmp.ru): java.lang.Exception: Subprocess exited with status 2
Tôi đã thử các biến thể khác nhau của lệnh đường ống. Ví dụ, .pipe("cat")
hoạt động tốt, và hoạt động như mong đợi, nhưng .pipe(Seq("cat", scriptPath))
cũng không thành công với mã lỗi 1, do đó, có vẻ như tia lửa không thể tìm ra đường dẫn đến tập lệnh trên nút cụm.
Mọi đề xuất?
Bất kỳ thông tin cập nhật về vấn đề này? – Irene