我们试图在Spark on Yarn上提交作业,该作业会将数据从HDFS导入到Apache Ignite。因此,我们需要为Spark容器指定Ignite配置文件路径。
Ignite网站上的示例仅定义“ conf / cache.xml”之类的路径,然后Spark驱动程序和执行程序“神奇地”找到该文件,但我不明白Spark执行程序如何找到它。
我们尝试了几种方法,但都无效:
在代码中指定完整路径,例如“ file:///disk1/conf/cache.xml”
将配置文件上传到HDFS并指定为“ hdfs:///hdfs_root/conf/cache.xml”
在spark-defaults.conf中的参数spark。{driver,executor} .extraClassPath
我们是否必须在每个Yarn节点中放入Ignite配置文件,Ignite才能在Spark上使用Spark?有没有更好的方法呢?
答案 0 :(得分:2)
我不确定为什么Ignite无法使用“ file:///disk1/conf/cache.xml”或“ hdfs:///hdfs_root/conf/cache.xml”读取配置。可能是问题所在,应进行调查。
但是,您仍然可以尝试使用动态配置,例如:
public static IgniteConfiguration getClientConfiguration(String igniteInstanceName) {
IgniteConfiguration cfg = new IgniteConfiguration();
if (igniteInstanceName != null) {
cfg.setIgniteInstanceName(igniteInstanceName);
cfg.setConsistentId(igniteInstanceName);
}
cfg.setWorkDirectory(FileSystems.getDefault().getPath(".").toAbsolutePath().toString());
cfg.setClientMode(true);
TcpDiscoveryVmIpFinder ipFinder = new TcpDiscoveryVmIpFinder();
List<String> addrs = Arrays.asList("10.0.75.1:47500..47509");
ipFinder.setAddresses(addrs);
TcpDiscoverySpi discoSpi = new TcpDiscoverySpi();
discoSpi.setIpFinder(ipFinder);
cfg.setDiscoverySpi(discoSpi);
return cfg;
}
此外,您可以将XML配置放入jar存档中。
如果要使用Ignite RDD,则下一个示例应适用于上述情况:
1)动态配置:
JavaIgniteContext<Long, Record> igniteContext = new JavaIgniteContext<>(
sparkCtx, (IgniteOutClosure<IgniteConfiguration>)() -> {
try {
return IngniteConfigurationProvider.getClientConfiguration("ClientNode");
}
catch (Exception e) {
return null;
}
});
2)使用jar中的配置:
JavaIgniteContext<Long, Record> igniteContext = new JavaIgniteContext<>(
sparkCtx, "client_config.xml");