如果分布式计算框架旋转节点来运行 Java/Scala 操作,那么它必须在每个容器中包含 JVM。例如。每个Map 和Reduce 步骤都会产生自己的JVM。
与为 Python 等语言旋转容器相比,这种实例化的效率如何?是毫秒、几秒、30秒的问题吗?在像 Kubernetes 这样需要启动许多容器的框架中,这个成本会增加吗?
我听说,就像 Alpine Linux 只有几 MB 一样,有精简的 JVM,但仍然必须有成本。然而,Scala 是 Spark 中的一等公民,而 MR 是用 Java 编写的。
最佳答案
Linux 容器技术使用分层文件系统,因此较大的容器镜像通常不会产生大量运行时开销,尽管您必须在第一次在节点上使用该镜像时下载该镜像,而该节点可能会增加真正庞大的集群。一般来说,除了众所周知的大多数 JVM 启动速度有点慢的问题之外,这通常不需要担心。然而,Spark 不会像您所描述的那样为每个操作启动一个新容器。它创建一组用于整个 Spark 执行运行的执行器容器 (pod)。
关于java - JVM 是否会在分布式/并行处理中产生大量开销?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54155801/