流式计算-Storm基本介绍

 

 

1、离线计算是什么?

         离线计算:批量获取数据、批量传输数据、周期性批量计算数据、数据展示

         代表技术:Sqoop批量导入数据、HDFS批量存储数据、MapReduce批量计算数据、Hive批量计算数据、***任务调度

1,hivesql

2、调度平台

3、Hadoop集群运维

4、数据清洗(脚本语言)

5、元数据管理

6、数据稽查

7、数据仓库模型架构

 

2、流式计算是什么

         流式计算:数据实时产生、数据实时传输、数据实时计算、实时展示

         代表技术:Flume实时获取数据、Kafka/metaq实时数据存储、Storm/JStorm实时数据计算、Redis实时结果缓存、持久化存储(mysql)。

         一句话总结:将源源不断产生的数据实时收集并实时计算,尽可能快的得到计算结果

 

3、离线计算与实时计算的区别

         最大的区别:实时收集、实时计算、实时展示

 

4、Storm是什么?

         Flume实时采集,低延迟

         Kafka消息队列,低延迟

         Storm实时计算,低延迟

         Redis实时存储,低延迟

 

         Storm用来实时处理数据,特点:低延迟、高可用、分布式、可扩展、数据不丢失。提供简单容易理解的接口,便于开发。

 

        

         海量数据?数据类型很多,产生数据的终端很多,处理数据能力增强

        

        

5、Storm与Hadoop的区别

  1. Storm用于实时计算,Hadoop用于离线计算。
  2. Storm处理的数据保存在内存中,源源不断;Hadoop处理的数据保存在文件系统中,一批一批。
  3. Storm的数据通过网络传输进来;Hadoop的数据保存在磁盘中。
  4. Storm与Hadoop的编程模型相似

44cb91641684419a85a0ed5100aa49cb.png

 

Job:任务名称

JobTracker:项目经理

TaskTracker:开发组长、产品经理

Child:负责开发的人员

Mapper/Reduce:开发人员中的两种角色,一种是服务器开发、一种是客户端开发

 

Topology:任务名称

Nimbus:项目经理

Supervisor:开组长、产品经理

Worker:开人员

Spout/Bolt:开人员中的两种角色,一种是服务器开发、一种是客户端开发

 

6、Storm应用场景及行业案例

                  Storm用来实时计算源源不断产生的数据,如同流水线生产。

6.1、运用场景

  1. 日志分析

海量日志中分析出特定的数据,并将分析的结果存入外部存储器用来辅佐决策。

  1. 管道系统

将一个数据从一个系统传输到另外一个系统,比如将数据库同步到Hadoop

  1. 消息转化器

将接受到的消息按照某种格式进行转化,存储到另外一个系统如消息中间件

6.2、典型案列

  1. 一淘-实时分析系统:实时分析用户的属性,并反馈给搜索引擎

最初,用户属性分析是通过每天在云梯上定时运行的MR job来完成的。为了满足实时性的要求,希望能够实时分析用户的行为日志,将最新的用户属性反馈给搜索引擎,能够为用户展现最贴近其当前需求的结果。

  1. 携程-网站性能监控:实时分析系统监控携程网的网站性能

利用HTML5提供的performance标准获得可用的指标,并记录日志。Storm集群实时分析日志和入库。使用DRPC聚合成报表,通过历史数据对比等判断规则,触发预警事件。

  1. 阿里妈妈-用户画像:实时计算用户的兴趣数据

为了更加精准投放广告,阿里妈妈后台计算引擎需要维护每个用户的兴趣点(理想状态是,你对什么感兴趣,就向你投放哪类广告)。用户兴趣主要基于用户的历史行为、用户的实时查询、用户的实时点击、用户的地理信息而得,其中实时查询、实时点击等用户行为都是实时数据。考虑到系统的实时性,阿里妈妈使用Storm维护用户兴趣数据,并在此基础上进行受众定向的广告投放。

        

7、Storm核心组件(重要)

b3bff1a6b399479b9b6ea962601431e8.png

 

  1. Nimbus:负责资源分配和任务调度。
  2. Supervisor:负责接受nimbus分配的任务,启动和停止属于自己管理的worker进程。---通过配置文件设置当前supervisor上启动多少个worker
  3. Worker:运行具体处理组件逻辑的进程。Worker运行的任务类型只有两种,一种是Spout任务,一种是Bolt任务。
  4. Task:worker中每一个spout/bolt的线程称为一个task. 在storm0.8之后,task不再与物理线程对应,不同spout/bolt的task可能会共享一个物理线程,该线程称为executor。

 

