当前位置: 首页 > news >正文

保姆级教程:在Ubuntu 20.04上从零搭建三节点Storm集群(含Zookeeper配置与WordCount实例)

保姆级教程:在Ubuntu 20.04上从零搭建三节点Storm集群(含Zookeeper配置与WordCount实例)

当你第一次接触分布式计算框架时,那种既兴奋又忐忑的心情我深有体会。三台机器,一堆配置,数不清的终端窗口——稍有不慎就会陷入无尽的排错循环。但别担心,这篇教程会像老友聊天一样,带你轻松走过每个关键步骤。我们会从最基础的系统准备开始,直到成功运行经典的WordCount示例,过程中每个命令都会解释清楚它的作用,让你真正理解而不仅仅是复制粘贴。

1. 环境准备与基础配置

在开始之前,确保你有三台运行Ubuntu 20.04的机器(或虚拟机)。物理机还是云实例并不重要,关键是要保证它们之间能够互相通信。我强烈建议给每台机器至少2GB内存,因为Zookeeper和Storm服务对内存有一定需求。

1.1 系统更新与必要工具安装

首先,我们需要在所有三台机器上执行系统更新并安装一些基础工具:

sudo apt update && sudo apt upgrade -y sudo apt install -y openjdk-8-jdk ssh vim net-tools

为什么选择Java 8?因为Storm对Java版本比较敏感,Java 8是最稳定的选择。安装完成后,验证Java版本:

java -version

你应该看到类似"openjdk version "1.8.0_xxx"的输出。如果系统中有多个Java版本,可以用以下命令设置默认版本:

sudo update-alternatives --config java

1.2 主机名与hosts文件配置

清晰的网络标识是集群搭建的关键。我们先为每台机器设置独特的主机名:

# 在第一台机器上执行 sudo hostnamectl set-hostname storm1 # 在第二台机器上执行 sudo hostnamectl set-hostname storm2 # 在第三台机器上执行 sudo hostnamectl set-hostname storm3

然后,在所有三台机器上编辑/etc/hosts文件,添加如下内容(假设实际IP地址为192.168.1.101-103):

192.168.1.101 storm1 192.168.1.102 storm2 192.168.1.103 storm3

提示:可以使用ifconfigip a命令查看本机IP地址,确保hosts文件中的IP与实际一致。

1.3 SSH免密登录配置

Storm节点间需要通过SSH通信,配置免密登录可以避免频繁输入密码。在所有机器上执行:

ssh-keygen -t rsa -P "" -f ~/.ssh/id_rsa cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys

然后将每台机器的公钥互相拷贝。例如,在storm1上执行:

ssh-copy-id storm2 ssh-copy-id storm3

在storm2和storm3上重复类似操作。完成后,尝试互相SSH登录验证是否不再需要密码。

2. Zookeeper集群部署

Storm依赖Zookeeper进行协调服务,我们先搭建一个三节点的Zookeeper集群。

2.1 Zookeeper安装与配置

在所有节点下载并解压Zookeeper:

wget https://downloads.apache.org/zookeeper/zookeeper-3.7.0/apache-zookeeper-3.7.0-bin.tar.gz tar -xzf apache-zookeeper-3.7.0-bin.tar.gz mv apache-zookeeper-3.7.0-bin /opt/zookeeper

创建数据和日志目录:

mkdir -p /opt/zookeeper/data mkdir -p /opt/zookeeper/logs

配置Zookeeper。首先复制示例配置文件:

cp /opt/zookeeper/conf/zoo_sample.cfg /opt/zookeeper/conf/zoo.cfg

然后编辑/opt/zookeeper/conf/zoo.cfg,修改以下内容:

dataDir=/opt/zookeeper/data dataLogDir=/opt/zookeeper/logs server.1=storm1:2888:3888 server.2=storm2:2888:3888 server.3=storm3:2888:3888

2.2 设置myid文件

在每个节点的data目录下创建myid文件,内容分别为1、2、3:

# 在storm1上执行 echo "1" > /opt/zookeeper/data/myid # 在storm2上执行 echo "2" > /opt/zookeeper/data/myid # 在storm3上执行 echo "3" > /opt/zookeeper/data/myid

2.3 启动与验证Zookeeper集群

在所有节点启动Zookeeper服务:

/opt/zookeeper/bin/zkServer.sh start

检查状态,应该能看到"Mode: follower"或"Mode: leader":

/opt/zookeeper/bin/zkServer.sh status

如果看到错误,可以检查日志文件/opt/zookeeper/logs/zookeeper.out。常见问题包括防火墙阻止了端口通信(2888和3888需要开放),或者myid文件配置不正确。

3. Storm集群部署

现在我们来部署Storm集群,包含一个Nimbus节点和两个Supervisor节点。

3.1 Storm安装与基础配置

在所有节点下载并解压Storm:

wget https://downloads.apache.org/storm/apache-storm-2.3.0/apache-storm-2.3.0.tar.gz tar -xzf apache-storm-2.3.0.tar.gz mv apache-storm-2.3.0 /opt/storm

设置环境变量,编辑~/.bashrc添加:

export STORM_HOME=/opt/storm export PATH=$PATH:$STORM_HOME/bin

然后执行source ~/.bashrc使配置生效。

3.2 配置Storm集群

在Nimbus节点(假设为storm1)上配置/opt/storm/conf/storm.yaml:

storm.zookeeper.servers: - "storm1" - "storm2" - "storm3" nimbus.seeds: ["storm1"] storm.local.dir: "/opt/storm/data" supervisor.slots.ports: - 6700 - 6701 - 6702 - 6703

在Supervisor节点(storm2和storm3)上,storm.yaml配置基本相同,但不需要nimbus.seeds配置。

3.3 启动Storm服务

在Nimbus节点(storm1)上启动:

nimbus & ui & logviewer &

在Supervisor节点(storm2和storm3)上启动:

supervisor & logviewer &

验证集群状态,访问Nimbus节点的Web UI(默认端口8080):

http://storm1:8080

你应该能看到两个Supervisor节点已注册,并有可用的worker slots。

4. 运行WordCount示例

现在我们来运行Storm的经典WordCount示例,验证集群是否正常工作。

4.1 准备示例项目

在Nimbus节点上,下载示例代码:

git clone https://github.com/apache/storm-starter.git cd storm-starter mvn clean install -DskipTests=true

4.2 提交拓扑到集群

提交WordCount拓扑:

storm jar target/storm-starter-*.jar org.apache.storm.starter.WordCountTopology wordcount

在Storm UI中,你应该能看到名为"wordcount"的拓扑正在运行。点击拓扑名称可以查看详细的执行情况和统计信息。

4.3 查看运行结果

Storm的日志通常位于各节点的/opt/storm/logs目录下。查看worker日志可以看到单词计数的输出:

tail -f /opt/storm/logs/workers-artifacts/wordcount-*/worker.log | grep "Thread-25"

你应该能看到类似这样的输出:

DEBUG: [the, 23] DEBUG: [storm, 45] DEBUG: [hello, 12]

4.4 停止拓扑

当你想停止拓扑时,可以使用:

storm kill wordcount

记得在测试完成后停止拓扑,释放集群资源。

http://www.jsqmd.com/news/827832/

相关文章:

  • 绕过硬件限制:Win11 22H2 升级安装的实战技巧与避坑指南
  • 构建多模型备选策略以提升AI应用服务稳定性
  • Akebi-GC终极指南:如何通过内存注入技术打造游戏增强体验
  • 东南亚1.5亿数字钱包用户如何覆盖?Antom收单解决方案拆解
  • 2025届必备的五大降AI率平台解析与推荐
  • Kubernetes 代理安全沙盒:从特权容器到最小权限的云原生安全实践
  • 如何在5分钟内免费下载B站大会员4K高清视频:完整专业指南
  • ARMv8浮点运算单元与MVFR寄存器深度解析
  • 产后修复资源合集
  • 这款降AI工具说自研结果跟ChatGPT改完一模一样!1000字试用就看出AI率降幅
  • 如何永久保存B站缓存视频:m4s-converter完整教程
  • 从mitsuhiko/agent-stuff看如何构建健壮的自动化智能体系统
  • 罗技鼠标压枪宏终极配置指南:从零掌握绝地求生精准射击
  • GPT-Image-2安全机制深度解析
  • 从安装到精通:Beyond Compare 4在Deepin/UOS系统下的完整配置与高阶使用技巧
  • 5分钟掌握Windows和Office永久激活:KMS_VL_ALL_AIO终极指南
  • 2026电商商家制作带货数字人:5大关键能力筛选平台避坑指南
  • 构建现代化个人作品集操作系统:从设计到部署的完整指南
  • Diablo Edit2:5分钟掌握暗黑破坏神II角色编辑器的终极完整指南
  • 在杭州卖黄金怎么选不收亏?这6家机构跑一趟就清楚了 - 福正美黄金回收
  • 2026-05-12-运放交流耦合电容选型
  • 仅 4 秒!离线边缘 AI 相机,精准识别美洲狮,野外无人值守也能用
  • 四维提升法:用Seraphine打造你的英雄联盟智能排位体验
  • Harness Engineering:连接模型能力与业务价值的桥梁
  • 比特币钱包密码与助记词恢复终极指南:如何找回丢失的加密资产
  • 终极免费解锁:百度网盘Mac版SVIP功能完整破解指南
  • 如何在Windows 11上完美运行经典游戏:DDrawCompat完整指南
  • NotebookLM赋能地理科研:3步实现遥感数据自动解读与空间推理(附实测对比数据)
  • 从功能测试到测试开发,薪资翻倍的秘密都在这里
  • 本科毕业论文文献综述部分怎么写?