一些分布式计算引擎(例如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,允许应用程序的动态加载。