2015-05-05 25 views
7

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?

+0

Bất kỳ thông tin cập nhật về vấn đề này? – Irene

Trả lời

4

Tôi không sử dụng Python bản thân mình nhưng tôi tìm thấy một số manh mối có thể hữu ích cho bạn (trong mã nguồn của Spark-1.3SparkSubmitArguments) danh sách

  • --py-files PY_FILES, bằng dấu phẩy tách ra của .zip, các tệp .egg hoặc .py để đặt trên PYTHONPATH cho các ứng dụng Python.

  • --files FILES, bằng dấu phẩy tách ra danh sách các tập tin được đặt trong thư mục làm việc của mỗi người thi hành.

  • --archives ARCHIVES, Comma tách ra danh sách các tài liệu lưu trữ được chiết xuất vào thư mục làm việc của mỗi người thi hành.

Và cũng có thể, lập luận của bạn để spark-submit nên làm theo phong cách này:

Usage: spark-submit [options] <app jar | python file> [app arguments]

+0

Đồng ý. Tôi muốn nói '--files FILES' là những gì anh ta thực sự cần gửi tệp cho mỗi người thi hành. –

+2

Đó không phải là những gì tôi đang cố gắng làm. Một tệp mà tôi chuyển với tham số --files sẽ tải lên thành công thư mục .sparkStaging trên HDFS. Tất cả những gì tôi muốn là truy cập tệp này trong khi công việc của tôi đang chạy trên cụm từ mọi nút cụm qua SparkFiles.get(). –

+0

@AlexanderTokarev có bất kỳ cập nhật nào về điều này không? Tôi đang cố gắng như vậy nhưng nó không thành công. –

1

Bạn có thể muốn thử và sử dụng local:// và var $SPARK_YARN_STAGING_DIR env.

Ví dụ sau đây nên làm việc:

spark-submit \ 
    --master yarn \ 
    --deploy-mode cluster \ 
    --files /absolute/path/to/local/test.py \ 
    --class somepackage.PythonLauncher \ 
    local://$SPARK_YARN_STAGING_DIR/test.py 
Các vấn đề liên quan