Storm:Apache Storm is a free and open source distributed realtime computation (实时计算)system. Storm makes it easy to reliably process unbounded streams of data(海量数据流的可靠的处理), doing for realtime processing what Hadoop did for batch processing. Storm is simple, can be used with any programming language, and is a lot of fun to use!
Twitter开发 类似于Hadoop的实时处理框架
storm的官网 storm.apache.org
storm核心代码是由Clojure语言写的,Clojure语言既能面向对象编程,也能面向函数式编程,也是基于JVM。
Storm的应用场景
Storm has many use cases: realtime analytics(实时分析), online machine learning(在线机器学习), continuous computation(持续的计算), distributed RPC(分布式RPC), ETL(数据清洗), and more.
Storm is fast: a benchmark(标杆) clocked(时控) it at over a million tuples processed per second per node. It is scalable(可扩展), fault-tolerant(容错), guarantees your data will be processed, and is easy to set up and operate(保证数据被处理,易于被设置和操作).
1)交通部门,监控高速路上超速车辆
2)电商网站,类似于淘宝的大屏(顺序累加)
3)京东/一号店的实时推荐(协同算法,用户标签(画像))
4)告警系统
5)金融:实时去判断交易不是欺诈行为(涉及机器学习)
6)实时监测网站有没有遭受攻击
storm实时,吞吐量小
Hadoop离线,吞吐量大
处理过程:Hadoop是Map和reduce阶段,Storm分为Spout和bolt两个阶段。
是否结束:Hadoop最终会结束,storm没有结束状态
处理速度:Hadoop处理TB级别数据,处理速度慢;Storm处理的是某一笔新增的数据即可,处理速度快。
使用场景:Hadoop使用的是批处理,主要用于不讲究时效性的项目;storm适合讲究时效性的项目。
Storm与Mapreduce1对比
MapReduce:主要用来处理高延迟的作业,主节点叫做JobTracker,从节点叫做TaskTracker;运行时作业分两种类型:Map,Reducer
Storm主要用来处理低延迟的作业,主节点叫做Nimbus,从节点叫做SuperVisor。用户提交作业给Nimbus,Nimbus把任务分配给SuperVisor,这些提交的任务叫做Topology(拓扑)。运行时作业分两种类型:Spout,bolt
Storm运送数据依靠stream(水流)
5号线地铁->stream
车厢->tuple
乘客->数据
乘客要上下车->topo任务
起始站->spout
中间站和终点站->bolt
第一个案例:需求:求数字1-9累加和
Spout的任务:生成数字1-9并发射(emit)
bolt的任务:根据fields名称获取数字,进行累加
运行:main方法:new TopologyBulider(),setSpout,setBolt
nohup storm nimbus > /dev/null 2>&1 &:表示将标准输出和错误输出都输出到/dev/null目录中进行回收,1表示标准输出,2表示错误与输出,默认是1:标准输出
storm的UI界面地址:host:8080
ps -ef | grep java | awk '{print $1, $2}'