8、Storm编程模型(重要)

e69c449898214d5c8bae8f4b4bb7a0b5.png

 

 

  1. Topology:Storm中运行的一个实时应用程序的名称。(拓扑)
  2. Spout:在一个topology中获取源数据流的组件。

通常情况下spout会从外部数据源中读取数据,然后转换为topology内部的源数据。

  1. Bolt:接受数据然后执行处理的组件,用户可以在其中执行自己想要的操作。
  2. Tuple:一次消息传递的基本单元,理解为一组消息就是一个Tuple。
  3. Stream:表示数据的流向。

9、流式计算一般架构图(重要)

09766052bbca417abbfd22e53acc1592.png

  1. 其中flume用来获取数据。
  2. Kafka用来临时保存数据。
  3. Strom用来计算数据。
  4. Redis是个内存数据库,用来保存数据。

 

  1. 集群部署的基本流程

集群部署的流程:下载安装包、解压安装包、修改配置文件、分发安装包、启动集群

注意:

    所有的集群上都需要配置hosts

    vi  /etc/hosts

       192.168.239.128 storm01 zk01 hadoop01

      192.168.239.129 storm02 zk02 hadoop02

       192.168.239.130 storm03 zk03 hadoop03

 

  1. 集群部署的基础环境准备

安装前的准备工作(zk集群已经部署完毕)

  1. 关闭防火墙

chkconfig iptables off  && setenforce 0

  1. 创建用户

groupadd realtime && useradd realtime && usermod -a -G realtime realtime

  1. 创建工作目录并赋权

mkdir /export

mkdir /export/servers

chmod 755 -R /export

  1. 切换到realtime用户下

su realtime

3、Storm集群部署

3.1、下载安装包

         wget    http://124.202.164.6/files/1139000006794ECA/apache.fayea.com/storm/apache-storm-0.9.5/apache-storm-0.9.5.tar.gz

 

3.2、解压安装包

tar -zxvf apache-storm-0.9.5.tar.gz -C /export/servers/

cd /export/servers/

ln -s apache-storm-0.9.5 storm

3.3、修改配置文件

         mv /export/servers/storm/conf/storm.yaml /export/servers/storm/conf/storm.yaml.bak

vi /export/servers/storm/conf/storm.yaml

输入以下内容:

42bc553443fa4ac7ab5a030627cd9d63.png

 

3.4、分发安装包

scp -r /export/servers/apache-storm-0.9.5 storm02:/export/servers

然后分别在各机器上创建软连接

cd /export/servers/

ln -s apache-storm-0.9.5 storm

3.5、启动集群

  1. 在nimbus.host所属的机器上启动 nimbus服务

cd /export/servers/storm/bin/

nohup ./storm nimbus &

  1. 在nimbus.host所属的机器上启动ui服务

cd /export/servers/storm/bin/

nohup ./storm ui &

  1. 在其它个点击上启动supervisor服务

cd /export/servers/storm/bin/

nohup ./storm supervisor &

3.6、查看集群

访问nimbus.host:/8080,即可看到storm的ui界面。

 61d1adff23dc4a19943848552d9696eb.png

 

4、Storm常用操作命令

有许多简单且有用的命令可以用来管理拓扑,它们可以提交、杀死、禁用、再平衡拓扑。

  1. 提交任务命令格式:storm jar 【jar路径】 【拓扑包名.拓扑类名】 【拓扑名称】

bin/storm jar examples/storm-starter/storm-starter-topologies-0.9.6.jar storm.starter.WordCountTopology wordcount

  1. 杀死任务命令格式:storm kill 【拓扑名称】 -w 10(执行kill命令时可以通过-w [等待秒数]指定拓扑停用以后的等待时间)

storm kill topology-name -w 10

  1. 停用任务命令格式:storm deactivte  【拓扑名称】

storm deactivte topology-name

我们能够挂起或停用运行中的拓扑。当停用拓扑时,所有已分发的元组都会得到处理,但是spouts的nextTuple方法不会被调用。销毁一个拓扑,可以使用kill命令。它会以一种安全的方式销毁一个拓扑,首先停用拓扑,在等待拓扑消息的时间段内允许拓扑完成当前的数据流。

  1. 启用任务命令格式:storm activate【拓扑名称】

        storm activate topology-name

  1. 重新部署任务命令格式:storm rebalance  【拓扑名称】

        storm rebalance topology-name

        再平衡使你重分配集群任务。这是个很强大的命令。比如,你向一个运行中的集群增加了节点。再平衡命令将会停用拓扑,然后在相应超时时间之后重分配工人,并重启拓扑。

