gpt4 book ai didi

linux - 与 bash 脚本并行运行多个 Scala 主类

转载 作者:太空宇宙 更新时间:2023-11-04 10:08:29 25 4
gpt4 key购买 nike

我有一个包含 Kafka 数据生产者和 Spark 消费者的应用程序,其中 KafkaProducer 对象扩展了 App,而 SparkConsumer 定义了主要方法。我想创建一个 bash 脚本,这样我就可以设置要运行的类 - 生产者或消费者并并行运行它们。我已经设法创建了这样一个脚本,但是 sbt 需要一段时间才能加载,而且我需要多次重启生产者,这比在 IDE 中运行相同的类花费的时间要长得多。我可以在哪里移动 sbt 命令定义或者我可以选择哪种方法来减少运行应用程序所需的时间?

附言我在不同的终端分别运行消费者和生产者。

这是我的 bash 脚本的样子:

#!/usr/bin/env bash
if [ "$1" = "consumer" ]
then
sbt "runMain consumer.SparkConsumer $2 $3 $4"
elif [ "$1" = "producer" ]
then
sbt "runMain producer.KafkaProducer $5 $3 $6 $7"
else
echo "Wrong parameter. It should be consumer or producer"
fi

最佳答案

这里有几个选项:

也许您不知道,您的 sbt 会将您的 Scala 代码编译成 java 字节码(.jar)文件,然后使用 java 运行它。 .所以你可以直接自己做:

  • 运行sbt package编译你的代码
  • 使用 java -cp "target/scala-<SCALA_VERSION>/<PROJECT_NAME>-<PROJECT_VERSION>.jar" your.main.class.Name 运行您的代码

( <SCALA_VERSION><PROJECT_NAME><PROJECT_VERSION>your.main.class.Name 必须替换为您自己的值)

这应该允许您更快地启动命令,因为 sbt 需要一段时间才能启动。但是,您仍然会有 JVM 启动时间的开销,这使我想到了第二个解决方案:

如果你真的需要快速启动你的命令,那么我建议你修改你的 scala 程序,以便能够从命令行(或通过读取文件)接受任意数量的操作,直接并行启动命令你的 Scala 代码。这就像这样简单:Seq(1, 2, 3, 4).par.foreach{println}.par将创建一个 ParSeq,这是一个可以并行运行的序列。您甚至可以配置并行度,但这是另一个问题。

第三个选项:你可以看看https://github.com/facebook/nailgun (或任何 similar project )并使用它来减少您的 JVM 启动时间开销。

关于linux - 与 bash 脚本并行运行多个 Scala 主类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50623398/

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