我有一个初始化脚本,该脚本从我们的本地工件存储库中下载一个.jar并将其放入群集中每个节点上的/usr/local/bin
中。我可以使用
gcloud dataproc jobs submit spark --cluster=my_cluster \
--region=us-central1 --jar=file:///usr/local/bin/myjar.jar -- arg1 arg2
但是,如果我的最终用户不必知道广口瓶的位置,我希望使用它。
我可以在哪里放置.jar以便不必指定其位置?
对于火花作业,您应该能够将jarfile放置在所有节点上的/usr/lib/spark/jars
中,以在类路径上自动可用。
要获得更广泛的介绍,您可以将罐子添加到/usr/lib/hadoop/lib
; hadoop lib目录也会自动包含在Dataproc的Spark作业中,并且是GCS连接器jarfile之类的库所在的目录。您可以通过SPARK_DIST_CLASSPATH
中配置的/etc/spark/conf/spark-env.sh
环境变量来查看hadoop lib目录。
[如果所需的行为仍然是使用--jar
标志来指定“主jar”,而不是使用--jars
来指定仅提供类的库jar,那么不幸的是,目前在“集群,该集群仅允许指定相对于“主jar”的相对(而非绝对)路径。但是,有两种方法具有类似的行为:
gcloud dataproc jobs delete
清理这些jarfile使用的GCS空间--class
而不是--jar
参数来指定执行上述步骤以使jar在Spark类路径中可用之后运行的作业)。虽然类名的调用较为冗长,但仍达到了向用户隐藏jarfile位置详细信息的目的。例如,用于“ spark-shell”实现的类已经在类路径上,因此,如果要像通过spark-shell
运行它一样运行scala文件,可以运行:
gcloud dataproc jobs submit spark --cluster my-cluster \
--class org.apache.spark.repl.Main \
-- -i myjob.scala