Docker -- 分布式处理与大数据平台-Storm
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
- Docker -- 分布式处理与大数据平台-Elasticsearch
- 分布式处理与大数据平台(RabbitMQ&Celery&Hadoop&Spark&Storm&Elasticsearch)
- Docker实战(十)之分布式处理与大数据平台
- 【大数据平台技术】—— 使用Docker搭建Hadoop分布式集群 —— 酱懵静
- Storm (实时分布式大数据处理系统) 简介
- 开放实时数据处理平台 Storm
- 开放实时数据处理平台 Twitter Storm(转)
- 开放实时数据处理平台 Twitter Storm
- mapreduce和storm两者处理数据的区别!
- 分布式高级(十三)Docker Container之间的数据共享
- 携程基于Storm的实时大数据平台实践
- 在线实时大数据平台Storm单机部署
- 开源力量公开课第二十四期 - 为何Hadoop是分布式大数据处理的未来&如何掌握Hadoop?
- 分布式的数据存储平台 PNUTS
- 从Storm到Flink:大数据处理的开源系统及编程模型
- Storm - 大数据Big Data实时处理架构
- Storm构建分布式实时处理应用初探(转)
- Flume+Kafka+Storm+Redis构建大数据实时处理系统 - 大数据
- PLUTO平台是由美林数据技术股份有限公司下属西安交大美林数据挖掘研究中心自主研发的一款基于云计算技术架构的数据挖掘产品,产品设计严格遵循国际数据挖掘标准CRISP-DM(跨行业数据挖掘过程标准),具备完备的数据准备、模型构建、模型评估、模型管理、海量数据处理和高纬数据可视化分析能力。
- Storm - 大数据Big Data实时处理架构