Storm On YARN
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/mapreduce-nextgen/storm-on-yarn/
Storm On YARN相关推荐
- Storm on yarn 安装
1:下载 [jifeng@feng02 storm]$ wget https://github.com/yahoo/storm-yarn/archive/master.zip --2015-03-08 ...
- Spotify如何对Apache Storm进行规模扩展
[编者的话]Spotify是一家音乐流媒体服务商,最新的数据显示他们已经有6000万用户.Spotify内部使用Apache Storm来构建实时类系统,包括广告定位.音乐推荐以及数据可视化等.本文来 ...
- 汇总运行在Hadoop YARN上的开源系统
本文汇总了目前正在进行中的一些尝试将系统运行在YARN上的项目(很多项目狠不完善,有兴趣的可以参与进去,这是机会.),这些项目涉及分布式领域各个方面的系统,包括离线处理.在线计算.图算法.迭代式算法等 ...
- 什么是YARN?跟HBase和Spark比优势在哪?终于有人讲明白了
导读:HBase没有资源什么事情也做不了,Spark占用了资源却没有事情可做?YARN了解一下. 作者:朱凯 来源:大数据DT(ID:hzdashuju) 01 概述 随着Hadoop生态的发展,开源 ...
- 【读书笔记】YARN架构设计与实现原理
Hadoop技术内幕:深入解析YARN架构设计与实现原理 Hadoop技术内幕:深入解析YARN架构设计与实现原理 董西成 ◆ 第2章 YARN设计理念与基本架构 由于MRv2将资源管理功能抽象成了一 ...
- JStorm和Storm比较
1.What--JStorm是什么? 概述: JStorm 是一个分布式实时计算引擎,类似Hadoop MapReduce的系统, 用户按照规定的编程规范实现一个任务,然后将这个任务递交给JStorm ...
- Hadoop技术(二)资源管理器YARN和分布式计算框架MapReduce
资源管理器YARN和分布式计算框架MapReduce 第一章 Hadoop MapReduce 是什么 一 MapReduce 介绍 1. 基本介绍 2. MR数据流程方向 3. MR 原语/ 核心思 ...
- Hadoop大数据零基础高端实战培训系列配文本挖掘项目
<Hadoop大数据零基础高端实战培训系列配文本挖掘项目(七大亮点.十大目标)> 课程讲师:迪伦 课程分类:大数据 适合人群:初级 课时数量:230课时 用到技术:部署Hadoop集群 涉 ...
- mongodb视频教程云盘,深度讲解Java多线程开发—电子表项目实现
// 如果点击了确认修改按钮if (e.getSource() == amend_JB) {//获取到下拉框的值String hour_amend = hourAmend.getSelectedIte ...
最新文章
- c语言编程题餐饮服务打分,求详细分析C语言题餐饮服务质量调查打分题和答案..._质量员考试_帮考网...
- Java中的值传递和引用传递
- java web 播放音频_使用Java ME以流形式播放Web服务器上的音乐文件
- 数据港:攻破OPEX+SLA难题,实现全生命周期效能管理
- GetLastInputInfo 判断离开状态
- postman 发送到onenet,chinanet
- 带你探索CPU调度的奥秘
- Spring 中注入什么意思?
- sql 拼接同列的值
- Spring Framework的核心:Spring AOP
- Linux内核绑定1号cpu,Linux绑定硬件IRQ到指定CPU核
- 换IP软件用户如何选择?
- Pandas新增数据列
- Julia 数据科学应用
- 如何禁止 iPhone Safari 视频自动全屏?
- 软件测试的工作流程是什么?
- 【Mini KITTI】KITTI数据集简介 — Mini KITTI
- 【转载】设置端口映射或DMZ主机---将内网web服务器映射入公网
- 数据结构实验1.2—高精度计算PI值(西工大)
- Python数据分析:实时更新全国全球疫情分析
热门文章
- bubbliiiing/keras-face-recognition
- 3. Nest Provider
- 如何在工作中快速成长?致工程师的10个简单技巧
- 使用pandas处理时间变量
- Apache Kafka-Spring Kafka生产消费@KafkaListener源码解析
- 并发编程-21J.U.C组件拓展之Future和FutureTask
- JVM-05垃圾收集Garbage Collection(中)【垃圾收集算法】
- SQLite3单例模式(C++)
- CSDN内容颜色、位置以及图片大小改变
- mysql如果索引为uid间隙锁_mysql 开发进阶篇系列 10 锁问题 (使用“索引或间隙锁”的锁冲突)...