Storm是Twitter开源的分布式实时大数据处理框架,被业界称为实时版Hadoop。按照storm作者的说法,Storm对于实时计算的意义类似于Hadoop对于批处理的意义。 应用场景包括推荐系统(实时推荐,根据下单或加入购物车推荐相关商品)、金融系统、预警系统、网站统计(实时销量、流量统计,如淘宝双11效果图)、交通路况实时系统等等。 storm一般从日志系统通过kafka收集数据,然后对数据进行处理运算(运算可以结合数据库以及hdfs的存量数据),不断将运算结果写入redis,然后需要展示这个运算结果的系统从redis读取数据。运算结果写入redis和读取展示运算结果是不断重复的(例如1秒一次),这样能实时观察数据的变化。例如双十一的销售额会不断增长,那么storm就要不断解析日志累加销售额,展示页面也要不断读取redis最新的销售额。 twitter和微博实时统计热搜也是一样,实时分析日志才能发现今天的高频词是哪个。 也可以用于埋点收集日志,用户做某个动作,会触发在日志里打印出某个关键字,通过对关键字的统计,可以实时分析用户行为特征。 本文演示安装单机storm系统,并运行内置的示例程序。分为四个步骤:
安装Java环境
[root@localhost strom]# yum install java-1.7.0-openjdk java-1.7.0-openjdk-devel
env没有JAVA_HOME变量,因此要自己配置该变量。查找jdk安装目录。
[root@localhost strom]# find / -name java-1.7.0-openjdk
/usr/lib/jvm/java-1.7.0-openjdk
在/root目录下编辑.bashrc
[root@localhost ~]# vi .bashrc
# .bashrc
# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
#文件末尾加上JAVA_HOME变量
export JAVA_HOME=/usr/lib/jvm/java-1.7.0-openjdk
使环境变量生效
[root@localhost ~]# source .bashrc
检查是否有JAVA_HOME变量
[root@localhost ~]# env | grep JAVA
JAVA_HOME=/usr/lib/jvm/java-1.7.0-openjdk
安装 Zookeeper
下载zookeeper-3.4.6.tar.gz,上传到服务器,解压
[root@localhost strom]# tar -zxf zookeeper-3.4.6.tar.gz
进入zookeeper的conf文件夹
[root@localhost conf]# cp zoo_sample.cfg zoo.cfg
然后vi zoo.cfg
修改dataDir目录为你希望的目录
# example sakes.
dataDir=/home/strom/zookeeper-3.4.6/data
启动zookeeper
[root@localhost bin]# ./zkServer.sh start
JMX enabled by default
Using config: /home/strom/zookeeper-3.4.6/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
安装Storm(单机)
下载apache-storm-0.9.6.tar.gz 上传服务器,解压
[root@localhost strom]# tar -zxf apache-storm-0.9.6.tar.gz
进入storm的conf目录,修改storm.yaml文件,地址改成127.0.0.1,ui端口改成8888
[root@localhost conf]# vi storm.yaml
storm.zookeeper.servers:
- "127.0.0.1"
# - "server2"
#
nimbus.host: "127.0.0.1"
ui.port: 8888
bin目录下依次启动storm nimbus、storm supervisor、storm ui
[root@localhost bin]# ./storm nimbus
Running: /usr/lib/jvm/java-1.7.0-openjdk/bin/j
。。。
-Dlogback.configurationFile=/home/strom/apache-storm-0.9.6/logback/cluster.xml backtype.storm.daemon.nimbus
[root@localhost bin]# ./storm supervisor
Running: /usr/lib/jvm/java-1.7.0-openjdk/bin/java -server -Dstorm.options= -Dstorm.home=/home/strom/apache-storm-0.9.6 -Dstorm.log.dir=/home/strom/apache-storm-0.9.6/logs -Djava.library.path=/usr/local/lib:/opt/local/lib:/usr/lib -Dstorm.conf.file= -cp /home/strom/apache-storm-0.9.6/lib/storm-core-0.9.6.jar:/home/strom/apache-storm-0.9.6/lib/clojure-1.5.1.jar:/home/strom/apache-storm-0.9.6/lib/clj-time-0.4.1.jar:/home/strom/apache-storm-
.name=supervisor.log -Dlogback.configurationFile=/home/strom/apache-storm-0.9.6/logback/cluster.xml backtype.storm.daemon.supervisor
[root@bogon bin]# ./storm ui
Running: /usr/lib/jvm/java-1.7.0-openjdk/bin/java -server -Dstorm.options= -Dstorm.home=/home/strom/apache-storm-0.9.6 -Dstorm.log.dir=/home/strom/apache-storm-0.9.6
conf -Xmx768m -Dlogfile.name=ui.log -Dlogback.configurationFile=/home/strom/apache-storm-0.9.6/logback/cluster.xml backtype.storm.ui.core
浏览器输入IP:8888可以打开UI界面。
如果访问UI打不开一般是防火墙没关闭,systemctl stop firewalld临时关闭防火墙试试。
下图描述了几个角色之间的关系
运行Storm实例-WordCount
运行内置示例,示例程序不断地取如下语句作为数据源,然后统计单词出现的次数。后面加上grep the是筛选统计结果关于the这个单词的次数。该程序执行10秒后会自动关闭。 { "the cow jumped over the moon", "an apple a day keeps the doctor away", "four score and seven years ago", "snow white and the seven dwarfs", "i am at two with nature" }
[root@bogon apache-storm-0.9.6]# ./bin/storm jar ./examples/storm-starter/storm-starter-topologies-0.9.6.jar storm.starter.WordCountTopology |grep 'Thread-[0-9]*-count' | grep the
33663 [Thread-11-count] INFO backtype.storm.daemon.executor - Processing received message source: split:7, stream: default, id: {}, ["the"]
33663 [Thread-11-count] INFO backtype.storm.daemon.task - Emitting: count default [the, 1]
33672 [Thread-11-count] INFO backtype.storm.daemon.executor - Processing received message source: split:6, stream: default, id: {}, ["the"]
33672 [Thread-11-count] INFO backtype.storm.daemon.task - Emitting: count default [the, 2]
33678 [Thread-11-count] INFO backtype.storm.daemon.executor - Processing received message source: split:6, stream: default, id: {}, ["the"]
33678 [Thread-11-count] INFO backtype.storm.daemon.task - Emitting: count default [the, 3]
其它版本的安装包不一定能安装成功。请严格按照文中版本下载安装包,操作系统为Redhat7.6,我安装其它版本时遇到的报错为
Error: Could not find or load main class org.apache.zookeeper.server.quorum.QuorumPeerMain
如果自行开发storm程序,需要创建maven工程,按storm要求写spout,bolt,然后打包上传,运行测试。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有