storm-1.1.1集群的的搭建

storm简介

名词解释:

  • spout,读取原始数据为bolt提供数据
  • bolt ,从spout或其它bolt接收数据,并处理数据,处理结果可作为其它bolt的数据源或最终结果
  • nimbus ,主节点的守护进程,负责为工作节点分发任务。
  • topology 拓扑结构,Storm的一个任务单元
  • define field(s) 定义域,由spout或bolt提供,被bolt接收

基础知识:
Storm是一个分布式的,可靠的,容错的数据流处理系统。它会把工作任务委托给不同类型的组件,每个组件负责处理一项简单特定的任务。Storm集群的输入流由一个被称作spout的组件管理,spout把数据传递给bolt, bolt要么把数据保存到某种存储器,要么把数据传递给其它的bolt。你可以想象一下,一个Storm集群就是在一连串的bolt之间转换spout传过来的数据。

Storm组件:
对于一个Storm集群,一个连续运行的主节点组织若干节点工作。
在Storm集群中,有两类节点:主节点master node和工作节点worker nodes。主节点运行着一个叫做Nimbus的守护进程。这个守护进程负责在集群中分发代码,为工作节点分配任务,并监控故障。Supervisor守护进程作为拓扑的一部分运行在工作节点上。一个Storm拓扑结构在不同的机器上运行着众多的工作节点。

Storm的特性:
在所有这些设计思想与决策中,有一些非常棒的特性成就了独一无二的Storm。

  • 简化编程:如果你曾试着从零开始实现实时处理,你应该明白这是一件多么痛苦的事情。使用Storm,复杂性被大大降低了。
  • 使用一门基于JVM的语言开发会更容易,但是你可以借助一个小的中间件,在Storm上使用任何语言开发。有现成的中间件可供选择,当然也可以自己开发中间件。
  • 容错:Storm集群会关注工作节点状态,如果宕机了必要的时候会重新分配任务。
  • 可扩展 :所有你需要为扩展集群所做的工作就是增加机器。Storm会在新机器就绪时向它们分配任务。
  • 可靠的:所有消息都可保证至少处理一次。如果出错了,消息可能处理不只一次,不过你永远不会丢失消息。
  • 快速:速度是驱动Storm设计的一个关键因素
  • 事务性:你可以为几乎任何计算得到恰好一次消息语义。

以下是设置Storm群集的步骤:

  1. 建立一个Zookeeper集群
  2. 安装依赖项
  3. 下载Storm
  4. 配置storm.yaml文件
  5. 启动storm集群

首先需要搭建一个zookeeper集群

Storm使用Zookeeper来协调群集。 Zookeeper不用于消息传递,所以Zookeeper上的负载Storm比较低。 在大多数情况下,单节点Zookeeper集群应该足够了,但是如果您想要故障切换或正在部署大型Storm集群,则可能需要较大的Zookeeper集群。 这里是部署Zookeeper的说明。
有关Zookeeper部署的一些注意事项:

  • 在监督下运行Zookeeper是非常重要的,因为Zookeeper是快速失败的,如果遇到任何错误情况,将会退出进程。 在这里看到更多的细节。
  • 设置一个cron来压缩Zookeeper的数据和事务日志是至关重要的。 Zookeeper守护进程本身并不这样做,如果你没有设置cron,Zookeeper将很快用完磁盘空间。 在这里看到更多的细节。

安装依赖

  • Java 7+
  • Python 2.6.6

下载storm

cd /opt
wget http://mirror.bit.edu.cn/apache/storm/apache-storm-1.1.1/apache-storm-1.1.1.tar.gz
tar -zxvf apache-storm-1.1.1.tar.ge
cd apache-storm-1.1.1

配置storm

Storm版本包含conf/storm.yaml文件,用于配置Storm守护进程。 你可以在这里看到默认的配置值。 storm.yaml将覆盖defaults.yaml中的任何内容。 有几个配置是强制性的,以获得一个工作集群:

  1. storm.zookeeper.servers:这是Storm集群的Zookeeper集群中的主机列表。 它应该看起来像这样:
storm.zookeeper.servers:
  - "192.168.10.101" #填写zookeeper集群的ip地址或者主机名
  - "192.168.10.102"
  - "192.168.10.103"

如果您的Zookeeper集群使用的端口与默认端口(2181)不同,您应该设置storm.zookeeper.port

  1. storm.local.dir:Nimbus和Supervisor守护进程需要本地磁盘上的一个目录来存储少量的状态(比如jar,confs等等)。 您应该在每台机器上创建该目录(mkdir /home/storm),给予适当的权限,然后使用此配置填写目录位置。 例如:
