我如何 运行 未编译的 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 库,例如直接在其中创建一个 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:///
指定该文件位于集群的本地文件系统而不是您的本地文件系统,其中你是 运行ning gcloud:
gcloud dataproc jobs submit spark --cluster ${CLUSTER} \
--class org.apache.spark.repl.Main \
--files file:///tmp/job.scala \
-- -i job.scala
请注意,在所有情况下,该文件都会成为主驱动程序工作目录中的本地文件,因此“-i”的参数只能是文件名的相对路径。
通常,如果我将 Scala 用于 Spark 作业,我会编译一个 jarfile 并使用 gcloud dataproc jobs submit spark
提交它,但有时对于非常轻量级的作业,我可能会在笔记本中使用未编译的 Scala 代码或使用spark-shell
REPL,我假设 SparkContext 已经可用。
对于其中一些轻量级用例,我可以等效地使用 PySpark 并使用 gcloud dataproc jobs submit pyspark
提交,但有时我需要更轻松地访问 Scala/Java 库,例如直接在其中创建一个 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:///
指定该文件位于集群的本地文件系统而不是您的本地文件系统,其中你是 运行ning gcloud:
gcloud dataproc jobs submit spark --cluster ${CLUSTER} \
--class org.apache.spark.repl.Main \
--files file:///tmp/job.scala \
-- -i job.scala
请注意,在所有情况下,该文件都会成为主驱动程序工作目录中的本地文件,因此“-i”的参数只能是文件名的相对路径。