本文共 6740 字,大约阅读时间需要 22 分钟。
Storm是Twitter开源的分布式实时大数据处理框架,最早开源于github,从0.9.1版本之后,归于Apache社区,被业界称为实时版Hadoop。
Apache Storm是一个分布式实时大数据处理系统。Storm设计用于在容错和水平可扩展方法中处理大量数据。
参考资料:
随着越来越多的场景对Hadoop的MapReduce高延迟无法容忍,比如网站统计、推荐系统、预警系统、金融系统(高频交易、股票)等等,大数据实时处理解决方案(流计算)的应用日趋广泛,目前已是分布式技术领域最新爆发点,而Storm更是流计算技术中的佼佼者和主流。
1个worker进程执行的是1个topology的子集(注:不会出现1个worker为多个topology服务)。
1个worker进程会启动1个或多个executor线程来执行1个topology的component(spout或bolt)。因此,1个运行中的topology就是由集群中多台物理机上的多个worker进程组成的。----如果topology被分到多个work上的话
executor是1个被worker进程启动的单独线程。每个executor只会运行1个topology的1个component(spout或bolt)的task(注:task可以是1个或多个,storm默认是1个component只生成1个task------------------如果设置多个task就会有多个重复的task产生)。 task是最终运行spout或bolt中代码的单元(注:1个task即为spout或bolt的1个实例,executor线程在执行期间会调用该task的nextTuple或execute方法)。topology启动后,1个component(spout或bolt)的task数目是固定不变的,但该component使用的executor线程数可以动态调整(例如:1个executor线程可以执行该component的1个或多个task实例)。这意味着,对于1个component存在这样的条件:#threads<=#tasks(即:线程数小于等于task数目)。默认情况下task的数目等于executor线程数目,即1个executor线程只运行1个task。----这个很重要设置多个就会有多个重复的task
Storm集群中有两种节点,一种是控制节点(Nimbus节点),另一种是工作节点(Supervisor节点)。
bolt 可以理解为计算程序中的运算或者函数,将一个或者多个数据流作为输入,对数据实施运算后,选择性地输出一个或者多个数据流。 bolt 可以订阅多个由 spout 或者其他bolt 发射的数据流,这样就可以建立复杂的数据流转换网络。而这个网络整体就是拓扑--------------------------即Topology
复杂点的图如下
随机分组,随机派发stream里面的tuple,下游每个bolt均衡接收到上游的tuple。
按字段分组,比如按userid来分组,具有同样userid的tuple会被分到相同的bolt,而不同的userid则被分配到不同的bolots。
广播发送,对于每一个tuple,所有的bolts都会收到。
如果下游bolt的某些task与上游spout/bolt的某些task运行在同一个worker进程中,那么上游spout/bolt的这些task所发射的所有tuples均由下游bolt的同进程的tasks来处理;否则,这种分组方式等同于shuffle grouping。
直接分组,用这种分组意味着消息的发送者指定优消息接收者的某个task处理这个消息,只有被声明为DirectStream的消息流可以声明这种分组方法。而且这种消息tuple必须使用emitDirect方法来发射。消息处理者可以通过TopologyContext来获取处理它的消息的taskid(OutputCollector.emit方法也会返回taskid)。
使用版本2.2.0,在官网上详细说明了需要的配件信息:
参考:
Python最新的官网下载地址:
#Python3.x 的安装需要依赖这四个组件:gcc, zlib,zlib-devel,openssl-devel;所以需要预先安装[cuiyaonan2000@163.com bin]# yum install gcc -y[cuiyaonan2000@163.com bin]# yum install zlib -y[cuiyaonan2000@163.com bin]# yum install zlib-devel -y[cuiyaonan2000@163.com bin]# yum install openssl-devel -y#下载python3.8.6[cuiyaonan2000@163.com bin]# wget https://www.python.org/ftp/python/3.8.6/Python-3.8.6.tgz#开始编译安装python[cuiyaonan2000@163.com bin]# cd Python-3.8.6#这个是设置安装的地址[cuiyaonan2000@163.com bin]# ./configure --prefix=/usr/app/python3.8[cuiyaonan2000@163.com bin]# make && make install#设置环境变量[cuiyaonan2000@163.com bin]# vim /etc/profile#加入如下的环境变量export PYTHON_HOME=/usr/app/python3.8export PATH=${PYTHON_HOME}/bin:$PATH#刷新配置文件[cuiyaonan2000@163.com bin]# source /etc/profile#验证是否安装成功[cuiyaonan2000@163.com Python-3.8.6]# python3Python 3.8.6 (default, Sep 30 2020, 14:33:35) [GCC 4.8.5 20150623 (Red Hat 4.8.5-39)] on linuxType "help", "copyright", "credits" or "license" for more information.>>> eixtTraceback (most recent call last): File "", line 1, in NameError: name 'eixt' is not defined>>> exit()
安装了Python3 要检查下yum是否还能使用.可以
vi /usr/bin/yum
测试yum能否正常使用: yum -y install vim
#下载storm[cuiyaonan2000@163.com soft]# wget https://mirrors.bfsu.edu.cn/apache/storm/apache-storm-2.2.0/apache-storm-2.2.0.tar.gz[cuiyaonan2000@163.com soft]# tar -zxvf apache-storm-2.2.0.tar.gz [cuiyaonan2000@163.com soft]# vi /etc/profile#增加如下内容export STORM_HOME=/soft/apache-storm-2.2.0export PATH=$STORM_HOME/bin:$PATH[cuiyaonan2000@163.com soft]# source /etc/profile
storm.yaml
配置文件, 增加如下内容# Zookeeper集群的主机列表storm.zookeeper.servers: - "10.1.80.190" - "10.1.80.191" - "10.1.80.192"# Nimbus的节点列表 注意这里可以写多个 用于主备用nimbus.seeds: ["10.1.80.190","hadoop002"]# Nimbus和Supervisor需要使用本地磁盘上来存储少量状态(如jar包,配置文件等)storm.local.dir: "/home/storm"# workers进程的端口,每个worker进程会使用一个端口来接收消息#假设只想启动 2 个 worker 的话,此处配置 2 个端口即可。#slot数量一般以每个服务器的CPU线程数来计算。supervisor.slots.ports: - 6700 - 6701 - 6702 - 6703#修改ui的端口,默认是8080,这个很容易冲突ui.port: 8766#设置work代表的jvm堆空间worker.childopts: "-Xmx2048m"
现在版本交替,配置内容可能不一样,2.2.0的配置项参考:
内容较少----这个版本最好的一点就是Nimbus可以是多个,所以可以进行主备了,当一台挂掉,另一台启动,并且数据不会丢失,因为都存储在zookeeper
如果只是nimbus的服务器只需要使用命令nohup storm nimbus &
如果只是supervisor的服务器只需要使用命令nohup storm supervisor &
如果及时nibus有事supervisor 这如上的两个命令都要启动.
Nimbus上运行 ui: nohup storm ui &
Nimbus上运行 logviewer运行: nohup storm logviewer &
# 启动主节点 nimbusnohup storm nimbus &# 启动从节点 supervisor nohup storm supervisor &# 启动UI界面 ui nohup storm ui &# 启动日志查看服务 logviewer nohup storm logviewer &
启动后可以使用jps来查看程序是否启动成功:
UIServer:即Storm管理界面
Nimbus:即Master
Supervisor:即运算程序
在启动ui后 输入启动ui服务器的IP:8080 就可以访问管理界面
转载地址:http://mbcmf.baihongyu.com/