簡體   English   中英

在帶有附加文件的 YARN 集群上運行 Spark 作業

[英]Running Spark jobs on a YARN cluster with additional files

我正在編寫一個簡單的 spark 應用程序,它使用一些輸入 RDD,通過管道將其發送到外部腳本,並將該腳本的輸出寫入文件。 驅動程序代碼如下所示:

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)

當我在本地機器上運行它時,它工作正常。 但是當我通過

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` 

它失敗了,但有一個例外。

Lost task 1.0 in stage 0.0 (TID 1, rwds2.1dmp.ru): java.lang.Exception: Subprocess exited with status 2

我嘗試了管道命令的不同變體。 例如, .pipe("cat")工作正常,並按預期運行,但.pipe(Seq("cat", scriptPath))也失敗並顯示錯誤代碼 1,因此 spark 似乎無法找出路徑到群集節點上的腳本。

有什么建議?

我自己不使用 python,但我發現一些線索可能對你有用(在Spark-1.3 SparkSubmitArguments的源代碼中)

  • --py-files PY_FILES逗號分隔的 .zip、.egg 或 .py 文件列表,用於放置在 Python 應用程序的 PYTHONPATH 上。

  • --files FILES逗號分隔的文件列表,放置在每個執行程序的工作目錄中。

  • --archives ARCHIVES逗號分隔的檔案列表,要提取到每個執行程序的工作目錄中。

而且,你對spark-submit論點應該遵循這種風格:

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

要了解原因,您必須熟悉spark的三種運行模式的差異,例如。 獨立,紗線客戶端,紗線集群。

與獨立和紗線客戶端一樣,驅動程序在本地機器的當前位置運行,而工作程序在其他地方運行(獨立可能是 $SPARK_HOME 下的另一個臨時目錄,紗線客戶端可能是集群中的一個隨機節點),因此您可以使用驅動程序中指定的本地路徑訪問本地文件,但不在工作程序中。

但是,當您使用 yarn-cluster 模式運行時,您的驅動程序和工作程序都運行在一個隨機的集群節點上,本地文件是相對於它們的工作機器和目錄的,因此會拋出一個找不到文件的異常,您需要將這些文件歸檔提交時帶有 --files 或 --archive 的文件,或者在提交之前自己將它們存檔在 .egg 或 .jar 中,或者像這樣在驅動程序中使用 addFile api 。

您可能想嘗試使用local://$SPARK_YARN_STAGING_DIR

例如,以下應該工作:

spark-submit \
    --master yarn \
    --deploy-mode cluster \
    --files /absolute/path/to/local/test.py \
    --class somepackage.PythonLauncher \
    local://$SPARK_YARN_STAGING_DIR/test.py

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM