Apache Zeppelin 与 Ignite 集成时出现“无法启动 Ignite 节点”错误

Posted

技术标签:

【中文标题】Apache Zeppelin 与 Ignite 集成时出现“无法启动 Ignite 节点”错误【英文标题】:Apache Zeppelin 'Failed to start Ignite node' error when integrating with Ignite 【发布时间】:2018-03-02 16:50:29 【问题描述】:

我正在发现 Apache Ignite 并创建了一个类似于他们的字数统计示例的简单应用程序。它将多个 .txt 文件中的单词流式传输到缓存中。我可以借助 Java 应用程序中的 SqlFieldsQuery 类查询这些词。

public class NodeStartup 

    public static void main(String[] args) throws IgniteException 
        // Start Server Node
        Ignition.start("config/example-ignite.xml");
    


public class StreamWordsToCache 
        public static void main(String[] args) throws Exception 
            // Mark the cluster member as a Client
        Ignition.setClientMode(true);

        // Start a Client Node
        try (Ignite ignite = Ignition.start("config/example-ignite.xml")) 
            // Checks if Server nodes not found
            if (!ExamplesUtils.hasServerNodes(ignite))
                return;

            // If cache doesn't exist, create it within the cluster, otherwise use the existing one
            IgniteCache<AffinityUuid, String> theCache = ignite.getOrCreateCache(CacheConfig.wordsCache());

            // Create Streamers for the cache
            try (IgniteDataStreamer<AffinityUuid, String> theStreamer = ignite.dataStreamer(theCache.getName())) 

                //Stream words from articles
                while (true) 
                    File directory = new File("src/main/resources/");
                    if (directory.listFiles() != null) 
                        List<File> filesInDir = new ArrayList<>(Arrays.asList(directory.listFiles()));
                        for (File file : filesInDir) 
                            System.out.println("Start reading file : " + file.getName());
                            try (LineNumberReader lineNumberReader = new LineNumberReader(new FileReader(file))) 
                                for (String line = lineNumberReader.readLine(); line != null; line = lineNumberReader.readLine()) 
                                    for (String word : line.split(" "))
                                        if (!word.isEmpty() && word.matches("(?!(?:that|with|from))\\b(?<!\\b[-.])[^\\d\\W]4,+\\b(?![-.]\\b)"))
                                            // Stream words into Ignite
                                            // Unique key (AffinityUuid) is created for each word
                                            // AffinityUuid ensures that identical words are processed on the same cluster node
                                            // in order to process them faster
                                            theStreamer.addData(new AffinityUuid(word), word);
                                

现在我决定使用 Apache Zeppelin 从 Ignite 缓存中检索这些单词。但由于某种原因,我尝试整合 Zeppelin 和 Ignite 失败了。我正在关注本教程https://apacheignite-tools.readme.io/docs/apache-zeppelin,并按照他们的建议配置了 Ignite Interpreter。

首先,我启动 Ignite 节点和客户端节点,将单词连续流式传输到“单词”缓存中。然后我尝试在 Zeppelin 注释中执行 SQL 查询并不断收到Failed to start Ignite node 错误。

这种行为的原因可能是什么?我的项目中使用的 Ignite 版本是 2.1.0,Zeppelin 二进制文件是 0.7.2,会导致问题吗?或者ignite.jdbc.url 属性值可能有问题?jdbc:ignite://localhost:11211/words

【问题讨论】:

刚刚开始工作!问题在于 Ignite 的版本。我在我的项目中将其更改为 1.9.0 并解决了该问题。这个链接真的很有帮助zeppelin.apache.org/supported_interpreters.html 【参考方案1】:

您的 Zeppelin (0.7.2) 版本已通过 Apache Ignite 1.9.0 认证 所以,我认为您的问题的根本原因是不同版本的 Ignite。

Zeppelin 的最新代码库似乎支持 Apache Ignite 2.1 https://github.com/apache/zeppelin/pull/2549

因此,您可以尝试从源代码构建 Zeppelin Ignite Interpreter for Apache Zeppelin

【讨论】:

我也刚刚发现这是问题的原因)没有看到您的答案,但它很有帮助。谢谢!

以上是关于Apache Zeppelin 与 Ignite 集成时出现“无法启动 Ignite 节点”错误的主要内容,如果未能解决你的问题,请参考以下文章

将 Apache Cassandra 与 Apache Ignite 集成

apache ignite系列: 简介

Apache Spark 与 Apache Ignite [关闭]

索引 Apache Ignite 缓存与优化的内存 CassandraDB

将 d3.js 与 Apache Zeppelin 一起使用

Apache Zeppelin 与 Athena 使用 jdbc 解释器处理会话令牌