如何在JVM之间分发代码



一些分布式计算引擎(例如Spark或Flink(能够在计算机和JVM之间分发代码,例如(在Scala中使用Spark(:

sc.parallelize(1 to 10).map(i => i+1).collect

在这里,i => i+1已在所有工人上进行序列化,发送和执行。我想知道这是如何完成的?

还感谢任何人都可以在某些现有的分布式计算框架(例如spark/flink

(中指向与此问题相关的源代码(类(

编辑:此答案是在更新的问题之前完成的,该问题被标记为"太宽"。

代码是从其类中加载的,并且类是通过ClassLoader加载的,每次创建线程时,都可以在开始之前设置新的ClassLoader。

鉴于这些能力,您可以

  • 只需下载罐子,然后创建一个新的urlclassloader访问磁盘上的这些罐子。
  • 创建您的自定义classloader在运行时加载特定类(来自网络或其他...(
  • 使用任何允许加载热代码的技术:OSGI是其中之一。

classloader是层次结构,如果yout classloader找不到类,则要求其父母。这是默认层次结构:

  • bootstrap classloader
  • Extension ClassLoader
  • System Class Pather classloader。系统类路径

诸如Tomcat Glassfish或Wildfly之类的应用程序服务器为每个耳朵或战争添加一个class Loader,允许应用程序的动态加载。

最新更新