storm.local.dir: "/home/storm"
  1. nimbus.seeds:工作节点(worker nodes)需要知道哪些机器是主机的候选者,以便下载拓扑结构的jar和conf。 例如:
nimbus.seeds: ["192.168.10.101"]
  1. supervisor.slots.ports:对于每个工作机器,使用此配置可以配置在该机器上运行的worker数量。 每个worker使用单个端口接收消息,并且此设置定义哪些端口是打开使用的。 如果你在这里定义了五个端口,那么Storm将会分配多达五个worker在这台机器上运行。 如果你定义了三个端口,Storm最多只能运行三个端口。 默认情况下,此设置被配置为在端口6700,6701,6702和6703上运行4个worker。例如:
supervisor.slots.ports:
    - 6700
    - 6701
    - 6702
    - 6703
  1. Storm提供了一种机制,管理员可以通过配置该机制管理定期运行的脚本,以确定节点是否健康。 管理员可以通过在位于storm.health.check.dir中的脚本中执行任何选择检查来确定节点是否处于健康状态。如果脚本检测到节点处于不健康的状态,则必须以字符串ERROR打印一行到标准输出。 supervisor将定期在健康检查目录中运行脚本并检查输出。 如果脚本的输出包含字符串ERROR,如上所述,supervisor将关闭所有workers并退出。
    如果supervisor在监督下运行,则可以调用“/ bin / storm node-health-check”来确定是否应该启动supervisor或者该节点是否不健康。
    运行状况检查目录位置可以配置为:
storm.health.check.dir: "healthchecks"

脚本必须具有执行权限。 允许任何给定的健康检查脚本在被标记为失败之前运行的时间由于超时而失败,可以使用以下方法进行配置:

storm.health.check.timeout.ms: 5000

ok,保存退出,配置就算完成了。

  1. 配置外部库和环境变量(可选)
    如果您需要外部库或自定义插件的支持,可以将这些jar放入extlib /和extlib-daemon /目录中。 请注意,extlib-daemon /目录存储了仅由守护进程(Nimbus,Supervisor,DRPC,UI,Logviewer)使用的jar,例如HDFS和定制调度库。 因此,用户可以配置两个环境变量STORM_EXT_CLASSPATH和STORM_EXT_CLASSPATH_DAEMON,以包含外部类路径和仅守护进程的外部类路径。

启动守护进程

最后一步是启动所有的Storm守护进程。 在监督下运行这些守护进程是非常重要的。 Storm是一个快速失败(fail-fast)系统,意味着只要遇到意外错误,进程就会停止。 Storm的设计可以在任何时候安全停止,并在重新启动过程时正确恢复。 这就是为什么Storm在进程中不保持状态 - 如果Nimbus或Supervisors重新启动,运行的拓扑结构不受影响。 以下是如何运行Storm守护进程:

  1. Nimbus:在Storm主控节点上运行命令bin/storm nimbus &,启动Nimbus后台程序,并放到后台执行。
  2. Supervisor:在Storm各个工作节点上运行命令bin/storm supervisor &。启动Supervisor后台程序,并放到后台执行。 Supervisor守护进程负责启动和停止该机器上的工作进程。
  3. UI: 在Storm主控节点上运行命令bin/storm ui &,启动UI后台程序,并放到后台执行。运行Storm UI(一个您可以从浏览器访问的网站,该网站可以对集群和拓扑进行诊断)。 可以通过浏览您的Web浏览器访问UI:http:// {ui host}:8080
    通过命令jps可以看到相应的进程已经启动起来了。

配置环境变量

vim /etc/profile
export STORM_HOME=/opt/apache-storm-1.1.1
export PATH=$PATH:$STORM_HOME/bin
#保存退出即可
source /etc/profile #使配置文件立即生效

storm常用命令

通过执行命令storm就可以列出storm的所有命令列表了。

  1. jar命令负责把拓扑提交到集群,并执行它,通过StormSubmitter执行主类。
storm jar path-to-topology-jar class-with-the-main arg1 arg2 argN

path-to-topology-jar是拓扑jar文件的全路径,它包含拓扑代码和依赖的库。 class-with-the-main是包含main方法的类,这个类将由StormSubmitter执行,其余的参数作为main方法的参数。

  1. 停用拓扑:
storm deactivte topology-name 
  1. 启动一个停用的拓扑:
storm activate topology-name
  1. 杀死一个拓扑:
storm kill topology-name
  1. 再平衡拓扑(再平衡使你重分配集群任务。这是个很强大的命令。比如,你向一个运行中的集群增加了节点。再平衡命令将会停用拓扑,然后在相应超时时间之后重分配工人,并重启拓扑。):
storm rebalance topology-name

END

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