您的位置:首页 > 运维架构 > Docker

Docker -- 分布式处理与大数据平台-Storm

2020-07-20 16:45 567 查看

Storm

Apache Storm 是一个实时流计算框架,由Twitter 在2014年正式开源,遵循Eclipse Public License 1.0,基于Clojure 等语言实现。
Storm集群与Hadoop集群在工作方式上十分相似,唯一区别在于Hadoop上运行的是MapReduce 任务,在Storm上运行的则是topology。MapReduce 任务完成处理即会结束,而topology则永远在等待消息并处理(直到停止)。
Storm集群有两种节点:主节点和工作节点,主节点运行一个叫“Nimbus”的守护进程(daemon),与Hadoop的“任务跟踪器”(Jobtracker)类似。Nimbus负责向集群中分发代码,向各机器分配任务,以及监测故障。工作节点运行“Supervisor”守护进程,负责监听Nimbus指派到机器的任务,根据指派信息来管理工作者进程(work process),每一个工作者进程执行一个topology 的任务子集。
Nimbus 和 Supervisors 之间的所有协调调度通过Zookeeper集群来完成。另外,Nimbus守护进程和Supervisor守护进程都是快速失败和无状态的,实现极高的稳定性。

1 使用Compose 搭建Storm集群

利用Docker Compose 模板,可以在本地单机Docker 环境快速地搭建一个Apache Storm 集群,进行应用开发测试。

1.1 Storm 示例架构

Storm示例架构如图所示:

其中包含如下容器:

  • zookeeper:Apache Zookeeper三节点部署
  • nimbus:Storm Nimbus
  • ui:Storm UI
  • supervisor:Storm Supervisor(一个或多个)
  • topology:Topology部署工具,其中示例应用基于官方示例storm-starter 代码构建。
    此处的Docker Compose文件和示例应用等可以从https://github.com/denverdino/docker-storm 获得。

1.2 本地开发测试

首先从Github下载需要的代码:

$ git clone https://github.com/denverdino/docker-storm.git
$ cd docker-swarm/local

代码库中的docker-compose.yml 文件描述了典型的Storm应用架构:

version: '2'
services:
zookeeper1:
image: baqend/storm:3.4.8
container_name:zk1.cloud
environment:
- SERVER_ID=1
- ADDITIONAL_ZOOKEEPER_1=server.1=0.0.0.0:2888:3888
- ADDITIONAL_ZOOKEEPER_2=server.2=zk2.cloud:2888:3888
- ADDITIONAL_ZOOKEEPER_3=server.3=zk3.cloud:2888:3888
zookeeper2:
image: baqend/storm:3.4.8
container_name:zk2.cloud
environment:
- SERVER_ID=2
- ADDITIONAL_ZOOKEEPER_1=server.1=zk1.cloud:2888:3888
- ADDITIONAL_ZOOKEEPER_2=server.2=0.0.0.0:2888:3888
- ADDITIONAL_ZOOKEEPER_3=server.3=zk3.cloud:2888:3888
zookeeper3:
image: baqend/storm:3.4.8
container_name:zk3.cloud
environment:
- SERVER_ID=3
- ADDITIONAL_ZOOKEEPER_1=server.1=zk1.cloud:2888:3888
- ADDITIONAL_ZOOKEEPER_2=server.2=zk2.cloud:2888:3888
- ADDITIONAL_ZOOKEEPER_3=server.3=0.0.0.0:2888:3888
ui:
image: baqend/storm:1.0.0
cammand: ui -c nimbus.host=nimbus
environment:
- STORM_ZOOKEEPER_SERVERS=zk1.cloud,zk2.cloud,zk3.colud
restart: always
container_name: ui
ports:
- 8080:8080
depends_on:
- nimbus
nimbus:
image: baqend/storm:1.0.0
command: nimbus -c nimbus.host=nimbus
restart: always
environment:
- STORM_ZOOKPEER_SERVERS=zk1.cloud,zk2.cloud,zk3.cloud
container_name: nimbus
ports:
- 6627:6627
supervisor:
image: baqend/storm:1.0.0
cammand: supervisor -c nimbus.host=nimbus -c supervisor.slots.ports=[6700,6701,6702,6703]
restart: always
environment:
- affinity:role!=supervisor
- STORM_ZOOKEEPER_SERVERS=zk1.cloud,zk2.cloud,zk3.colud
depends_on:
- nimbus
topology:
build: ../storm-starter
command: -c nimbus.host=nimbus jar /topology.jar org.apache.storm.starter.RollingTopWords production-topology remote
depends_on:
- nimbus
networks:
default:
external:
name: test-storm

可以直接运行下列命令构建测试镜像:

$ docker-compose build

用下面命令来一键部署一个Storm 应用:

$ docker-compose up -d

检查Storm应用状态

$ docker-compose ps

当UI容器启动后,可以访问容器的8080端口,打开操作界面,如图所示:

利用如下命令,可以伸缩supervisor的数量,比如伸缩到3个实例:

$ docker-compose scale supervisor=3

也许会发现Web界面中并没有运行中的topology。这是因为Docker Compose目前只能保证容器的启动顺序,无法确保所依赖容器中的应用是否已经完全启动并可以正常访问。
为了解决这个问题,需要运行下面的命令来再次启动“topology”服务应用来提交更新的拓扑:

$ docker-compose start topology

稍后刷新Storm UI,可以发现应用已经部署成功。

2 相关资源

Storm 的相关资源如下:
Storm 官网:http://storm.apache.org
Storm 镜像:https://hub.docker.com/r/baqend/storm

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