gpt4 book ai didi

google-cloud-dataproc - 我应该把 jar 放在 dataproc 集群的什么地方,以便 gcloud dataproc jobs submit spark 可以使用它们?

转载 作者:行者123 更新时间:2023-12-04 15:26:56 29 4
gpt4 key购买 nike

我有一个初始化脚本,它从我们的本地工件存储库下载一个 .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 的位置,我会更喜欢它。

我可以把 .jar 放在哪里,这样就不必指定它的位置了?

最佳答案

对于 spark 作业,您应该能够将您的 jar 文件放在所有节点上的 /usr/lib/spark/jars 中,以便在类路径上自动可用。

为了更广泛的覆盖,您可以将您的 jar 添加到 /usr/lib/hadoop/lib 中; hadoop lib 目录也自动包含在 Dataproc 上的 Spark 作业中,并且是 GCS 连接器 jarfile 等库所在的位置。您可以看到通过 /etc/spark/conf/spark-env.sh 中配置的 SPARK_DIST_CLASSPATH 环境变量包含了 hadoop lib 目录。

如果所需的行为仍然是指定使用 --jar 标志来指定“主 jar”而不是 --jars 来指定仅提供的库 jar类,不幸的是,目前集群上没有“工作目录”的概念,它只允许指定“主 jar”的相对(而不是绝对)路径。但是,有两种方法具有相似的行为:

  1. 将 jarfiles 放在提交作业的用户工作区本地 - gcloud 将在作业提交时将 jarfile 上传到 GCS,并在作业特定目录中运行时将作业指向 jarfile。请注意,这会导致每次作业运行时将 jarfile 重复上传到 GCS,因为它总是暂存到一个唯一的作业目录中;您稍后必须 gcloud dataproc jobs delete 来清理这些 jarfile 使用的 GCS 空间
  2. (首选方法):使用 --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

关于google-cloud-dataproc - 我应该把 jar 放在 dataproc 集群的什么地方,以便 gcloud dataproc jobs submit spark 可以使用它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62068707/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com