Storm 单机和集群环境部署教程


下面是关于 Storm 的单机和集群环境部署教程,以及部署过程中的注意事项和 Java、Python 的使用案例。


一、Storm 单机环境部署

1. 环境准备

  • 操作系统:Linux(推荐 Ubuntu 20.04 或 CentOS 7)
  • Java:Storm 需要 Java 环境,推荐使用 OpenJDK 8 或 11。
  • ZooKeeper:Storm 依赖 ZooKeeper,需要安装和配置 ZooKeeper。

2. 安装 Java

在 Ubuntu 中:

sudo apt update
sudo apt install openjdk-11-jdk

在 CentOS 中:

sudo yum install java-11-openjdk

验证 Java 安装:

java -version

3. 安装 ZooKeeper

参考之前的 ZooKeeper 部署教程,安装并启动 ZooKeeper。

4. 下载并解压 Storm

访问 Storm 官方网站 下载最新版本的 Storm。

wget https://downloads.apache.org/storm/apache-storm-2.4.0/apache-storm-2.4.0.tar.gz
tar -xzvf apache-storm-2.4.0.tar.gz
mv apache-storm-2.4.0 /usr/local/storm

5. 配置 Storm

  1. 编辑配置文件 storm.yaml

    /usr/local/storm/conf/storm.yaml 中添加以下内容:

    storm.zookeeper.servers:
      - "localhost"
    
    nimbus.seeds: ["localhost"]
    
    storm.local.dir: "/usr/local/storm/data"
    
    supervisor.slots.ports:
      - 6700
      - 6701
      - 6702
      - 6703
    
  2. 配置环境变量

    编辑 ~/.bashrc 文件,添加以下内容:

    export STORM_HOME=/usr/local/storm
    export PATH=$PATH:$STORM_HOME/bin
    

    然后加载配置:

    source ~/.bashrc
    

6. 启动 Storm

  1. 启动 Nimbus(主节点)

    storm nimbus &
    
  2. 启动 Supervisor(工作节点)

    storm supervisor &
    
  3. 启动 UI 服务

    storm ui &
    
  4. 启动 Logviewer 服务(可选)

    storm logviewer &
    

7. 验证 Storm 是否正常运行

访问 Storm UI 界面 http://localhost:8080,可以查看集群的运行状态。

8. Storm 单机部署的注意事项

  • Java 版本:确保 Java 环境配置正确。
  • ZooKeeper:确保 ZooKeeper 服务正常运行,且 Storm 能够连接到 ZooKeeper。
  • 内存与资源配置:根据机器配置调整 Storm 的内存和资源使用。
  • 日志管理:配置 Logviewer 并监控日志文件。

二、Storm 集群环境部署

1. 环境准备

  • 多台服务器:至少 3 台(推荐 5 台以上,1 台作为 Nimbus,其他作为 Supervisor)
  • 操作系统:Linux(推荐 Ubuntu 20.04 或 CentOS 7)
  • Java:在所有节点上安装 Java
  • ZooKeeper:在集群中安装并配置 ZooKeeper

2. 配置 Storm 集群

2.1 安装 Storm

在每台服务器上安装 Storm(参考单机环境部署的步骤)。

2.2 配置 Nimbus 节点

在 Nimbus 节点上编辑 storm.yaml 文件:

storm.zookeeper.servers:
  - "zookeeper1"
  - "zookeeper2"
  - "zookeeper3"

nimbus.seeds: ["nimbus-node"]

storm.local.dir: "/usr/local/storm/data"
storm.cluster.mode: "distributed"

supervisor.slots.ports:
  - 6700
  - 6701
  - 6702
  - 6703
2.3 配置 Supervisor 节点

在每个 Supervisor 节点上编辑 storm.yaml 文件:

storm.zookeeper.servers:
  - "zookeeper1"
  - "zookeeper2"
  - "zookeeper3"

nimbus.seeds: ["nimbus-node"]

storm.local.dir: "/usr/local/storm/data"
storm.cluster.mode: "distributed"

supervisor.slots.ports:
  - 6700
  - 6701
  - 6702
  - 6703
2.4 启动 Storm 集群

在 Nimbus 节点上启动 Nimbus 和 UI 服务:

storm nimbus &
storm ui &

在每个 Supervisor 节点上启动 Supervisor 服务:

