====什么是storm
Storm为分布式实时计算提供了一组通用原语,可被用于“流处理”之中,实时处理消息并更新数据库。
这是管理队列及工作者集群的另一种方式。Storm也可被用于“连续计算”(continuous computation),
对数据流做连续查询,在计算时就将结果以流的形式输出给用户。它还可被用于“分布式RPC”,以并行的方式运行昂贵的运算。
Storm可以方便地在一个计算机集群中编写与扩展复杂的实时计算,Storm用于实时处理,就好比 Hadoop 用于批处理。
Storm保证每个消息都会得到处理,而且它很快——在一个小集群中,每秒可以处理数以百万计的消息。
更棒的是你可以使用任意编程语言来做开发。
===离线计算
1.离线计算:批量获取数据、批量传输数据、周期性批量计算数据、数据展示
2.代表技术:Sqoop批量导入数据、HDFS批量存储数据、MapReduce批量计算、Hive
===流式计算
1.流式计算:数据实时产生、数据实时传输、数据实时计算、实时展示
2.代表技术:Flume实时获取数据、Kafka/metaq实时数据存储、Storm/JStorm实时数据计算、Redis实时结果缓存、持久化存储(mysql)。
3.一句话总结:将源源不断产生的数据实时收集并实时计算,尽可能快的得到计算结果
==========storm组件介绍:
---Nimbus:负责资源分配和任务调度。
---Supervisor:负责接受nimbus分配的任务,启动和停止属于自己管理的worker进程。
通过配置文件设置当前supervisor上启动多少个worker。
---Worker:运行具体处理组件逻辑的进程。Worker运行的任务类型只有两种,一种是Spout任务,一种是Bolt任务。
---Executor:Storm 0.8之后,Executor为Worker进程中的具体的物理线程,同一个Spout/Bolt的Task可能会共享一个物理线程,
一个Executor中只能运行隶属于同一个Spout/Bolt的Task。
---Task:worker中每一个spout/bolt的线程称为一个task. 在storm0.8之后,task不再与物理线程对应,
不同spout/bolt的task可能会共享一个物理线程,该线程称为executor。
storm grouping:
1.Shuffle Grouping :随机分组,尽量均匀分布到下游Bolt中
将流分组定义为混排。这种混排分组意味着来自Spout的输入将混排,或随机分发给此Bolt中的任务。shuffle grouping对各个task的tuple分配的比较均匀。
2.Fields Grouping :按字段分组,按数据中field值进行分组;相同field值的Tuple被发送到相同的Task
这种grouping机制保证相同field值的tuple会去同一个task,这对于WordCount来说非常关键,如果同一个单词不去同一个task,
那么统计出来的单词次数就不对了。
3.All grouping :广播
广播发送, 对于每一个tuple将会复制到每一个bolt中处理。
4.Global grouping :全局分组,Tuple被分配到一个Bolt中的一个Task,实现事务性的Topology。
Stream中的所有的tuple都会发送给同一个bolt任务处理,所有的tuple将会发送给拥有最小task_id的bolt任务处理。
5.None grouping :不分组
不关注并行处理负载均衡策略时使用该方式,目前等同于shuffle grouping,另外storm将会把bolt任务和他的上游提供数据的任务安排在同一个线程下。
6.Direct grouping :直接分组 指定分组
由tuple的发射单元直接决定tuple将发射给那个bolt,一般情况下是由接收tuple的bolt决定接收哪个bolt发射的Tuple。
这是一种比较特别的分组方法,用这种分组意味着消息的发送者指定由消息接收者的哪个task处理这个消息。
只有被声明为Direct Stream的消息流可以声明这种分组方法。而且这种消息tuple必须使用emitDirect方法来发射。
消息处理者可以通过TopologyContext来获取处理它的消息的taskid (OutputCollector.emit方法也会返回taskid)
===================================================
实例:实时分析Top IP
1.任务介绍
电商网站运营中,需要分析网站访问排名前N的IP,主要用来审计是否有异常IP,同时对网站运营情况进行分析。
2.需求分析
- 如何统计IP
- 通过用户点击日志,即可计算
- 如何分析IP
- 分析不同时间段IP的访问量
- 分析热门IP
3.思路简介
- 数据采集逻辑(ETL)
- 用户的访问日志(点击日志)一般存储在日志服务器,需要通过Flume拉取
- 点击日志的缓存
- 由Flume采集的用户点击日志,缓存到Kafka中
- 从flume缓存数据======>https://blog.csdn.net/chengxuxiaobai1108/article/details/104212001
- 实时分析Top用户信息
- 使用Apache Storm进行实时分析
4.用户点击日志介绍
1,201.105.101.102,http://mystore.jsp/?productid=1,2017020020,1,1
user_id user_ip url click_time action_type area_id
5.实时分析topIP 数据,基于storm实现。
Java代码略。
来源:CSDN
作者:chengxuxiaobai1108
链接:https://blog.csdn.net/chengxuxiaobai1108/article/details/104213026