5、Storm集群的进程及日志熟悉

5.1、部署成功之后,启动storm集群。

         依次启动集群的各种角色

5.2、查看nimbus的日志信息

在nimbus的服务器上

cd /export/servers/storm/logs

tail -100f /export/servers/storm/logs/nimbus.log

5.3、查看ui运行日志信息

在ui的服务器上,一般和nimbus一个服务器

cd /export/servers/storm/logs

tail -100f /export/servers/storm/logs/ui.log

5.4、查看supervisor运行日志信息

在supervisor服务上

cd /export/servers/storm/logs

tail -100f /export/servers/storm/logs/supervisor.log

5.5、查看supervisor上worker运行日志信息

在supervisor服务上

cd /export/servers/storm/logs

tail -100f /export/servers/storm/logs/worker-6702.log

7f217b7761cb46518d9af8882b68ac7b.png

 

(该worker正在运行wordcount程序)

 

6、Storm源码下载及目录熟悉

6.1、在Storm官方网站上寻找源码地址

    Apache Storm downloads

c62886e8300846b28c9a51c6e7c2bc1e.png

 

6.2、点击文字标签进入github

点击Apache/storm文字标签,进入github

          GitHub - apache/storm: Mirror of Apache Storm

6.3、拷贝storm源码地址

在网页右侧,拷贝storm源码地址

    183cd857ad5a42959925a4acf8680c6b.png

 

6.4、使用Subversion客户端下载

9ab71529ee20416d97d052a9e3e460e3.png

 

https://github.com/apache/storm/tags/v0.9.5

6.5、Storm源码目录分析(重要)

54a4bbd5086d4956a68e2f1b4fa33f9c.png

 

扩展包中的三个项目,使storm能与hbase、hdfs、kafka交互

4551eb6d918f4f0e8927345bbf65c402.png

 

 

7、Storm单词技术案例(重点掌握)

7.1、功能说明

设计一个topology,来实现对文档里面的单词出现的频率进行统计。

整个topology分为三个部分:

  1. RandomSentenceSpout:数据源,在已知的英文句子中,随机发送一条句子出去。
  2. SplitSentenceBolt:负责将单行文本记录(句子)切分成单词
  3. WordCountBolt:负责对单词的频率进行累加

7.2、项目主要流程

2f1cda55f6374c05aba24f06746ff767.png

7.3、RandomSentenceSpout的实现及生命周期

d3ad4437cad64d6d9ef6c96ede7629a3.png

 

7.4、SplitSentenceBolt的实现及生命周期

be331efee647438490d4237d35c95c81.png

 

 

7.5、WordCountBolt的实现及生命周期

9a0f26249a684738a4df2e7cfa5391ce.png

 

7.6、Stream Grouping详解

Storm里面有7种类型的stream grouping

  1. Shuffle Grouping: 随机分组, 随机派发stream里面的tuple,保证每个bolt接收到的tuple数目大致相同。
  2. Fields Grouping:按字段分组,比如按userid来分组,具有同样userid的tuple会被分到相同的Bolts里的一个task,而不同的userid则会被分配到不同的bolts里的task。
  3. All Grouping:广播发送,对于每一个tuple,所有的bolts都会收到。
  4. Global Grouping:全局分组, 这个tuple被分配到storm中的一个bolt的其中一个task。再具体一点就是分配给id值最低的那个task。
  5. Non Grouping:不分组,这stream grouping个分组的意思是说stream不关心到底谁会收到它的tuple。目前这种分组和Shuffle grouping是一样的效果, 有一点不同的是storm会把这个bolt放到这个bolt的订阅者同一个线程里面去执行。
  6. Direct Grouping: 直接分组, 这是一种比较特别的分组方法,用这种分组意味着消息的发送者指定由消息接收者的哪个task处理这个消息。只有被声明为Direct Stream的消息流可以声明这种分组方法。而且这种消息tuple必须使用emitDirect方法来发射。消息处理者可以通过TopologyContext来获取处理它的消息的task的id (OutputCollector.emit方法也会返回task的id)。
  7. Local or shuffle grouping:如果目标bolt有一个或者多个task在同一个工作进程中,tuple将会被随机发生给这些tasks。否则,和普通的Shuffle Grouping行为一致。

 

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值