大数据开发之storm基础知识点

storm

     一、概述

           离线计算

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

                 代表技术

                      Sqoop批量导入数据、HDFS批量存储数据、MapReduce批量计算数据、Hive批量计算数据

           流式计算

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

                 代表技术

                      Flume实时获取数据、Kafka实时数据存储、Storm/JStorm实时数据计算、Redis实时结果缓存、持久化存储(mysql)

                 storm

                      Storm是一个分布式计算框架,主要使用Clojure与Java语言编写

                      Storm是一个免费开源的分布式实时计算系统。Storm能轻松可靠地处理无界的数据流,就像Hadoop对数据进行批处理

           Storm能用到很多场景中,包括:实时分析、在线机器学习、连续计算等

                 1)推荐系统:实时推荐,根据下单或加入购物车推荐相关商品

                 2)金融系统:实时分析股票信息数据

                 3)预警系统:根据实时采集数据,判断是否到了预警阈值

                 4)网站统计:实时销量、流量统计,如淘宝双11效果图

二、编程模型

           1、元组(Tuple)

                 元组(Tuple),是消息传递的基本单元,是一个命名的值列表,元组中的字段可以是任何类型的对象。Storm使用元组作为其数据模型,元组支持所有的基本类型、字符串和字节数组作为字段值,只要实现类型的序列化接口就可以使用该类型的对象。元组本来应该是一个key-value的Map,但是由于各个组件间传递的元组的字段名称已经事先定义好,所以只要按序把元组填入各个value即可,所以元组是一个value的List

           2、流(Stream)

                 流是Storm的核心抽象,是一个无界的元组系列。源源不断传递的元组就组成了流,在分布式环境中并行地进行创建和处理

           3、水龙头(Spout)

                 Spout是拓扑的流的来源,是一个拓扑中产生源数据流的组件。通常情况下,Spout会从外部数据源中读取数据,然后转换为拓扑内部的源数据。

      Spout可以是可靠的,也可以是不可靠的。如果Storm处理元组失败,可靠的Spout能够重新发射,而不可靠的Spout就尽快忘记发出的元组。

      Spout可以发出超过一个流。

      Spout的主要方法是nextTuple()。NextTuple()会发出一个新的Tuple到拓扑,如果没有新的元组发出,则简单返回。

      Spout的其他方法是ack()和fail()。当Storm检测到一个元组从Spout发出时,ack()和fail()会被调用,要么成功完成通过拓扑,要么未能完成。Ack()和fail()仅被可靠的Spout调用。

      IRichSpout是Spout必须实现的接口

 

           4、转接头(Bolt)

                 在拓扑中所有处理都在Bolt中完成,Bolt是流的处理节点,从一个拓扑接收数据,然后执行进行处理的组件。Bolt可以完成过滤、业务处理、连接运算、连接与访问数据库等任何操作。

Bolt是一个被动的角色,七接口中有一个execute()方法,在接收到消息后会调用此方法,用户可以在其中执行自己希望的操作。

Bolt可以完成简单的流的转换,而完成复杂的流的转换通常需要多个步骤,因此需要多个Bolt。

Bolt可以发出超过一个的流

 

           5、拓扑(Topology)

                 拓扑(Topology)是Storm中运行的一个实时应用程序,因为各个组件间的消息流动而形成逻辑上的拓扑结构。

把实时应用程序的运行逻辑打成jar包后提交到Storm的拓扑(Topology)。Storm的拓扑类似于MapReduce的作业(Job)。其主要的区别是,MapReduce的作业最终会完成,而一个拓扑永远都在运行直到它被杀死。一个拓扑是一个图的Spout和Bolt的连接流分组

 

三、核心组件

           nimbus是整个集群的控管核心,负责topology的提交、运行状态监控、任务重新分配等工作。

zk就是一个管理者,监控者。

  总体描述:nimbus下命令(分配任务),zk监督执行(心跳监控,worker、supurvisor的心跳都归它管),supervisor领旨(下载代码),招募人马(创建worker和线程等),worker、executor就给我干活!task就是具体要干的活

 

                 1、主控节点与工作节点

                      Storm集群中有两类节点:主控节点(Master Node)和工作节点(Worker Node)。其中,主控节点只有一个,而工作节点可以有多个

                 2、Nimbus进程与Supervisor进程

                      主控节点运行一个称为Nimbus的守护进程类似于Hadoop的JobTracker。Nimbus负责在集群中分发代码,对节点分配任务,并监视主机故障。

