繁体   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