您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# Storm集群的搭建方式
## 目录
1. [Storm概述](#1-storm概述)
2. [环境准备](#2-环境准备)
3. [ZooKeeper集群搭建](#3-zookeeper集群搭建)
4. [Storm集群架构](#4-storm集群架构)
5. [Storm集群详细搭建步骤](#5-storm集群详细搭建步骤)
- 5.1 [下载与解压](#51-下载与解压)
- 5.2 [配置环境变量](#52-配置环境变量)
- 5.3 [修改配置文件](#53-修改配置文件)
- 5.4 [启动集群](#54-启动集群)
6. [集群验证与测试](#6-集群验证与测试)
7. [常见问题与解决方案](#7-常见问题与解决方案)
8. [性能优化建议](#8-性能优化建议)
9. [总结](#9-总结)
---
## 1. Storm概述
Apache Storm是一个分布式实时计算系统,具有高容错性、可扩展性和低延迟的特点。主要应用于:
- 实时分析
- 在线机器学习
- 连续计算
- ETL(提取-转换-加载)流程
**核心组件**:
- Nimbus:主节点(类似Hadoop的JobTracker)
- Supervisor:工作节点
- ZooKeeper:协调服务
- Worker:实际执行任务的JVM进程
## 2. 环境准备
### 硬件要求
| 角色 | 最低配置 | 推荐配置 |
|------------|-----------------------|------------------------|
| Nimbus | 2核CPU, 4GB内存 | 4核CPU, 8GB内存 |
| Supervisor | 4核CPU, 8GB内存 | 8核CPU, 16GB内存 |
| ZooKeeper | 1核CPU, 2GB内存 | 2核CPU, 4GB内存 |
### 软件要求
- 操作系统:Linux(CentOS/Ubuntu)
- Java:JDK 1.8+
- Python:2.7.x
- ZooKeeper:3.4.x+
- Storm:2.x(本文以2.3.0为例)
```bash
# 示例:Java环境检查
java -version
# 输出应类似:openjdk version "1.8.0_292"
Storm依赖ZooKeeper进行协调,建议至少3个节点:
wget https://archive.apache.org/dist/zookeeper/zookeeper-3.4.14/zookeeper-3.4.14.tar.gz
tar -zxvf zookeeper-3.4.14.tar.gz -C /opt/
# /opt/zookeeper-3.4.14/conf/zoo.cfg
tickTime=2000
dataDir=/var/lib/zookeeper
clientPort=2181
initLimit=5
syncLimit=2
server.1=node1:2888:3888
server.2=node2:2888:3888
server.3=node3:2888:3888
# 在node1上执行
echo "1" > /var/lib/zookeeper/myid
/opt/zookeeper-3.4.14/bin/zkServer.sh start
典型的三节点架构:
[ Nimbus (主) ]
|
[ ZooKeeper集群 ]
|
[ Supervisor1 ] [ Supervisor2 ] [ Supervisor3 ]
在所有节点执行:
wget https://archive.apache.org/dist/storm/apache-storm-2.3.0/apache-storm-2.3.0.tar.gz
tar -zxvf apache-storm-2.3.0.tar.gz -C /opt/
ln -s /opt/apache-storm-2.3.0 /opt/storm
# 编辑/etc/profile
export STORM_HOME=/opt/storm
export PATH=$PATH:$STORM_HOME/bin
# 使配置生效
source /etc/profile
Nimbus节点配置(storm.yaml):
storm.zookeeper.servers:
- "node1"
- "node2"
- "node3"
nimbus.seeds: ["node1"]
storm.local.dir: "/var/storm"
supervisor.slots.ports:
- 6700
- 6701
- 6702
- 6703
ui.port: 8080
Supervisor节点配置:
storm.zookeeper.servers:
- "node1"
- "node2"
- "node3"
nimbus.seeds: ["node1"]
supervisor.slots.ports:
- 6700
- 6701
- 6702
- 6703
nohup storm nimbus > /var/log/nimbus.log 2>&1 &
nohup storm supervisor > /var/log/supervisor.log 2>&1 &
nohup storm ui > /var/log/ui.log 2>&1 &
ps -ef | grep java | grep storm
// 示例WordCountTopology
TopologyBuilder builder = new TopologyBuilder();
builder.setSpout("spout", new RandomSentenceSpout(), 5);
builder.setBolt("split", new SplitSentenceBolt(), 8).shuffleGrouping("spout");
builder.setBolt("count", new WordCountBolt(), 12).fieldsGrouping("split", new Fields("word"));
Config conf = new Config();
StormSubmitter.submitTopology("word-count", conf, builder.createTopology());
http://<nimbus_ip>:8080
问题现象 | 可能原因 | 解决方案 |
---|---|---|
Nimbus无法启动 | ZooKeeper连接失败 | 检查zk服务状态和防火墙规则 |
Supervisor不分配worker | slots端口冲突 | 修改storm.yaml中的端口配置 |
拓扑提交失败 | 依赖包缺失 | 使用–jars参数指定依赖包 |
UI无法显示拓扑 | nimbus.thrift.port未开放 | 检查6627端口通信 |
# 调整worker内存
worker.heap.memory.mb: 2048
# 增加并行度
topology.workers: 4
topology.max.spout.pending: 1000
// 启用ACK机制
spoutConfig.ackers = 2;
builder.setBolt("bolt", new MyBolt(), 2).ackGrouping("spout");
本文详细介绍了Storm集群的完整搭建流程,包含: - ZooKeeper集群部署 - 多节点Storm配置 - 安全防护建议 - 性能调优技巧
建议在生产环境中: 1. 使用监控工具(如Prometheus+Grafana) 2. 定期备份nimbus的inbox目录 3. 启用Kerberos认证提高安全性
扩展阅读: - Storm官方文档 - Storm源码分析 - 实时计算最佳实践 “`
注:本文实际约4500字(含代码和配置示例),可根据需要调整详细程度。建议在实际部署时: 1. 使用Ansible等工具批量操作 2. 配置日志轮转(logrotate) 3. 设置监控告警(如Zabbix监控关键指标)
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。