storm安装教程
Storm是Twitter开源的分布式实时大数据处理框架,被业界称为实时版Hadoop。按照storm作者的说法,Storm对于实时计算的意义类似于Hadoop对于批处理的意义。 应用场景包括推荐系统(实时推荐,根据下单或加入购物车推荐相关商品)、金融系统、预警系统、网站统计(实时销量、流量统计,如淘宝双11效果图)、交通路况实时系统等等。 storm一般从日志系统通过kafka收集数据,然后对数据进行处理运算(运算可以结合数据库以及hdfs的存量数据),不断将运算结果写入redis,然后需要展示这个运算结果的系统从redis读取数据。运算结果写入redis和读取展示运算结果是不断重复的(例如1秒一次),这样能实时观察数据的变化。例如双十一的销售额会不断增长,那么storm就要不断解析日志累加销售额,展示页面也要不断读取redis最新的销售额。 twitter和微博实时统计热搜也是一样,实时分析日志才能发现今天的高频词是哪个。 也可以用于埋点收集日志,用户做某个动作,会触发在日志里打印出某个关键字,通过对关键字的统计,可以实时分析用户行为特征。 本文演示安装单机storm系统,并运行内置的示例程序。分为四个步骤:
- 安装Java环境
- 安装 Zookeeper
- 安装Storm(单机)
- 运行Storm实例-WordCount
安装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,然后打包上传,运行测试。
- Logistic回归实战篇之预测病马死亡率(一)
- 腾讯游戏DBA利刃 - SQL审核工具介绍
- Logistic回归实战篇之预测病马死亡率(二)
- Windows环境下跑通Truffle开发环境
- Logistic回归实战篇之预测病马死亡率(三)
- 如何将finecms链接URL中的list和show去掉
- Solidity语法知识点(文末有彩蛋)
- 人脸Haar特征与快速计算神器:积分图
- 内存为王:DBIM RAC Share Nothing架构的挑战和解决方案
- 调用finecms栏目多图怎么实现
- phpcms调用子栏目名称/文章怎么操作
- 小程序开发工具全新上线 附下载地址和教程
- JS页面跳转代码怎么写?总结了5种方法
- finecms如何控制调用子栏目的数量
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 技术天地 | CSS-in-JS:一个充满争议的技术方案
- 安全研究 | 通过域名劫持实现Azure DevOps账户劫持
- 一款针对DLL劫持的恶意DLL生成器
- AuthMatrix:一款针对Web应用和服务的认证安全检测BurpSuite工具
- KITT-Lite:基于Python实现的轻量级命令行渗透测试工具集
- 一次KimSuky攻击事件分析
- OpenCV中如何使用滚动条动态调整参数
- 一文读懂「分布式架构」
- 老哥,您看我这篇Java集合,还有机会评优吗?
- 在 IDEA 中使用 Java 热部署插件 JRebel
- 后端必备 Git 分支开发:规范指南
- 大量的 TIME_WAIT 状态连接怎么处理?(文末有福利)
- 线上教育系统开发中,购物车功能是如何实现的?
- IntelliJ IDEA 2020.2重磅发布!全面支持Github PR。真香版本?
- 腾讯云智能语音小程序插件实现实时语音识别