Storm 集群部署
Author:kangqi
Version:1.0.0
Date:2016.8.17
一、 storm简介
Storm是一个免费开源、分布式、高容错的实时计算系统。Storm令持续不断的流计算变得容易,弥补了Hadoop批处理所不能满足的实时要求。Storm经常用于在实时分析、在线机器学习、持续计算、分布式远程调用和ETL等领域。Storm的部署管理非常简单,而且,在同类的流式计算工具,Storm的性能也是非常出众的。
实现一个实时计算系统要解决的问题有:低延迟、高性能、分布式、可扩展、容错性。
storm优势:
简单的编程模型 MR降低了并行批处理的复杂性 Storm降低了进行实时处理的复杂性
服务化:一个服务框架,支持热部署时,即时上线或下线APP
支持各种编程语言,默认支持Java,ruby,Python,clojure。增加其他语言支持,只需实现一个简单的storm通信协议即可。
容错性:storm会管理工作进程和节点的故障
水平扩展:计算是在多个线程、进程和服务器之间并行进行的。
可靠的消息处理:storm保证每个消息至少能得到一次完整处理 任务失败会负责从消息源重试消息
快速:底层消息队列是ZeroMQ
本地模式 :模拟Storm集群
Storm架构:
集群由一个主节点(类似于job tracker和namenode)和多个工作节点组成(master和slaver的架构)。主节点运行了一个Nimbus的守护进程,用于分配代码、布置任务及故障检测。每个工作节点都运行了一个名为Supervisor的守护进程,用于监听工作,开始并终止工作进程。Nimbus和supervisor都是无状态的,都能快速失败,十分健壮。两者的协调工作是由Zookeeper来完成的。ZooKper用于管理集群中的不同组件,ZeroMQ是内部消息系统,JZMQ是zeroMQ的Java binding。AWS上一键部署Storm集群用的是storm-deploy的子项目。
Hadoop和Storm的几个名词的对比
Jobtracker nimbus
Tasktracker supervisor
Child worker(是一个进程)
Job topology
Mapper/reducer spout/bolt