Storm介绍及安装部署

转载至:https://www.cnblogs.com/zhaojiankai/p/7257617.html

    https://blog.csdn.net/SCGH_Fx/article/details/80602146

感谢原作者的分享

 

本节内容:

  • Apache Storm是什么
  • Apache Storm核心概念
  • Storm原理架构
  • Storm集群安装部署
  • 启动storm ui、Nimbus和Supervisor

   

一、Apache Storm是什么

Apache Storm是自由开源的分布式实时计算系统,擅长处理海量数据,适用于数据实时处理而非批处理。

批处理使用的大多是鼎鼎大名的hadoop或者hive,作为一个批处理系统,hadoop以其吞吐量大、自动容错等优点,在海量数据处理上得到了广泛的使用。但是,hadoop不擅长实时计算,因为它天然就是为批处理而生的,这也是业界一致的共识。否则最近几年也不会有s4,storm,puma这些实时计算系统如雨后春笋般冒出来啦。

举个搜索场景中的例子,当一个卖家发布了一条宝贝信息时,他希望的当然是这个宝贝马上就可以被卖家搜索出来、点击、购买啦,相反,如果这个宝贝要等到第二天或者更久才可以被搜出来,估计就会有不少损失了。 再举一个推荐的例子,如果用户昨天在淘宝上买了一双袜子,今天想买一副泳镜去游泳,但是却发现系统在不遗余力地给他推荐袜子、鞋子,根本对他今天寻找泳镜的行为视而不见,这样商家的利益就有所损失。这是因为后台系统做的是每天一次的全量处理,而且大多是在夜深人静之时做的,那么客户今天白天做的事情要到明天才能反映出来。这也就是为什么需要实时处理的原因。

   

二、Apache Storm核心概念

  • Nimbus:Storm集群主节点,负责资源分配和任务调度。我们提交任务和截止任务都是在Nimbus上操作的。一个Storm集群只有一个Nimbus节点。
  • Supervisor:Storm集群工作节点,接受Nimbus分配任务,管理所有Worker。
  • Worker:工作进程,每个工作进程中都有多个Task。
  • Task:任务,每个Spout和Bolt都是一个任务,每个任务都是一个线程。
  • Topology:计算拓扑,包含了应用程序的逻辑。
  • Stream:消息流,关键抽象,是没有边界的Tuple序列。
  • Spout:消息流的源头,Topology的消息生产者。
  • Bolt:消息处理单元,可以过滤、聚合、查询数据库。
  • Stream grouping:消息分发策略,一共6种,定义每个Bolt接受何种输入。
  • Reliability:可靠性,Storm保证每个Tuple都会被处理。

   

三、Storm原理架构

1. Storm集群架构图

Zookeeper集群在Storm集群中的作用:

Zookeeper集群负责Nimbus节点和Supervior节点之间的通信,监控各个节点之间的状态。比如通常我们提交任务的时候是在Nimbus节点上执行的,Nimbus节点通过zk集群将任务分发下去,而Supervisor是真正执行任务的地方。Nimbus节点通过zk集群监控各个Supervisor节点的状态,当某个Supervisor节点出现故障的时候,Nimbus节点就会通过zk集群将那个Supervisor节点上的任务重新分发,在其他Supervisor节点上执行。这就意味着Storm集群也是高可用集群,如果Nimbus节点出现故障的时候,整个任务并不会停止,但是任务的管理会出现影响,通常这种情况下我们只需要将Nimbus节点恢复就可以了。Nimbus节点不支持高可用,这也是Storm目前面临的问题之一。不过一般情况下,Nimbus节点的压力不大,通常不会出现问题。

一般情况下,Zookeeper集群的压力并不大,一般只需要部署3台就够了。Zookeeper集群在Storm集群中逻辑上是独立的,但在实际部署的时候,一般会将zk节点部署在Nimbus节点或Supervisor节点上。

   

2. 数据处理流程图

storm处理数据的特点:数据源源不断,不断处理。

   

3. 拓扑图分析

storm中是没有数据存储结构的,我们需要自己设计数据落地接口,指明数据存储到哪一部分中。Storm本身是不存储数据的。

   

四、Storm集群安装部署

1. 环境信息

 

主机名

操作系统版本

IP地址

安装软件

Console

CentOS 7.0 

192.168.92.128

JDK1.7、zookeeper-3.4.6、apache-storm-1.0.0

log1 

CentOS 7.0 

192.168.92.129

JDK1.7、zookeeper-3.4.6、apache-storm-1.0.0

Log2

CentOS 7.0 

192.168.92.130

JDK1.7、zookeeper-3.4.6、apache-storm-1.0.0

   

2. 安装Zookeeper集群

参见之前的文章《Zookeeper介绍及安装部署》。

   

3. 安装Storm集群

console、log1和log2部署storm集群,log2作为Nimbus节点,console和log3作为surpervisor节点。

(1)下载安装软件并解压

[root@log1 local]# wget http://apache.fayea.com/storm/apache-storm-1.0.0/apache-storm-1.0.0.tar.gz

[root@log1 local]# tar zxf apache-storm-1.0.0.tar.gz

   

(2)配置storm

[root@log1 ~]# cd /usr/local/apache-storm-1.0.0/

[root@log1 apache-storm-1.0.0]# vim conf/storm.yaml

  • 配置Zookeeper地址(配置Zookeeper的主机名,注意: 如果Zookeeper集群使用的不是默认端口,那么还需要配置storm.zookeeper.port)

   

  • storm.local.dir: The Nimbus and Supervisor daemons require a directory on the local disk to store small amounts of state (like jars, confs, and things like that). 在配置文件里添加一行:

