Storm和Hadoop的区别
Storm | Hadoop |
---|---|
实时计算 | 批处理 |
无状态的 | 有状态的 |
基于zk的主从模式 | master:appmaster+yarnchild |
流处理美妙处理数万消息 | hadoop mr框架计算海量数据花费数分钟 |
topology运行直到user或程序故障 | mr按序执行,最终执行结束 |
分布式+容错 | 分布式+容错 |
nimub或supervisor宕机后,重启后从stop的地方继续,没有影响 | 如果mr停止,所有data就丢失了 |
Storm优势
- 开源、友好、健壮,适用于大小公司
- 容错、灵活、可靠,支持跨语言
- 支持实时流计算
- 快,强大的数据处理能力
- 低延迟
- 操作智能化
- 确保数据在集群故障或数据丢失时,至少处理一次
相关概念
- Tuple
storm中主要数据结构,有序元素列表。默认,tuple支持所有数据类型。通常以”,”分割进行建模并传递给storm集群。
- Stream
无需的Tuple序列
- Spout
Streaming的源头,从原生数据源接受数据,通常是tweet api或者是kafka queue。ISpout是核心接口。
- Blot
逻辑处理单元,Spout的输出进入Bolt。Bolt处理并产生新的tuple。Bolt可以执行聚合、连接、过滤以及和数据源(数据库)交互。IBlot是Storm核心接口。
- Topology
Spout和Bolt连接在一起形成topology,可以理解成有向图,顶点用来计算,边是数据流动。起始于spout,输出到一个或者多个Bolt,Bolt是最小的数据处理逻辑,Bolt的输出也可以是其他Bolt的输入。
Topology保持始终运行的状态。Storm在给定的时间可以运行任意数量的top。 - Task
spout和Blot都是一个task,是运行着的spout或者bolt(运行时概念),spout和blot在运行时都可以多个实例,运行在单独线层中。
- Worker
工作进程,storm在所有worker node(工作进程)上尽可能平均传播task,worker的角色在新job到达时,进行监听、启动、停止。
- Nimbus
master,负责top运行,分析top,并收集task运行情况。分发task给可用的supervisor。分发数据给work节点,指派任务给工作节点,监听失败。
- Supervisor
有着一个或多个工作进程,代理工作进程的task
工作进程会产生多个执行线程来运行task。使用的是内部消息分发系统进行nimbus和supervisor之间通信。
接收nimbus指令,可以多个work process,管理工作进程来完成指派的task。 - Worker process
工作进程,storm在所有worker node(工作进程)上尽可能平均传播task。worker的角色在新job到达时,进行监听、启动、停止。
执行特定的top相关的task,需要创建executeor线程来运行task。一个work process可以有多个executor线程。 - Executor
执行线程,仅仅是worker process创建的一个线程。每个执行线程执行一个或多个task,这些task是特定的spout或者是blot的。
- Task
执行实际上的数据处理工作,或者spout,或者blot
- zk
维护nimbus和supervisor的状态