簡體   English   中英

如何將未編譯的 Spark Scala/spark-shell 代碼作為 Dataproc 作業運行?

[英]How can I run uncompiled Spark Scala/spark-shell code as a Dataproc job?

通常,如果我將 Scala 用於 Spark 作業,我將編譯一個 jarfile 並使用gcloud dataproc jobs submit spark提交它,但有時對於非常輕量級的作業,我可能會在筆記本中使用未編譯的 Scala 代碼或使用spark-shell REPL ,我假設 SparkContext 已經可用。

對於其中一些輕量級用例,我可以等效地使用 PySpark 並使用gcloud dataproc jobs submit pyspark但有時我需要更輕松地訪問 Scala/Java 庫,例如直接在 map 函數內創建org.apache.hadoop.fs.FileSystem對象. 是否有任何簡單的方法可以使用 Dataproc 作業 API 直接從命令行提交此類“spark-shell”等效作業?

目前,對於未編譯的 Spark Scala 沒有專門的頂級 Dataproc 作業類型,但在幕后, spark-shell只是使用與spark-submit相同的機制來運行專門的 REPL 驅動程序: org.apache.spark.repl.Main 因此,將此與gcloud dataproc jobs submit spark可用的--files標志相結合,您只需編寫可能在spark-shell或筆記本會話中測試過的 Scala 片段,然后將其作為整個 Dataproc 作業運行,假設job.scala是您機器上的本地文件:

gcloud dataproc jobs submit spark --cluster ${CLUSTER} \
    --class org.apache.spark.repl.Main \
    --files job.scala \
    -- -i job.scala

就像任何其他文件一樣,您也可以在--files參數中指定任何與 Hadoop 兼容的路徑,例如gs://甚至hdfs:// ,假設您已經將job.scala文件放在那里:

gcloud dataproc jobs submit spark --cluster ${CLUSTER} \
    --class org.apache.spark.repl.Main \
    --files gs://${BUCKET}/job.scala \
    -- -i job.scala

gcloud dataproc jobs submit spark --cluster ${CLUSTER} \
    --class org.apache.spark.repl.Main \
    --files hdfs:///tmp/job.scala \
    -- -i job.scala

如果您已通過 init 操作將作業文件暫存到 Dataproc 主節點上,則可以使用file:///指定在集群的本地文件系統上找到該文件,而不是在運行 gcloud 的本地文件系統上找到:

gcloud dataproc jobs submit spark --cluster ${CLUSTER} \
    --class org.apache.spark.repl.Main \
    --files file:///tmp/job.scala \
    -- -i job.scala

請注意,在所有情況下,該文件都將成為主驅動程序作業工作目錄中的本地文件,因此“-i”的參數可以只是文件名的相對路徑。

暫無
暫無

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

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