Storm on Yarn :原理分析+平台搭建
Storm on YARN:
Storm on YARN被视为大规模Web应用与传统企业应用之间的桥梁。它将Storm事件处理平台与YARN(Yet Another Resource Negotiator)应用管理框架进行了组合,为此前进行批处理的Hadoop应用提供了低延迟的处理能力。
诞生背景(yahoo):
雅虎公司平台副总裁Bruno Fernandez-Ruiz表示,他们发现Hadoop在处理海量数据时的速度还不够快。Hadoop和MapReduce的速度无法满足用户事件,比如电子邮件、PV或搜索等,与可用的在线广告之间的快速匹配。
“MapReduce计算的问题在于批处理窗口。事件进来都是在做批量处理任务,这需要跑上两三个小时。” Fernandez-Ruiz说。
对于一些任务来说,这还算ok。但是当任务完成时,网站已经获得了更多信息。雅虎的技术人员出于某种考虑,认为有必要以不间断的流方式处理数据。
所以Storm on YARN就应运而生了。当MapReduce批处理应对长时间运行的任务时,Storm则用来处理那些低延迟的事件。在MapReduce运行尾声时,添加Storm能够得到访问用户行为的更完整视图。
1. 背景知识
(1)Storm:一个实时计算框架,与MapReduce离线计算框架互补,分别用于解决不同场景下的问题,Storm的官方网站是:http://storm-project.net/,如果想快速了解,推荐阅读淘宝的这篇文章:Storm简介。
(2)YARN:YARN是Hadoop 2.0中新引入的资源管理系统,可看做Hadoop操作系统中的资源管理组件,所有应用程序和框架,比如MapReduce、Storm和Spark等,均可运行在YARN之上,关于YARN,可阅读我的一系列文章:Hadoop-YARN。
(3)Storm On YARN:尝试将Storm运行在YARN上,这将来众多好处,具体本文将详细介绍。Storm On YARN最有名是Yahoo!的开源实现,具体参考:Storm On YARN。将Storm运行在YARN上并不是一件难事,但重要的是,它给我们开了一扇窗,我们可通过该项目实现HBase On YARN, Spark On YARN,Kafka On YARN等有意义的工作,具体参考我的这篇文章:汇总运行在Hadoop YARN上的开源系统。
2. Storm On YARN带来的好处
相比于将Storm部署到一个独立的集群中,Storm On YARN带来的好处很多,主要有以下几个:
(1) 弹性计算资源。 将Storm运行到YARN上后,Storm可与其他应用程序(比如MapReduce批处理应用程序)共享整个集群中的资源,这样,当Storm负载骤增时,可动态为它增加计算资源,而当负载减小时,可释放部分资源,从而将这些资源暂时分配给负载更重的批处理应用程序。
(2) 共享底层存储。 Storm可与运行在YARN上的其他框架共享底层的一个HDFS存储系统,可避免多个集群带来的维护成本,同时避免数据跨集群拷贝带来的网络开销和时间延迟。
(3) 支持多版本。可同时将多个Storm版本运行YARN上,避免一个版本一个集群带来的维护成本。
3. Storm On YARN架构
在文章“如何编写YARN应用程序”一文中,我已经介绍了如何在YARN上开发一个应用程序,通常而言,需要开发两个组件,分别是客户端和ApplicationMaster,其中,客户端的主要作用是将应用程序提交到YARN上,并与YARN和ApplicationMaster交互,完成用户发送的一些指令;而ApplicationMaster则负责向YARN申请资源,并与NodeManager通信,以启动任务。
为了不修改Storm任何源代码的情况下,让Storm运行在YARN上,最简单的实现方法是将Storm的各个服务组件(包括Nimbus和Supervisor),作为单独的任务运行在YARN上,而Zookeeper则作为一个公共的服务运行在YARN集群之外的几个节点上。
当前比较有名的“Storm On YARN”实现是由yahoo!开源的,它基本实现了上述描述的功能,下面具体进行说明:
(1) YARN-Storm Client
提供了一系列Shell命令供用户控制YARN上的Storm服务,比如构建一个Storm集群命令如下:
storm-yarn launch <storm-yarn-config>
其中,<storm-yarn-config>是Storm配置信息,包括启动的Supervisor个数、Storm ApplicationMaster占用的内存等。
启动Storm之后,用户可通过以下命令控制Storm:
storm-yarn [command] –appId [appId] –output [file] [–supervisors [n]]
其中,Command为具体命令,具体见下表,参数“-appId”为启动的Storm的应用程序Id,“-supervisors”为需增加的Supervisor服务个数,该参数只对命令“addSupervisors”有效。
结合使用startNimbus/stopNimbus、startUI/stopUI和startSupervisors/ stopSupervisors等命令,可完成对Storm集群的升级。
(2) YARN-Storm ApplicationMaster
Storm ApplicationMaster初始化时,将在同一个Container中启动Storm Nimbus和Storm Web UI两个服务,然后根据待启动的Supervisor数目向ResourceManager申请资源,在目前实现中,ApplicationMaster将请求一个节点上所有资源然后启动Supervisor服务,也就是说,当前Supervisor将独占节点而不会与其他服务共享节点资源,这种情况下可避免其他服务对Storm集群的干扰。
除了运行Storm Nimbus和Web UI外,Storm ApplicationMaster还会启动一个Thrift Server以处理来自YARN-Storm Client端的各种请求,在此不再赘述。
4. 当前Storm On YARN存在的问题
由于YARN本身的不完善,导致Storm On YARN设计存在诸多缺陷,以下是几个典型问题:
(1)难以将所有Storm服务运行在相邻的节点上,比如同一个机架上,这是由于YARN自身不支持资源组调度,只能实现指定一个rack,然后增量获取资源,以期望所有资源来自这个rack,但是当该rack空闲资源不足时,YARN也无能为力。
(2)由于Nimbus服务运行在ApplicationMaster上,而一旦ApplicationMaster失败后,YARN会将它运行在另外一个节点上,这意味着Nimbus服务可能神不知鬼不觉的在另一个节点上启动了,这给用户使用带来诸多不便,YARN需要提供一个ApplicationMaster或Nimbus位置获取服务,客户端直接通过该服务获取Nimbus位置即可。社区目前正在推荐一个基于Zookeeper的方案,你可以使用最新开源项目Weave完成该功能。
(3)NodeManager本身无法支持动态升级,这意味着,如果NodeManager升级,则它上面运行的服务将全部被杀死,这将给运行在YARN上的服务带来诸多不稳定因素。如果能够将更广泛的服务,比如Web server、Mysql等,运行在YARN上,需要让NodeManager支持动态升级,像YARN的同质项目Mesos那样。
本博客的文章集合:http://dongxicheng.org/recommend/
Storm on YARN平台搭建
1.环境准备
本文的重心是在YARN搭建Storm。搭建之前需要如下环境:
- Maven
- Jdk 7
- Hadoop 2.2.0 或者支持YARN的相关版本
- Zookeeper
Maven安装(使用Maven来build工程)
wget http://mirror.symnds.com/software/Apache/maven/maven-3/3.1.1/binaries/apache-maven-3.1.1-bin.tar.gz
tar –zxvf apache-maven-3.1.-bin.tar.gz
如果Zookeeper是单节点安装的,需要直接启动zkServer.sh
。
Hadoop安装见:Hadoop2.2.0 单机开发环境搭建测试和CDH4的YARN配置笔记。安装完后启动HDFS和YARN服务。
2.Storm on Yarn配置部署
(1) 下载Storm-yarn
a.GitHub上下载Storm on Yarn
wget https://github.com/yahoo/storm-yarn/archive/master.zip
b.解压
unzip master
c.修改hadoop版本
vim storm-yarn-master/pom.xml,修改Hadoop的版本号,改成对应的版本号
0.9.0-wip21
2.2.0
<!--hadoop.version>2.1.0.2.0.5.0-67</hadoop.version-->
(2) Storm-yarn编译
a.使用maven来build工程
cd storm-yarn-masterb.编译
mvn package
跳过测试:mvn package -DskipTests
(3) 配置Storm工作环境
a. 解压缩storm.zip
unzip $STORM_HOME/lib/storm.zipb. 添加Storm工程需要的额外Jar包到storm-0.9.0-wip21的lib下,重新压缩成storm.zip文件,上传至HDFS的指定目录中(非常重要,集群中通过访问hdfs中的storm.zip获取工作环境)
zip –r storm.zip storm-0.9.0-wip21
hadoop fs –put storm.zip /lib/storm/0.9.0-wip21/c. 添加storm-0.9.0-wip21和storm-yarn-master的bin到Path环境变量
export PATH=${PATH}:${STORM_HOME}/storm-0.9.0-wip21/bin
export PATH=${PATH}:${STORM_HOME}/bind.修改storm的配置
修改文件storm.yaml
vi storm-0.9.0-wip21/conf/storm.yaml
注:只修改了zookeeper的servers信息,添加zookeeper节点的host 其余没有改动。
storm.zookeeper.servers:
- "h1"
- "h2"
- "h3"
3.启动Storm-YARN环境
a. 提交运行storm on yarn,并得到一个ApplicationId
storm-yarn launch storm.yaml
注:因为storm是作为一个yarn程序运行在集群上的,所以会有一个AppId,如下图所示![]()
Storm On Yarn 启动
b. 存储storm.yaml文件到.storm,这样使用storm命令提交jobs时,会找到该文件
torm-yarn getStormConfig -appId application_1381089732797_0025 -output ~/.storm/storm.yaml
c. 通过以下命令得到Nimbus hostcat ~/.storm/storm.yaml | grep nimbus.host
4.测试Storm
a. 提交Topology
storm jar lib/storm-starter-0.0.1-SNAPSHOT.jar storm.starter.WordCountTopology WordCountTopology -c nimbus.host=<your nimbus host>
b. 监控Topology
查看Storm ui,地址是:http://<your nimbus host>:7070
c. 关闭Topologystorm kill [Topology_name]

