玩转大数据计算之Storm

Storm版本:我们使用0.10.2的版本。Storm团队在2016年4月份发布了历史性的版本升级,终于到了1.0.0的版本,不过我们仍然使用0.10.2的版本演示,这个版本是目前生产环境中使用的较多的版本。

Storm架构
下图是Storm的官方逻辑架构图:

storm-2.jpg

从架构图中可以看出,Storm由2类节点组成:一个master节点和多个slave节点。
master节点
在master节点上运行一个叫做“Nimbus”的守护进程。Nimbus 进程负责代码jar等资源的分发,分配任务给slave节点,以及故障监测。

slave节点
 每个slave节点上运行一个叫做”Supervisor”的守护进程。Supervisor进程监听分配给它的机器,并根据Nimbus 的委派在必要时启动和关闭工作进程。每个工作进程执行topology的一个子集。一个运行中的topology由很多运行在很多机器上的工作进程组成。

那么master节点和slave节点上运行的进程是如何协调工作了,答案就是:ZooKeeper
从Storm的架构图中我们也可以看到:
Nimbus和Supervisors之间所有的协调工作是通过Zookeeper集群完成的。 Nimbus的守护进程和Supervisors守护进程是无法互相直接连接(没有RPC通信)和无状态的;所有的状态维持在Zookeeper中或保存在本地磁盘上。这意味着你可以 kill -9 Nimbus 或Supervisors 进程,所以他们不需要做备份。这种设计使得Storm集群具有令人难以置信的稳定性。

Storm相关概念

1.Topologies:
一个完整的实时应用程序的逻辑是封装在Storm拓扑中。Storm拓扑类似于MapReduce作业。一个关键的区别是MapReduce作业最终会完成,而拓扑永远运行(或者直到你杀死它为止)。拓扑结构是与流分组连接的喷嘴和螺栓的图表

2.Streams:
流是Storm的核心抽象。
流是以分布式方式并行处理和创建的元组的无界序列。
流被定义为用于命名流的元组中的字段的模式。
默认情况下,元组可以包含整数,长整型,短片,字节,字符串,双精度,浮点数,布尔值和字节数组。
您还可以定义自己的序列化程序,以便定制类型可以在元组内部本地使用。
声明时,每个流都会被赋予一个id。由于单流Spouts和Bolts是如此常见,因此OutputFieldsDeclarer具有方便的方法来声明单个流而不指定id。在这种情况下,流的默认ID为“default”。

3.Spouts:
Spouts是拓扑中的流的源。通常Spouts将从外部源读取元组,并将其发布到拓扑中(例如Kafka)。Spouts可以是可靠或不可靠的。一个可靠的Spout能够重播一个元组,如果它无法被Storm处理,而一个不可靠的Spout一旦发出就忘记了元组。

Spouts可以发射多个流。为了这样做,使用声明多个流declareStream的方法OutputFieldsDeclarer并指定流以发射,使用SpoutOutputCollector的emit方法。

Spouts的主要方法是nextTuple,用于生成Tuple。

Spouts的其他主要方法是ack和fail。当Storm检测到从Spouts发出的Tuple已经通过拓扑成功完成或未能完成时,将调用这些命令。只有可靠的数据源才需要调用ack或者fail

4.Bolts
拓扑中的所有处理都是通过Bolts进行的。Bolts可以完成很多操作,例如:filtering, functions, aggregations, joins, talking to databases等。

Bolts可以进行简单的流转换。复杂的流转换通常需要多个步骤,因此需要多个Bolts。

Bolts可以发射多个流。为了生成多个流,使用声明多个流OutputFieldsDeclarer的declareStream的方法。

当声明一个Bolt的输入流时,您始终订阅另一个组件的特定流。如果要订阅另一个组件的所有流,则必须单独订阅每个流。

Bolts的主要方法是execute:处理新元组作为输入。Bolts使用OutputCollector对象发出新的元组。处理完成后,Bolts必须调用OutputCollector的ack方法,确认已经处理完成原始Tuple。

请注意,OutputCollector不是线程安全的。

5.Stream groupings

定义拓扑的其中一部分作用是为每个应该接收的Bolts指定输入。流分组定义了如何在Bolts的任务之间分配该流。

Storm有八个内置流分组,你可以通过实现自定义流分组CustomStreamGrouping接口来定制自己的流分组:

  • Shuffle grouping:Tuple被随机分布在Bolts的任务中,使得每个Bolt被保证获得相等数量的元组。
  • Fields grouping:流由分组中指定的字段分区。例如,如果流被“user-id”字段分组,则具有相同“user-id”的元组将始终进入相同的任务,但是具有不同“user-id”的元组可能会转到不同的任务。
  • Partial Key grouping:流由分组中指定的字段进行分区,如“字段”分组,但是在两个下游Bolts之间进行负载平衡,当传入数据歪斜时,可以更好地利用资源。
  • All grouping:流在所有的Bolts任务中复制。
  • Global grouping:整个流转到Bolts任务中的单个任务。具体来说,它到达最低ID的任务。
  • None grouping:此分组指定您不关心流如何分组。目前,无任何分组相当于混洗分组。
  • Direct grouping:这是一种特殊的分组。以这种方式分组的流意味着Tuple的生成者决定消费者的哪个任务将接收该Tuple。直接分组只能在已声明为直接流的流上声明。
  • Local or shuffle grouping:如果目标Bolts在同一个工作进程中具有一个或多个任务,则元组将被混洗分组,仅适用于进程内任务。否则,这样做就像一个正常的混洗分组。

6.Reliability
Storm保证每个Spout元组将被拓扑完全处理。它通过跟踪由每个出口Tuple触发的元组树,并确定该元组的树何时已经成功完成。每个拓扑都有一个与之相关联的“消息超时”。如果Storm无法检测到在该超时内已经完成了一个Spout元组,那么它将在元组失败后稍后重放。
为了利用Storm的可靠性功能,元组树在被创建和完成处理时都要要通知Storm。

7.Tasks
每个Spout或Bolt在集群中执行尽可能多的任务。每个任务对应一个执行线程,是Spouts或Bolts的组件实例。

8.Workers
Topology运行在一个或多个worker进程上,每个worker都是一个JVM虚拟机,运行着Topology所有task的一个子集。比如,Topology的并发度是300,设置50个worker,那么每个worker就会分配6个task。Storm会尽量平衡所有worker的task数量。

Storm安装

  • 下载地址:http://storm.apache.org/downloads.html 选择对应的版本下载,我下载是0.10.2版本。
  • 安装
    拷贝下载包到安装目录下,我的安装目录是:/Users/wesley/apps
tar zxvf apache-storm-0.10.2.tar.gz

进入conf目录:

cd conf

修改storm.yaml

vim storm.yaml

修改为如下的配置:

storm-2.png

storm.yaml的配置要注意有个坑:每个配置名称和值中间的冒号:前后都要有空格,不然会报:could not found expected ':' 的错误

后台进程方式启动Nimbus进程:

nohup bin/storm nimbus >> nimbus.log &

后台进程方式启动Supervisor进程:

nohup bin/storm supervisor >> supervisor.log &

后台进程方式启动Supervisor进程:

nohup bin/storm ui >> ui.log &

运行jps命令查看相关进程是否启动:

jps -l
storm-3.png

进入Storm UI页面查看是否安装正常:http://localhost:9090/index.html

storm-4.png

我们将在后面的文章演示如何使用Storm编程。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,189评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,577评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,857评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,703评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,705评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,620评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,995评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,656评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,898评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,639评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,720评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,395评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,982评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,953评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,195评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,907评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,472评论 2 342

推荐阅读更多精彩内容

  • 一、Storm是什么 Storm是一个免费并开源的分布式实时计算系统。利用Storm可以很容易做到可靠地处理无限的...
    Graceleeman阅读 3,017评论 0 6
  • 参考文章: Apache Storm 官方文档中文版 storm Tutorial 的解读 + 个人理解 官方文档...
    louisliaoxh阅读 1,137评论 0 1
  • 什么是实时流计算? 主要的处理模式可以分为:流处理,批处理 流处理是直接处理,有时也分为在线,离线,近线(st...
    Bloo_m阅读 5,044评论 1 1
  • Storm 系统中包含以下几个基本概念:拓扑(Topologies)流(Streams)数据源(Spouts)数据...
    发光的鱼阅读 825评论 0 0
  • ​唐高祖李渊占据关中后,父子四人是有分工的,其中李建成和李渊在长安居中调度;秦王李世民经略长安以西,对阵西楚霸王薛...
    科苑赏书阅读 800评论 0 0