Storm基础

Storm基础

1. 离线计算与流式计算的概述

  • 离线计算:批量获取数据、批量传输数据、周期性批量计算数据、数据展示,flum获取数据,Sqoop批量导入数据、HDFS批量存储数据、MapReduce批量计算数据、Hive批量计算数据
  • 流式计算:数据实时产生、数据实时传输、数据实时计算、实时展示,Flume实时获取数据、Kafka/metaq实时数据存储、Storm/JStorm实时数据计算、Redis实时结果缓存、持久化存储(mysql)。

2. storm与hadoop的区别

  • Storm用来实时处理数据,特点:低延迟、高可用、分布式、可扩展、数据不丢失。提供简单容易理解的接口,便于开发。
  • Storm用于实时计算,Hadoop用于离线计算。
  • Storm处理的数据保存在内存中,源源不断;Hadoop处理的数据保存在文件系统中,一批一批。
  • Storm的数据通过网络传输进来;Hadoop的数据保存在磁盘中

3. 名词解析

  • Nimbus:负责资源分配和任务调度。

  • Supervisor:负责接受nimbus分配的任务,启动和停止属于自己管理的worker进程。—通过配置文件设置当前supervisor上启动多少个worker。

  • Worker:运行具体处理组件逻辑的进程。Worker运行的任务类型只有两种,一种是Spout任务,一种是Bolt任务。

  • Task:worker中每一个spout/bolt的线程称为一个task. 在storm0.8之后,task不再与物理线程对应,不同spout/bolt的task可能会共享一个物理线程,该线程称为executor。

  • Topology:Storm中运行的一个实时应用程序的名称。(拓扑)

  • Spout:在一个topology中获取源数据流的组件。
    通常情况下spout会从外部数据源中读取数据,然后转换为topology内部的源数据。

  • Bolt:接受数据然后执行处理的组件,用户可以在其中执行自己想要的操作。

  • Tuple:一次消息传递的基本单元,理解为一组消息就是一个Tuple。

  • Stream:表示数据的流向。

4. storm主键功能

  • DataSource:外部数据源

  • Spout:接受外部数据源的组件,将外部数据源转化成Storm内部的数据,以Tuple为基本的传输单元下发给Bolt

  • Bolt:接受Spout发送的数据,或上游的bolt的发送的数据。根据业务逻辑进行处理。发送给下一个Bolt或者是存储到某种介质上。介质可以是Redis可以是mysql,或者其他。

  • Tuple:Storm内部中数据传输的基本单元,里面封装了一个List对象,用来保存数据。

  • StreamGrouping:数据分组策略7种:shuffleGrouping(Random函数),Non Grouping(Random函数),FieldGrouping(Hash取模)、Local or ShuffleGrouping 本地或随机,优先本地。

  • Nimbus:任务分配
  • Supervisor:接受任务,并启动worker。worker的数量根据端口号来的。
  • Task:Task=线程=executor。 一个Task属于一个Spout或者Bolt并发任务。
  • Zookeeper:保存任务分配的信息、心跳信息、元数据信息。

5. storm安装

1. 创建文件夹,上传安装包,解压文件,重命名为storm
    mkdir /export/servers
    tar -zxvf apache-storm-1.0.0.tar.gz -C /export/servers
    mv apache-storm-1.0.0 storm

2. 配置环境变量
    vi  /etc/profile
    export STORM_HOME=/export/servers/storm
    export PATH=$PATH:$STORM_HOME/bin
3. 配置文件

    vi storm.yaml  
     **注意:没行前面必须有空格**
#指定storm使用的zk集群
   storm.zookeeper.servers:
     - "master"
     - "work1"
     - "work2"
#指定storm集群中的nimbus节点所在的服务器
nimbus.host: "master"
#指定nimbus启动JVM最大可用内存大小
nimbus.childopts: "-Xmx1024m"
#指定supervisor启动JVM最大可用内存大小
supervisor.childopts: "-Xmx1024m"
#指定supervisor节点上,每个worker启动JVM最大可用内存大小
worker.childopts: "-Xmx768m"
#指定ui启动JVM最大可用内存大小,ui服务一般与nimbus同在一个节点上。
ui.childopts: "-Xmx768m"
#指定supervisor节点上,启动worker时对应的端口号,每个端口对应槽,每个槽位对应一个worker
supervisor.slots.ports:
    - 6700
    - 6701
    - 6702
    - 6703

4. 分发到其他机器上: scp -r /export/servers root@slave2:/export/servers/ 
5. 启动
master中启动nimbus和ui:   
nohup storm nimbus &
nohup storm ui &

supervis机器上启动:
nohup storm supervisor &

6. Storm常用操作命令

  • 提交任务命令格式:storm jar 【jar路径】 【拓扑包名.拓扑类名】 【拓扑名称】
    bin/storm jar examples/storm-starter/storm-starter-topologies-0.9.6.jar storm.starter.WordCountTopology wordcount

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

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

  • 启用任务命令格式:storm activate【拓扑名称】
    storm activate topology-name

  • 重新部署任务命令格式:storm rebalance 【拓扑名称】
    storm rebalance topology-name

7. strorm集群的日志

  • nimbus的日志信息: tail -100f /export/servers/storm/logs/nimbus.log
  • ui运行日志信息: tail -100f /export/servers/storm/logs/ui.log
  • supervisor运行日志信息: tail -100f /export/servers/storm/logs/supervisor.log

8. 运行jar包 问题

  1. Exception in thread “main” java.lang.NoClassDefFoundError: backtype/storm/topology/IRichSpout
    jar包不兼容,在客户端打包的时候引入的storm jar 包要和linux端安装的storm版本一样,不然API 不兼容。
  2. rg.apache.storm.utils.NimbusLeaderNotFoundException: Could not find leader nimbus from seed hosts [“master” “slave1”]. Did you specify a valid list of nimbus hosts for config nimbus.seeds?

猜你喜欢

转载自blog.csdn.net/wtzhm/article/details/79630808