分享

Storm入门指南第一章 基础知识

本帖最后由 pig2 于 2014-7-24 00:55 编辑
问题导读
1、什么是Storm?
2、Storm常用于处理什么,哪些环境下用?
3、Storm集群由哪些构成?


Storm简介
Storm是一个分布式、可靠、容错的流式数据处理系统。处理工作被分派给不同类型的组件(components),每个组件分别负责一个简单、特定的处理任务。处理Storm集群输入流的组件叫喷口(spout),喷口再将数据传给一个叫螺栓(bolt)的组件,并在螺栓中处理数据,处理完成之后,螺栓要么将这些数据存储起来(存储在数据库、磁盘甚至是对象中),要么将它传给其他螺栓。因此,可以将Storm集群想象成一个螺栓链,每个螺栓都会对喷口发送的数据作出一些处理。

这里使用一个简单的例子去解释这个概念:昨晚我在看新闻时,几个播音员开始谈论政客和他们的地位,他们不停地重复不同的名字,我很好奇每个名字被提及的次数是否相同,还是有些偏差。

这里,将播音员们说的字幕想象成你的输入数据流,让spout来从一个文件(或者套接字[socket])读取这个输入。当成行的文本到达时,spout将它们交给一个bolt,该bolt将文本分离成一个个的单词。接着,这个单词流被传递到另一个bolt,这个bolt会将每个单词与一个预先定义好的政客名字列表作比较。对于每一次匹配成功(单词与政客名字相同),第二个bolt会在数据库中增加一次那个名字的计数。当你想看结果的时候,只需要查询数据库,该数据库在数据到达的时候会被实时更新。所有组件(spouts和bolts)的排列、连接被称为一个拓扑(topology),如图1-1.
1.jpg

topology图1-1 一个简单的拓扑

设想简单地定义整个集群中每个bolt和spout的并行度,这样你就可以无限地扩展你的拓扑。很神奇,对吧?尽管这只是一个简单的例子,但是你可以看到Storm有多强大。

Storm的典型用例有哪些呢?

流处理:正如前面的例子中所展示的,和其他流处理系统不同的是,使用Storm不需要中间队列。

连续计算:向客户端持续发送数据,以便它们能实时更新、显示结果,例如网站统计。

分布式远程过程调用:可简单地并行运行CPU密集型操作。

Storm集群组成部分
在Storm集群中,所有节点被一个连续运行的主节点管理。

在Storm集群中有两种节点:主节点(master node)和工作节点(worker nodes)。主节点上运行了一个叫Nimbus的后台进程,它负责在集群内分发代码、为每个工作节点指派任务、监控失败的任务。工作节点上运行了一个叫Supervisor的后台进程,它执行topology的一部分。Storm中的一个topology运行在很多工作节点上,这些工作节点分布在不同的机器。

由于Storm将所有集群状态保存在Zookeeper或者本地磁盘上,因此这些后台进程是无状态的,并且可以在不影响系统健康的情况下失效或者重启(见图1-2)。
2.jpg

Storm集群组成部分图1-2.Storm集群的组成部分

Storm在底层使用zeromq(0mq,zeromq),它是一个高级、可嵌入、提供极好特性的网络库,这使得Storm成为可能。下面列举了一些zeromq的特点:
充当并发框架的套接字库(socket lib)
对于集群产品和超级计算,比TCP更快速
在进程内、IPC、TCP和多播之间传递数据
异步IO支持可扩展的多核消息传递应用
通过展开、发布订阅、管道、请求应答连接N-to-N

Storm特性
编程简单:如果你尝试过从头开始构建实时处理系统,你就会明白它有多痛苦。使用storm,复杂性被大大减少。
支持多种编程语言:使用基于JVM的语言开发变得更简单了,然而storm支持任何语言,只要你使用或者实现一个小的中间库。
容错:Storm关注workers节点的宕机,并在必要时刻对任务进行重分配。
可扩展:为了扩展集群,你所需做的只是向集群中增加更多的机器,当它们可用的时候Storm会为新机器分配任务。
可靠:所有的消息都确保至少处理一次。如果有错误,消息可能会被处理不止一次,但是你永远不会丢失数据。
快速:速度曾是驱动Storm设计的关键因素。
事务性:对于几乎任何计算,你可以确切地获取一次消息语义。



下一篇:Storm入门指南第二章 入门


本文分享自:东风化宇,感谢原作者分享!



已有(1)人评论

跳转到指定楼层
quenlang 发表于 2014-10-10 09:26:18
讲的很好,准备学习storm了,感谢楼主的分享
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条