簡體   English   中英

如何使用Redis和Flask連接Storm和D3.js?

[英]How can I connect Storm and D3.js using Redis and Flask?

我已經完成了Storm測試拓撲,並且在Html代碼上創建d3腳本之前,該腳本從文本文件讀取了數據。 我現在希望它直接從Storm拓撲中讀取數據(也許是螺栓?),但是我不知道如何執行此操作。 我正在使用Horton Works Sandbox進行測試,將不勝感激。

提前致謝!

我找到了一個現在要使用的Redis風暴軟件包。 它允許您設置用於在Redis上寫入的螺栓,並且我已經設置了節點。 我現在的問題是eclipse找不到java代碼以及pom.xml上的導入。我已經下載了該軟件包。 我當前的java螺栓和導入是:

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找不到依賴項和軟件包

根據您的情況,我認為您將需要一些系統或代碼來從Storm讀取數據並將其推送到D3。 您可以試用WSO2 CEP [1]之類的東西,它可以連接到Storm,並使用websocket將事件推送到基於d3 [2]的儀表板。

在您的方案中,您可以將Storm螺栓中的邏輯映射到Siddhi查詢[3],然后將這些事件從Storm傳遞到WSO2 CEP。 然后,您可以創建一個websocket發布者,以使用服務器的內置websocket功能將事件發送到D3代碼。

請注意,這是根據您的要求提供的可能解決方案之一,您最好利用已集成到Storm和D3中的現有CEP系統的功能。

希望這可以幫助!

[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

我現在有點晚了,差不多一年了,但是我正在查看我的帳戶,看到了這個問題。

最終,我使用了與Jedis交互的Redis,並將其作為Maven工件導入。 一旦工作正常,我就可以通過telnet在Redis Monitor上查看結果,我創建了一個簡單的Node.js代碼,啟動了該代碼,然后數據到達了客戶端,因此到達了d3。 我需要Socket.io和Redis.js來實現此目的,但是現在可以正常工作。

如果有人需要一些細節,請問我,我會很高興為您提供幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM