【发布时间】:2019-06-06 22:09:53
【问题描述】:
如果分布式计算框架启动节点以运行 Java/Scala 操作,那么它必须在每个容器中包含 JVM。例如。每个 Map 和 Reduce 步骤都会产生自己的 JVM。
与为 Python 等语言创建容器相比,这种实例化的效率如何?是毫秒、几秒还是 30 秒的问题?在需要启动许多容器的 Kubernetes 等框架中,这笔成本是否会增加?
我听说,就像 Alpine Linux 只有几 MB 一样,有精简的 JVM,但仍然必须付出代价。然而,Scala 是 Spark 中的一等公民,而 MR 是用 Java 编写的。
【问题讨论】:
-
我相信,如果没有确切定义“重大开销”是什么,这个问题将作为主要意见关闭。另外不要忘记,程序的性能并不是选择工具的唯一重要指标。否则,每个人仍然可能会用汇编语言编写代码,最多用 C 语言编写代码。
-
你可以自己测试一下。拉取 openjdk 和 python:3 图像和时间
docker run python:3 python3 --version和docker run openjdk java --version。 tldr:它并不像你想象的那么重要。 -
我个人的经验是,您定义为 UDF 或映射到分区的任何函数在 Python 中的成本都将比在 Java/Scala 中高得多。事实上,正是出于这个原因,我领导了一个将我们的整个代码库从 pyspark 转换为 Scala 的团队;内存使用量正在用 pyspark 炸毁我们的集群。不要担心 JVM 本身的成本,而要担心 pyspark 跨集群序列化的成本。我断言 Scala 或 Java 会比 Python 更节省内存。
标签: java scala apache-spark kubernetes jvm