一、前言
YARN/MRv2在处理请求时采用了基于事件驱动机制的异步编程模型SEDA,如下图所示:
事件通过Dispather中一个HandlerThread分发给该事件对应的EventHandlerService来处理。每种事件对应一种EventHandler。未被EventHandler处理的事件,会放在EventQueue中等待被处理。
SEDA(Staged Event Driven Architecture)是加州大学伯克利分校研究的一套优秀的高性能互联网服务器架构模型。其设计目标是:支持大规模并发处理、简化系统开发、支持处理监测、支持系统资源管理。其综合了多线程服务器和事件驱动并发处理这两种并发处理编程模型的优势。本文先对这两种被广泛使用的网络服务器架构模型进行介绍。
二、多线程服务器(Threaded Server)
工作原理:
对于每一个request,dispatcher会为其创建并分配一个线程。该线程负责这个请求的处理。这种方式 又名(Thread-per-request)。
优点:
执行粒度是整个完整的处理流程。处理逻辑清晰,容易开发。
缺点:
当随着处理请求不断增加,导致并发执行的线程数量太多。过多的线程数量导致系统在线程调度和资源争用上的开销过大。引起系统性能急剧下降。导致系统处理能力下降。
改进措施:
线程池(Bounded Thread Pools)
系统最多只能创建一定数量的线程。当所有线程都饱和运行时,新到达的处理请求只能等待,或者被抛弃。
缺点:
执行粒度仍然是完整的处理流程。难以检测系统性能瓶颈的根源以及进行相应调整
三、事件驱动并发处理(Event-Driver Concurrency)
将处理流程分割成多个步骤,每一个步骤都实现为一个有限状态机(FSM)。
工作原理:
所有的处理请求会作为Event进入系统。由Scheduler负责传递给相应FSM。FSM的处理结果也以Event形式输出给Scheduler。新的Event会再次被Scheduler进行转发给下一个FSM。直至处理完成。
优点:
1、随着处理量的增加,系统负荷是以线形增长。当达到系统饱和处理能力后。系统的处理能力不会下降。
2、由于将各个处理步骤独立实现,可以很容易的进行系统监测和调整。
缺点:
Scheduler的设计和实现过于复杂。针对于不同的应用和系统的逻辑变更需要不同的实现。
四、SEDA架构
(近似于Event-Driven Concurrency,但是没有其中的Scheduler)
将每一个处理步骤独立为一个Stage。
Stage结构:
1、 一个接受输入的Event Queue;
2、 一个应用开发者编写的Event Handler;
3、 一个Controller用于对执行过程进行控制。包括并发线程数量,批处理数量,…;
4、 一个Thread Pool用于并发处理;
Stage的输入通过Event Queue获得。Stage的输出会以Event形式推送到其他Stage的Event Queue中。Stage之间的这种连接关系由应用开发人员指定。
带来的问题:Event Queue尽管减少了模块间的耦合性,但是会降低响应速度。
五、总结
SEDA架构将应用的整个处理过程分割为多个步骤即Stage。
1)每个Stage可以独立进行开发。
2)Stage之间通过Event Queue来进行通信,可以降低耦合性。可以以很小的成本来适应将来的系统逻辑变化。
3)系统提供了标准的资源控制,使得应用开发人员只需要专注于实现Event Handler的内部逻辑。而无须关注多线程、资源共享、…
4)可以在运行时对于每一个Stage的运行情况进行监测以及调整。
六、参考文献
http://larryzhu.bokee.com
http://sourceforge.net/projects/seda/
- 大小: 13.3 KB
- 大小: 20.7 KB
- 大小: 26.4 KB
- 大小: 24.9 KB
- 大小: 26.2 KB
分享到:
相关推荐
YARN(MRv2)搭建
yarn-v0.23.2.tar.gz 在安装ambari,源码编译的时候下载的文件有问题 手动下载 地址 https://github.com/yarnpkg/yarn/releases/download/v0.23.2/yarn-v0.23.2.tar.gz
2. **锁定文件**:Yarn 使用 `yarn.lock` 文件来确保所有开发者的环境中安装的包版本一致,解决了 npm 的版本漂移问题,提高了项目的可预测性和可重复性。 3. **并行下载**:Yarn 能够并行下载依赖包,显著提升了...
在YARN/K8S上部署Flink,意味着Flink应用可以无缝接入大数据生态系统,并利用YARN/K8S的资源管理能力,实现资源的有效调度和高可用性部署。同时,这种集成也为大数据处理提供了更加灵活的运行环境,用户可以根据自己...
在这个主题中,我们将深入探讨"Yarn编程ApplicationList",包括如何实现应用列表的查询、应用的kill操作,以及Job的查询和map/reduce任务数量的查询。 首先,`Yarn编程ApplicationList`涉及到的主要概念是YARN的...
一种Yarn框架下的异步双随机梯度下降算法
同时,通过阅读源码,开发者可以学习到Node.js模块化、异步编程、包管理等方面的最佳实践。 总的来说,`yarn-v1.19.1.tar.gz`提供了深入研究Yarn这个强大工具的机会,无论是为了提升自己的技术能力,还是为了参与到...
分级聚类算法作为案例被用于分析SY-TPP平台的编程步骤,此算法能够处理大规模数据集,并且能够从海量数据中抽取有用信息,有助于电信运营商更好地理解用户行为,从而为用户提供更加个性化的服务。实验结果表明,该...
这里首先介绍了Hadoop 2.x的发布,对Hadoop 1.x及其MapReduce API的简要介绍,以及MRv1与MRv2的对比。接着,文档讨论了YARN在Hadoop中的作用,以及MapReduce API的向后兼容性和org.apache.hadoop.mapred API的二进制...
TypeError: self.env.emit is not a function at /usr/local/share/.config/yarn/global/node_modules/yeoman-generator/lib/index.js:653:22 at processTicksAndRejections (internal/process/task_queues.js:97:5)...
- **MapReduce v2 (MRv2):** 作为 YARN 的一部分,支持新的 API,提高了灵活性和性能。 **2. MapReduce v1 与 MapReduce v2 的对比:** - **API 变更:** MRv2 提供了新的 API,允许开发者编写更复杂的应用程序。 ...
标题 "Hadoop Reduce Join及基于MRV2 API 重写" 涉及到的是大数据处理框架Hadoop中的一个重要操作,即数据连接(Join)。在Hadoop MapReduce中,Reduce Join是一种实现大规模数据集间连接的高效方法。本文将探讨...
获取 Application 列表编码是 Yarn 中的一种常见操作,本文将对其进行详细的分析和介绍。 Yarn 获取 Application 列表编码概述 Yarn 获取 Application 列表编码是指通过 Yarn 客户端 API 获取当前 Hadoop 集群中的...
Hadoop的YARN架构是Hadoop版本2.x引入的一个重要组件,它负责处理资源管理和作业调度,而核心的计算任务处理则交给了MapReduce、Tez、Spark等计算框架。YARN的出现是为了解决Hadoop早期版本中的可扩展性问题,它通过...
SPARK2_ON_YARN-2.4.0 jar包下载
rate-limit-redis redis中间件的存储 。...安装来自 npm 注册表# Using npm> npm install rate-limit-redis# Using yarn or pnpm> yarn/pnpm add rate-limit-redis来自 Github 发布# Using npm> npm install ...
本文将详细介绍如何在 `Yarn` 中指定配置文件进行前端打包。 首先,了解 `Yarn` 的工作原理。`Yarn` 遵循 `npm` 的包管理和工作流程,但它的优势在于缓存策略和锁定文件(`yarn.lock`),确保在不同环境下有相同...
Hadoop YARN(Yet Another Resource Negotiator)是Apache Hadoop项目中的一个核心组件,它的设计目标是解决早期Hadoop 1.x版本中MapReduce(MRv1)存在的问题,包括扩展性限制、单点故障以及对其他计算框架支持不足...