storm supervisor &

3. 验证 Storm 集群状态

访问 Nimbus 节点的 Storm UI 界面 http://nimbus-node:8080,可以查看集群中所有 Supervisor 节点的状态。

4. Storm 集群部署的注意事项

  • ZooKeeper 配置:确保所有 Storm 节点可以正常连接 ZooKeeper。
  • 网络和端口:确保 Nimbus 和 Supervisor 节点之间的网络连接正常,端口未被防火墙阻挡。
  • 内存与资源配置:根据节点硬件配置合理分配内存和 CPU 资源,避免资源不足或浪费。
  • 监控与日志管理:使用监控工具监控 Storm 集群状态,并配置日志收集和分析工具。

三、Storm 使用案例

1. Java 示例:编写简单的 Storm Topology

1.1 添加 Maven 依赖

pom.xml 中添加 Storm 依赖:

<dependencies>
    <dependency>
        <groupId>org.apache.storm</groupId>
        <artifactId>storm-core</artifactId>
        <version>2.4.0</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.7.30</version>
    </dependency>
</dependencies>
1.2 实现一个简单的 Topology
import org.apache.storm.Config;
import org.apache.storm.LocalCluster;
import org.apache.storm.topology.TopologyBuilder;
import org.apache.storm.tuple.Fields;
import org.apache.storm.utils.Utils;

public class WordCountTopology {

    public static void main(String[] args) {
        // 创建TopologyBuilder
        TopologyBuilder builder = new TopologyBuilder();

        // 设置Spout和Bolt
        builder.setSpout("spout", new RandomSentenceSpout());
        builder.setBolt("split", new SplitSentenceBolt()).shuffleGrouping("spout");
        builder.setBolt("count", new WordCountBolt()).fieldsGrouping("split", new Fields("word"));

        // 配置
        Config config = new Config();
        config.setDebug(true);

        // 本地模式运行
        LocalCluster cluster = new LocalCluster();
        cluster.submitTopology("word-count", config, builder.createTopology());

        // 运行一段时间后关闭
        Utils.sleep(10000);
        cluster.shutdown();
    }
}

2. Python 示例:使用 streamparse 编写简单的 Storm Topology

2.1 安装 streamparse
pip install streamparse
2.2 创建 Storm Topology
  1. 创建项目

    sparse quickstart word_count
    cd word_count
    sparse run
    
  2. 编辑 word_count/word_count/spouts/words.py

    from streamparse import Spout
    
    class WordSpout(Spout):
        def next_tuple(self):
            words = ["stream", "parse", "storm", "python", "topology"]
            self.emit([random.choice(words)])
    
  3. 编辑 word_count/word_count/bolts/wordcount.py

    from collections import Counter
    from streamparse import Bolt
    
    class WordCountBolt(Bolt):
        def initialize(self, conf, ctx):
            self.counts = Counter()
    
        def process(self, tup):
            word = tup.values[0]
            self.counts[word] += 1
            self.emit([word, self.counts[word]])
            self.log('%s: %d' % (word, self.counts[word]))
    
  4. 编辑 word_count/word_count/topologies/wordcount.py

    from streamparse import Grouping, Topology
    from spouts.words import WordSpout
    from bolts.wordcount import WordCountBolt
    
    class WordCountTopology(Topology):
        word_spout = WordSpout.spec()
        count_bolt = WordCountBolt.spec(inputs=[word_spout], groupings={WordCountBolt: Grouping.fields('word')})
    
  5. 运行 Topology

    sparse submit
    
    
    

总结

通过以上步骤,我们完成了 Storm 的单机和集群环境部署,并实现了 Java 和 Python 的简单 Topology 示例。Storm 作为一款分布式实时计算系统,能够处理大量的实时数据流,广泛应用于实时数据分析、监控和处理场景。

部署过程中的注意事项

  • ZooKeeper 配置:确保 Storm 集群能够正常连接 ZooKeeper。
  • 资源管理:根据实际应用场景合理配置内存和 CPU 资源,避免资源浪费或不足。
  • 网络配置:确保所有节点之间的网络连接正常,端口开放。
  • 监控和日志管理:配置监控工具和日志分析工具,及时发现和处理问题,保障 Storm 集群的稳定运行。
  • 16
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

闲人编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值