Storm UI 图示
5.关闭Storm on yarn集群
storm-yarn shutdown –appId [applicationId]
推荐链接:
官网:Apache Hadoop NextGen MapReduce (YARN)
Hadoop 新 MapReduce 框架 Yarn 详解(IBM developerworks20130117)
YARN或将成为Hadoop新发力点(CSDN20130617)
Hadoop YARN的发展史与详细解析(CSDN20131220)
深入剖析阿里巴巴云梯YARN集群(CSDN20131204)
更快、更强——解析Hadoop新一代MapReduce框架Yarn(CSDN20140210)
Hadoop0.23.0初探4---让你的第一个YARN MapReduce跑起来(新浪博客)
YARN ResourceManager调度器的分析(UC技术博客20130620)
YARN中的资源调度疑问(UC技术博客20120821)
Storm on YARN Install on HDP2 Cluster(Hortonworks 部署)
Storm on YARN:通往企业级Hadoop(商务智能20130909)
Storm on YARN平台搭建(极豆技术博客20140220)
Storm on yarn安装步骤(推酷20140214)
storm on yarn 最简单安装笔记!!!私货哦!!!(csdn博客20140523)
Storm on Yarn :原理分析+平台搭建的更多相关文章
- ElasticSearch+Logstash+Filebeat+Kibana集群日志管理分析平台搭建
一.ELK搜索引擎原理介绍 在使用搜索引擎是你可能会觉得很简单方便,只需要在搜索栏输入想要的关键字就能显示出想要的结果.但在这简单的操作背后是搜索引擎复杂的逻辑和许多组件协同工作的结果. 搜索引擎的组 ...
- ELK日志分析平台搭建
ELK平台介绍 在搜索ELK资料的时候,发现这篇文章比较好,于是摘抄一小段: 以下内容来自:http://baidu.blog.51cto.com/71938/1676798 日志主要包括系统日志.应 ...
- ELKF-分布式日志收集分析平台搭建 最小化 配置过程 - 查看收集日志(windows10下搭建)
前言 Elasticsearch是与名为Logstash的数据收集和日志解析引擎以及名为Kibana的分析和可视化平台一起开发的.这三个产品被设计成一个集成解决方案,称为“Elastic Stack” ...
- SonarQube-5.6.3 代码分析平台搭建使用
python代码分析 官网主页: http://docs.sonarqube.org/display/PLUG/Python+Plugin Windows下安装使用: 快速使用: 1.下载jdk ht ...
- ELK日志分析平台搭建全过程
一.使用背景 当生产环境有很多服务器.很多业务模块的日志需要每时每刻查看时 二.环境 系统:centos 6.5 JDK:1.8 Elasticsearch-5.0.0 Logstash-5.0.0 ...
- 阶段3 3.SpringMVC·_05.文件上传_1 文件上传之上传原理分析和搭建环境
分成几个部分 里面可能就包含文件上传的值 提交方式要改成post 第三个就是提供一个input file的文件选择域 新建项目 新建一个项目 当前项目没有父工程 跳过联网下载 改成02 构建 编译和目 ...
- HTML5 移动应用开发环境搭建及原理分析
开发环境搭建: 一.Android 开发平台搭建 安装java jdk:\\10.194.151.132\Mewfile\tmp\ADT 配置java jdk 1) 新建系统变量,JAVA_HOME ...
- centos7搭建ELK Cluster集群日志分析平台(四):Fliebeat-简单测试
续之前安装好的ELK集群 各主机:es-1 ~ es-3 :192.168.1.21/22/23 logstash: 192.168.1.24 kibana: 192.168.1.25 测试机:cli ...
- centos7搭建ELK Cluster集群日志分析平台
应用场景:ELK实际上是三个工具的集合,ElasticSearch + Logstash + Kibana,这三个工具组合形成了一套实用.易用的监控架构, 很多公司利用它来搭建可视化的海量日志分析平台 ...
随机推荐
- Java实现带括号优先级的计算器
这个计算器不仅能够进行四则运算,还支持添加括号进行优先级计算,例如下面算式: 10+(2*16-20/5)+7*2=52 Java源代码: import java.awt.BorderLayout; ...
- hdu2108(判断凸多边形)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2108 题意: 给出一个多边形的所有顶点,判断是不是凸多边形: 思路: 判断凸多边形的方法比较多,如:若 ...
- hdu 2020
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2020 思路:优先队列水过priority_queue #include <cstdio> ...
- 与你相遇好幸运,CentOS 7 x86_64使用Yum安装PostgreSQL
访问http://yum.pgrpms.org/reporpms/repoview/letter_p.group.html,下载并安装和当前系统对应的rpm文件. wget https://downl ...
- Android bluetooth用户自定义数据
default mac: [btif_core.c] btif_fetch_local_bdaddr() default device name: [btif_dm.c] btif_get_defau ...
- ASP.NET Web Api 使用CacheCow和ETag缓存资源(转载)
转载地址:http://www.cnblogs.com/fzrain/p/3618887.html 前言 本文将使用一个开源框架CacheCow来实现针对Http请求资源缓存,本文主要介绍服务器端的缓 ...
- T-SQL 常用语句
1. 查看 Table 或者 Column 被那些object(存储过程.函数或View)调用. select a.* from sysobjects a, syscomments b where a ...
- [Tips] JavaScript 使用hash 对象传参
转自Web 前端开发修炼之道. 在JavaScript 中funciton 包含多个参数的时候,我们想要实现可选参数的功能,传很多个null 其实是个很讨厌的事情,这个时候就可以使用这个技巧. 具体见 ...
- SQL常见错误及处理方法
1.情况:数据库引擎安装失败,报类似权限不足的错误 解决:可能由于计算机名和用户名相同导致,更改计算机名,卸载干净重装即可
- php echo return exit 区别
echo.print().printf().sprintf().vardump().varexport():都可以输出内容到网页,但不退出函数或程序. return:返回并立即退出,函数级别. die ...