无法将Apache Ignite配置文件分发到Yarn执行程序上的Spark

时间:2018-08-15 12:50:42

标签: apache-spark yarn ignite

我们试图在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?有没有更好的方法呢?

1 个答案:

答案 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");