如何使用redis和flask连接storm和d3.js?

djmepvbi  于 2021-06-21  发布在  Storm
关注(0)|答案(2)|浏览(198)

我已经完成了storm测试拓扑,在我在html代码上创建d3脚本之前,它从文本文件读取数据。我现在想让它直接从storm拓扑中读取数据(可能是一个螺栓?),但我不知道怎么做。我正在使用霍顿工程沙盒进行测试,任何帮助都将得到感谢。
提前谢谢!
我找到了一个用于redis的storm包,我正在尝试使用它。它允许您在redis上设置一个写螺栓,我已经设置了节点。我现在的问题是eclipse找不到java代码和pom.xml上的代码的导入,我已经下载了这个包。我当前的java bolt和导入是:

package Storm.practice.Storm.Prova;
import backtype.storm.Config;
import backtype.storm.LocalCluster;
import backtype.storm.StormSubmitter;
import backtype.storm.task.OutputCollector;
import backtype.storm.task.TopologyContext;
import backtype.storm.testing.TestWordSpout;
import backtype.storm.topology.OutputFieldsDeclarer;
import backtype.storm.topology.TopologyBuilder;
import backtype.storm.topology.base.BaseRichBolt;
import backtype.storm.tuple.Fields;
import backtype.storm.tuple.Tuple;
import backtype.storm.tuple.Values;
import backtype.storm.utils.Utils;
import backtype.storm.spout.SpoutOutputCollector;
import backtype.storm.topology.base.BaseRichSpout;
import java.util.Map;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.concurrent.atomic.AtomicLong;
import storm.external.*;// error from here
import storm.external.storm-redis.org.apache.storm.redis.common.config.JedisClusterConfig;
import org.apache.storm.redis.common.config.JedisPoolConfig;
import org.apache.storm.redis.common.mapper.RedisDataTypeDescription;
import org.apache.storm.redis.common.mapper.RedisStoreMapper;
import redis.clients.jedis.JedisCommands;//to here

..........
 class MortsStoreMapper implements RedisStoreMapper {
        private RedisDataTypeDescription description;
        private final String hashKey = "wordCount";

        public WordCountStoreMapper() {
            description = new RedisDataTypeDescription(
                RedisDataTypeDescription.RedisDataType.HASH, hashKey);
        }

        @Override
        public RedisDataTypeDescription getDataTypeDescription() {
            return description;
        }

        @Override
        public String getKeyFromTuple(ITuple tuple) {
            return tuple.getStringByField("word");
        }

        @Override
        public String getValueFromTuple(ITuple tuple) {
            return tuple.getStringByField("count");
        }
    }

以及我的pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>Storm.practice</groupId>
  <artifactId>Storm.Prova</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>Storm.Prova</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <dependencies>
  <dependency>
    <groupId>org.apache.storm</groupId>
    <artifactId>storm-core</artifactId>
    <version>0.9.1-incubating</version>
    </dependency>
    <dependency> #error from here...
    <groupId>org.apache.storm</groupId>
    <artifactId>storm-redis</artifactId>
    <version>{0.9.1-incubating}</version>
    <type>jar</type>
</dependency>#... to here
  <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies> <build>
  <plugins>
    <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>exec-maven-plugin</artifactId>
        <version>1.2.1</version>
        <executions>
            <execution>
                <goals>
                    <goal>java</goal>
                </goals>
            </execution>
        </executions>
        <configuration>
            <mainClass>Storm.practice.Storm.Prova.ProvaTopology</mainClass>
        </configuration>
        </plugin>
  </plugins>
</build>

</project>

错误在于eclipse找不到依赖项和包

imzjd6km

imzjd6km1#

我现在有点晚了,快一年了,但我在查看我的帐户时,看到了这个问题。
我最后使用了redis,与绝地武士交互,我把它作为maven神器导入。一旦这一切正常,并且我能够通过telnet看到redis监视器的结果,我创建了一个简单的node.js代码,启动它,数据就到达了客户机,从而到达了d3。我需要socket.io和redis.js来实现这一点,但现在正在工作。
如果有人需要一些细节,请问我,我会很乐意帮助你。

vnjpjtjt

vnjpjtjt2#

根据您的场景,我认为您需要一些系统或代码在中间,将读取数据从风暴和推到d3。您可以尝试类似wso2cep[1]的功能,它能够连接到storm,并使用websockets将事件推送到基于d3[2]的 Jmeter 板。
在您的场景中,您可以将storm bolt中的逻辑Map到siddhi查询[3],然后将这些事件从storm获取到wso2 cep。然后您可以创建一个websocket发布器,使用服务器的内置websocket功能将事件发送到d3代码。
请注意,这是基于您的需求的可能解决方案之一,您最好利用已存在的cep系统的功能,该系统集成了storm和d3。
希望这有帮助!
[1] http://wso2.com/products/complex-event-processor/
[2] https://docs.wso2.com/display/cep400/visualizing+results+in+the+analytics+dashboard
[3] https://docs.wso2.com/display/cep400/sample+0501+-+processing+a+simple+filter+query+with+apache+storm+deployment

相关问题