storm.local.dir: "/usr/local/apache-storm-1.0.0/status"

这个status目录在storm启动的时候会自动创建,当然也可以提前创建好。

   

  • 配置nimbus.seeds:用于配置主控节点的地址,可以配置多个。改为自己ip:192.168.92.129

   

  • 配置supervisor.slots.ports

supervisor.slots.ports:

- 6700

- 6701

- 6702

- 6703

配置工作节点上的进程端口。你配置一个端口,意味着工作节点上启动一个worker,在实际的生产环境中,我们需要根据实际的物理配置以及每个节点上的负载情况来配置这个端口的数量。在这里每个节点我象征性的配置4个端口。

注意:以上配置,凡是有冒号的地方,冒号后都要有个空格

   

Log1和log2主机也是同样的配置。拷贝这台机器的storm包到log1和log2主机:

[root@log1 local]# scp -pr apache-storm-1.0.0 root@114.55.29.241:/usr/local/

[root@log1 local]# scp -pr apache-storm-1.0.0 root@114.55.253.15:/usr/local/

   

  • 对于两台supervisor node,我们额外开启JMX支持,在配置文件中加入如下配置:

supervisor.childopts: -verbose:gc -XX:+PrintGCTimeStamps -XX:+PrintGCDetails -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.port=9998

9998就是用于通过JMX收集supervisior JVM指标的端口。

   

(3)配置storm环境变量

[root@log1 apache-storm-0.10.0]# vim /etc/profile

export STORM_HOME=/usr/local/apache-storm-0.10.0

export PATH=$STORM_HOME/bin:$PATH

[root@log1 apache-storm-0.10.0]# source /etc/profile

   

五、启动storm ui、Nimbus和Supervisor

log1节点启动nimbus和storm ui:

[root@log1 ~]# nohup storm ui >/dev/null 2>&1 &

[root@log1 ~]# nohup storm nimbus >/dev/null 2>&1 &

   

console和log2主机启动Supervisor节点:

[root@console~]# nohup storm supervisor >/dev/null 2>&1 &

[root@log2 ~]# nohup storm supervisor >/dev/null 2>&1 &

   

----------------------------------------------------------------

---------------------------------------------------------------

关于bin/storm nimbus >/dev/null 2>&1 &    
bin/storm nimbus >/dev/null 2>&1 & 

如图所示: 


bin/storm nimbus会有两个输出,一个标准输出,一个错误输出 
2>&1的作用是将 2即错误输出 的内容重定向到&1即标准输出中,然后>/dev/null是将两者的结果输入到/dev/null中,相当于抛弃掉。至于最后一个&,因为storm会一直运行,不会自动停掉,页面上就会不停的有内容。&的作用就是将storm拿到后台执行。
-----------------------------------------------------------------------------------------

------------------------------------------------------------------------------------------

 

可能遇到的问题

a)web不能正常登录

如果登录web的时候,一直显示loading summary,看不到任何明确的信息。先查看logs目录下的日志,一般是显示超时之类的。这应该是某个进程没有启动成功。对集群中的每个节点使用jps命令查看,看是否有显示config_value,config_value是没有启动成功,对该节点重新启动(不是重启主机,是重启sotrm相关进程)。

如果登录web的时候,网页进不去,看不到内容(连loading summary都看不到),一直在链接,也没有提示超时之类的,换浏览器也不行,对所有节点全部重启(不是重启主机,是重启sotrm相关进程)。

如果kill或者kill -9都杀不掉某个进程,我暂时没有找到解决方法,直接重启主机。

如果登录进去可以看到nimbus或者supervisor等信息,某些信息看不到(一直显示loading summary)。可以换个浏览器试试,用谷歌可以正常显示,用的360就不行,而且360每次都显示loading summary。

以上几个问题是我部署完启动时遇到的问题。

b)nimbus或supervisor不能启动

虽然执行了启动命令但是在命令执行完后进程又退出了。首先查看日志。如果是nimbus不能启动,查看nimbus.log。

一般会有这样的信息:

2018-06-07 10:02:30.982 o.a.s.s.o.a.z.ClientCnxn main-SendThread(Desktop:2181) [INFO] Socket connection established to Desktop/192.168.244.3:2181, initiating session
2018-06-07 10:02:30.986 o.a.s.s.o.a.z.ClientCnxn main-SendThread(Desktop:2181) [INFO] Unable to read additional data from server sessionid 0x0, likely server has closed socket, closing socket connection and attempting reconnect

2018-06-07 10:02:31.311 o.a.s.s.o.a.z.ClientCnxn main-SendThread(Desktop:2181) [INFO] Opening socket connection to server Server1/192.168.244.4:2181. Will not attempt to authenticate using SASL (unknown error)

这个是zkServer挂掉了。虽然执行jps可以看到QuorumPeerMain还在,但是实际上zkServer已经挂了。

 

这个是zkServer存活数只有一半(或小于)配置数引起的。比如zookeeper部署了4台,但是只起了2台,默认zkServer状态就是挂掉了。当再起一台zkServer,即存活数达到3台,超过1半了,就可以查看状态了。也就是说zkServer集群已经运行起来了。

前面的问题也就解释通了,虽然可以看到zkServer进程,但是因为存活数不足,默认zkServer没有运行起来,所以也就无法启动nimbus或者supervisor了。


---------------------

访问ui页面: http://114.55.29.86:8080/ ---------改为自己ip:192.168.92.129

界面简单介绍:

  • Used slots:使用的worker数。
  • Free slots:空闲的worker数。
  • Executors:每个worker的物理线程数。

   

posted @ 2019-05-09 19:55  清水-殇  阅读(407)  评论(0编辑  收藏  举报