我应该将jar放在dataproc群集上,以便gcloud dataproc作业可以将它们用于提交火花?

问题描述 投票:2回答:1

我有一个初始化脚本,该脚本从我们的本地工件存储库中下载一个.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以便不必指定其位置?

google-cloud-dataproc
1个回答
2
投票

对于火花作业,您应该能够将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”的相对(而非绝对)路径。但是,有两种方法具有类似的行为:

  1. 将jarfile放在要从其提交作业的用户工作空间本地-gcloud然后将在提交作业时将jarfile上传到GCS,并在作业在特定于工作的目录中运行时将其指向jarfile。请注意,这将导致每次作业运行时都将jarfile重复上传到GCS,因为它始终位于一个唯一的作业目录中。您稍后必须gcloud dataproc jobs delete清理这些jarfile使用的GCS空间
  2. ((首选方法):使用--class而不是--jar参数来指定执行上述步骤以使jar在Spark类路径中可用之后运行的作业)。虽然类名的调用较为冗长,但仍达到了向用户隐藏jarfile位置详细信息的目的。
  3. 例如,用于“ spark-shell”实现的类已经在类路径上,因此,如果要像通过spark-shell运行它一样运行scala文件,可以运行:

gcloud dataproc jobs submit spark --cluster my-cluster \
    --class org.apache.spark.repl.Main \
    -- -i myjob.scala
© www.soinside.com 2019 - 2024. All rights reserved.