当前位置: 首页 > 知识库问答 >
问题:

我应该将JAR放在dataproc集群的何处,以便gcloud dataproc jobs submit spark可以使用它们?

长孙燕七
2023-03-14

我有一个初始化脚本,它从我们的本地工件存储库下载一个. 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放在哪里,这样就不必指定它的位置?

共有1个答案

黄仲渊
2023-03-14

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

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

如果所需的行为仍然是使用标记指定“main jar”,而不是指定只提供类的库jar,那么遗憾的是,集群上目前没有“working directory”的概念,只允许指定到“main jar”的相对(而不是绝对)路径。但是,有两种方法具有类似的行为:

  1. 将jarfile设置为提交作业的用户工作区的本地文件-然后gCloud将在作业提交时将jarfile上传到GCS,并在jarfile在特定于作业的目录中运行时将作业指向jarfile。请注意,这将导致每次作业运行时jarfile重复上传到GCS,因为它总是暂存到一个唯一的作业目录中;稍后您必须gCloud dataproc作业删除以清理这些jarfile使用的GCS空间
  2. (首选方法):使用--class而不是--jar参数来指定执行上述步骤后要运行的作业,以使jar已经在Spark类路径中可用。虽然调用类名有点冗长,但它仍然实现了向用户隐藏jarfile位置详细信息的目标。

例如,用于“spark shell”实现的类已经在类路径上,因此,如果要运行scala文件,就像通过spark shell运行一样,可以运行:

gcloud dataproc jobs submit spark --cluster my-cluster \
    --class org.apache.spark.repl.Main \
    -- -i myjob.scala
 类似资料:
  • 问题内容: 我在python中有自己的软件包,并且经常使用。我应该在哪里放置软件包,以便在不使用PYTHONPATH或sys.path的情况下将其导入,这是什么最优雅或传统的目录? 例如,网站包呢? 。 在python中复制并粘贴软件包是否很常见? 问题答案: 我通常将要准备导入的内容放在用户站点目录中: 要显示适合您平台的目录,可以使用 编辑:创建后将显示在其中:

  • 问题内容: 我最近在home / myusername / myappname目录中安装了一个nodejs应用程序(梯形)应用程序。 当我访问www.mydomain.com时,什么都没有显示-即使在打开我的nodejs应用程序之后。 这些文件应该在哪里? 我正在运行Ubuntu 16.04。 过去我曾使用过var / www文件夹,但我没有使用apache-我需要手动创建此文件夹吗? 谢谢! 问

  • 我自己想了一个实现,但觉得有点过头了,而且笨重? 我将使用用户ID作为密钥 Id然后在value部分中存储JWT令牌的hashmap。 示例 null null 这意味着在每个对受保护的apiendpoint的请求中,我必须按userId进行搜索,反序列化hashmap,循环遍历hashmap并尝试匹配在头中发送的JWT。这看起来像是一个很大的工作?还有别的办法吗? 如果一个用户想要注销,那么这个

  • 我尝试过Launch4j,但这种方法要求我同时提供JRE和EXE。根据我的要求,我不应该使用安装程序来发布,也不应该在客户端机器上提取/安装JRE。 如何将JRE放入JAR并加以利用?

  • 我已经在Hive中创建了一个自定义的UDF,它在Hive命令行中进行了测试,并且工作正常。那么现在我有了用于UDF的jar文件,我需要做什么来使用户能够创建指向它的临时函数呢?理想情况下,我会从Hive的命令提示符执行以下操作:- 在这之后,我就可以正确地使用这个函数了。 但是我不想每次执行函数时都添加jar。我应该可以在以下情况下运行此函数:- 从Visual Studio对HDInsight群

  • 在我的php脚本中,我有一个简单的username/email exists条件,但是我想把这个错误(如果存在的话)放在html的某个地方,这样我就可以设置它的样式并将它放置在我的表单上。Echo只是把它放在左上角。我该怎么做?设置变量似乎不是最佳解决方案。