每个工作节点运行一个称为Supervisor的守护进程。Supervisor监听其主机上已经分配的主机的作业,启动和停止Nimbus已经分配的工作进程

 

                 3、流分组(Stream grouping)

                      流分组,是拓扑定义中的一部分,为每个Bolt指定应该接收哪个流作为输入。流分组定义了流/元组如何在Bolt的任务之间进行分发。

Storm内置了8种流分组方式

 

                 4、工作进程(Worker)

                      Worker是Spout/Bolt中运行具体处理逻辑的进程。一个worker就是一个进程,进程里面包含一个或多个线程

                 5、执行器(Executor)

                      一个线程就是一个executor,一个线程会处理一个或多个任务

                 6、任务(Task)

                      一个任务就是一个task

           实时流计算常见架构图

                 1)Flume获取数据。

2)Kafka临时保存数据。

3)Strom计算数据。

4)Redis是个内存数据库,用来保存数据。

四、集群搭建

      环境准备

           下载jar包http://storm.apache.org/

           虚拟机准备

           安装jdk

           安装zookeeper

      配置

1)拷贝jar包到hadoop102的/opt/software目录下

2)解压jar包到/opt/module目录下

[root@hlh001 software]$ tar -zxvf apache-storm-1.1.0.tar.gz -C /opt/module/

3)修改解压后的apache-storm-1.1.0.tar.gz文件名称为storm

[root@hlh001 module]$ mv apache-storm-1.1.0/ storm

4)在/opt/module/storm/目录下创建data文件夹

      [root@hlh001 storm]$ mkdir data

5)修改配置文件storm.yaml

# 设置Zookeeper的主机名称

storm.zookeeper.servers:

     - "hlh001"

     - "hlh002"

     - "hlh003"

 

# 设置主节点的主机名称

nimbus.seeds: ["hlh001"]

 

# 设置Storm的数据存储路径

storm.local.dir: "/opt/module/storm/data"

 

# 设置Worker的端口号

supervisor.slots.ports:

    - 6700

    - 6701

    - 6702

    - 6703

 

           6)配置环境变量

                 #STORM_HOME

export STORM_HOME=/opt/module/storm

export PATH=$PATH:$STORM_HOME/bin

           7)启动集群

                 (1)后台启动nimbus 123台分别启动

      bin/storm nimbus &

(2)后台启动supervisor 123台分别启动

      bin/storm supervisor &

(3)启动Storm ui

bin/storm ui

           8)通过浏览器查看集群状态

                 http://hlh001:8080/index.html

五、日志信息查看

      1)查看nimbus的日志信息

在nimbus的服务器上

cd /opt/module/storm/logs

tail -100f /opt/module/storm/logs/nimbus.log

      2)查看ui运行日志信息

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

cd /opt/module/storm/logs

tail -100f /opt/module/storm/logs/ui.log

      3)查看supervisor运行日志信息

在supervisor服务上

cd /opt/module/storm/logs

tail -100f /opt/module/storm/logs/supervisor.log

      4)查看supervisor上worker运行日志信息

在supervisor服务上

cd /opt/module/storm/logs

tail -100f /opt/module/storm/logs/worker-6702.log

      5)logviewer,可以在web页面点击相应的端口号即可查看日志http://hlh001:8000

分别在supervisor节点上执行:

[root@hlh001 storm]$ bin/storm logviewer &

[root@hlh001 storm]$ bin/storm logviewer &

[root@hlh001 storm]$ bin/storm logviewer &

六、命令行操作

      1)nimbus:启动nimbus守护进程

      storm nimbus

      2)supervisor:启动supervisor守护进程

      storm supervisor

      3)ui:启动UI守护进程。

      storm ui

      4)list:列出正在运行的拓扑及其状态

      storm list

      5)logviewer:Logviewer提供一个web接口查看Storm日志文件。

      storm logviewer

      6)jar:

storm jar 【jar路径】 【拓扑包名.拓扑类名】 【拓扑名称】

      7)kill:杀死名为Topology-name的拓扑

      storm kill topology-name [-w wait-time-secs]

      -w:等待多久后杀死拓扑

      8)active:激活指定的拓扑spout。

storm activate topology-name

      9)deactivate:禁用指定的拓扑Spout。

      storm deactivate topology-name

      10)help:打印一条帮助消息或者可用命令的列表。

      storm help

      storm help <command>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值