某些分布式计算引擎(如Spark或Flink)能够在计算机和jvm之间分发代码,例如(在带有spark的scala中):
bool[] array = new bool[4] { true, false, true, true } ;
这里,sc.parallelize(1 to 10).map(i => i+1).collect
被序列化,发送并执行所有工作人员。我想知道这是怎么做到的?
如果有人能指出我在某些现有分布式计算框架(如Spark / Flink)中与此问题相关的源代码(类),我也感激不尽
答案 0 :(得分:1)
编辑:这个答案是在更新标记为“过于宽泛”的问题之前完成的。
代码从其类加载,类通过ClassLoader加载。每次创建线程时,都可以在启动之前设置新的classLoader。
鉴于这种能力,你可以
classLoaders是分层的,如果classLoader找不到类,则会向其父级询问。这是默认层次结构:
像tomcat glassfish或wildfly这样的应用服务器为每个加载的EAR或WAR添加一个ClassLoader,允许动态加载应用程序。