第一个问题:我可以将ComputeJob
部署到IgniteCompute
上的每个节点吗?
我知道Ignite可以部署由ComputeJob
组成的ComputeTask
。检查完内部代码后,在我看来ComputeJob
是序列化的,与args一起发送到远程代码,然后进行处理。如果我错了,请纠正我。
在我的情况下,一个节点将加载ComputeTask
的本地部署副本,然后ComputeTask
将生成ComputeJob
,这些ComputeJob
被发送到其他节点进行计算。产生的这些ComputeJob
除了传递给它的args之外都是相同的。在这种情况下,如果我可以在远程节点上加载本地部署的ComputeJob
副本并仅传递通过网络发送到此节点的args,则网络通信应该减少。我的应用程序的理论瓶颈是网络带宽,我正在尝试优化。
第二个问题:如果我无法部署ComputeJob
,是否有任何解决方法可以防止多次发送相同的# install.packages("MODIS")
library(MODIS)
# set MODISoptions()
# ...
tfs <- runGdal(product = "MOD15A2H",
tileH = 11, tileV = 4, outProj = "EPSG:32615",
begin = "2017001", end = "2017010",
SDSstring = "101100", job = "mod15a2h.006")
tfs
$MOD15A2H.006
$MOD15A2H.006$`2017-01-01`
[1] ".../MODIS_~1/PROCES~1/mod15a2h.006/MOD15A2H.A2017001.Fpar_500m.tif"
[2] ".../MODIS_~1/PROCES~1/mod15a2h.006/MOD15A2H.A2017001.FparLai_QC.tif"
[3] ".../MODIS_~1/PROCES~1/mod15a2h.006/MOD15A2H.A2017001.FparExtra_QC.tif"
$MOD15A2H.006$`2017-01-09`
[1] ".../MODIS_~1/PROCES~1/mod15a2h.006/MOD15A2H.A2017009.Fpar_500m.tif"
[2] ".../MODIS_~1/PROCES~1/mod15a2h.006/MOD15A2H.A2017009.FparLai_QC.tif"
[3] ".../MODIS_~1/PROCES~1/mod15a2h.006/MOD15A2H.A2017009.FparExtra_QC.tif"
?
非常感谢您的见解!
答案 0 :(得分:0)
使用Ignite&#39; ComputeJob
序列化BinaryMarshaller
时,它不会带来太多开销。您不会每次都发送作业的类字节。二进制表示也不包含可从类中推断出的任何字段名称或其他信息。几乎所有字节都是作业字段的实际值,这些字段通常对应于作业参数。您可以在Ignite的二进制格式here上找到更多信息。
如果您想查看作业二进制表单的大小和结构,可以使用
等手动序列化它byte[] array = ignite.configuration().getMarshaller().marshal(job);