YARN底层基础库
目录
四. 底层通信库
五. 服务库与事件库
- Protocol Buffers : Protocol Buffers是Google开源的序列化库,具有平台无关,高性能,兼容好等优点.Yarn将ProtocolBuffers用到RPC通信中,默认情况下,Yarn RPC中所有参数采用Protocol Buffers进行序列化/反序列化
- Apache Avro : Avro是Hadoop生态系统中的RPC框架,具有平台无关,支持动态模式等优点,Avro的最初设计动机是解决Yarn RPC兼容性和扩展性差等问题
- RPC库 : Yarn采用MR1中的RPC库,但其中采用的默认序列化方法被替换成了Protocol Buffers
- 服务库和事件库 : Yarn将所有的对象服务化,以便统一管理(创建,销毁等),而服务之间则采用事件机制进行通信
- 状态机库 : 状态机是一种表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型
- 平台无关,语言无关
- 高性能,解析速度是XML的20 ~ 100倍
- 体积小,文件大小仅是XML的1/10 ~ 1/3
- 使用简单
- 兼容性好
- 丰富的数据结构类型
- 快速可压缩的二进制数据形式
- 存储持久数据的文件容器
- 提供远程过程调用RPC
- 简单的动态语言结合功能
- 支持动态模式。Avro不需要生成代码,有利于搭建通用的数据处理系统,避免了代码入侵
- 数据无需加标签
- 无需手工分配的域标识
- 将每个被服务化的对象分为4个状态 : NOTINITED(被创建),INITED(已初始化),STARTED(已启动),STOPPED(已停止)
- 任何服务状态变化都可以触发另外一些动作
- 可通过组合的方式对任意服务进行组合,以便进行统一管理


- public class TaskEvent extends AbstractEvent<TaskEventType> {
- private String taskID;
- public TaskEvent (String taskID, TaskEventType type) {
- super(type);
- this.taskID = taskID;
- }
- public String getTaskID() {
- return taskID;
- }
- }
- // Task事件类型定义
- public enum TaskEventType {
- T_KILL,
- T_SCHEDULE
- }
- public class JobEvent extends AbstractEvent<JobEventType> {
- private String jobID;
- public JobEvent (String jobID, JobEventType type) {
- super(type);
- this.jobID = jobID;
- }
- }
- //Job事件类型定义
- public enum JobEventType {
- JOB_KILL,
- JOB_INIT,
- JOB_START
- }
- @SuppressWarnings("unchecked")
- public class SimpleMRAppMaster extends CompositeService {
- private Dispatcher dispatcher; //中央异步调度器
- private String jobID;
- private int taskNumber; //该作业包含的任务数目
- private String[] taskIDs; //该作业内部包含的所有任务
- public SimpleMRAppMaster (String name, String jobID, int taskNumber) {
- super(name);
- this.jobID = jobID;
- this.taskNumber = taskNumber;
- taskIDs = new String[taskNumber];
- for (int i = 0; i < taskNumber; i++) {
- taskIDs[i] = new String (jobID + "_task_" + i);
- }
- }
- public void serviceInit (final Configuration conf) throws Exception {
- dispatcher = new AsyncDispatcher(); //定义一个中央异步调度器
- //分别注册Job和Task事件调度器
- dispatcher.register(JobEventType.class, new JobEventDispatcher());
- dispatcher.register(TaskEventType.class, new TaskEventDispatcher());
- addService((Service)dispatcher);
- super.serviceInit(conf);
- }
- public Dispatcher getDispatcher() {
- return dispatcher;
- }
- private class JobEventDispatcher implements EventHandler<JobEvent> {
- @Override
- public void handle (JobEvent event) {
- if (event.getType() == JobEventType.JOB_KILL) {
- System.out.println("Receive JOB_KILL event, killing all the tasks");
- for (int i = 0; i < taskNumber; i++) {
- dispatcher.getEventHandler().handle(new TaskEvent(taskIDs[i], TaskEventType.T_KILL));
- }
- } else if (event.getType() == JobEventType.JOB_INIT) {
- System.out.println("Receive JOB_INIT event, scheduling tasks");
- for (int i = 0; i < taskNumber; i++) {
- dispatcher.getEventHandler().handle(new TaskEvent(taskIDs[i], TaskEventType.T_SCHEDULE));
- }
- }
- }
- }
- private class TaskEventDispatcher implements EventHandler<TaskEvent> {
- @Override
- public void handler (TaskEvent event) {
- if (event.getType() == TaskEventType.T_KILL) {
- System.out.println("Receive T_KILL event of task" + event.getTaskID());
- } else if (event.getType() == TaskEventType.T_SCHEDULE) {
- System.out.println("Receive T_SCHEDULE of task" + event.getTaskID());
- }
- }
- }
- }
- @SuppressWarnings("unchecked")
- public class SimpleMRAppMasterTest {
- public static void main (String[] args) throws Exception {
- String jobID = "job_20131215_12";
- SimpleMRAppMaster appMaster = new SimpleMRAppMaster("Simple MRAppMaster", jobID, 5);
- YarnConfiguration conf = new YarnConfiguration(new Configuration());
- appMaster.serviceInit(conf);
- appMaster.serviceStart();
- appMaster.getDispatcher().getEventHandler().handle(new JobEvent(jobID, JobEventType.JOB_KILL));
- appMaster.getDispatcher().getEventHandler().handle(new JobEvent(jobID, JobEventType.JOB_INIT));
- }
- }



YARN底层基础库的更多相关文章
- 【深入浅出 Yarn 架构与实现】2-2 Yarn 基础库 - 底层通信库 RPC
RPC(Remote Procedure Call) 是 Hadoop 服务通信的关键库,支撑上层分布式环境下复杂的进程间(Inter-Process Communication, IPC)通信逻辑, ...
- 【深入浅出 Yarn 架构与实现】2-1 Yarn 基础库概述
了解 Yarn 基础库是后面阅读 Yarn 源码的基础,本节对 Yarn 基础库做总体的介绍.并对其中使用的第三方库 Protocol Buffers 和 Avro 是什么.怎么用做简要的介绍. 一. ...
- 【深入浅出 Yarn 架构与实现】2-3 Yarn 基础库 - 服务库与事件库
一个庞大的分布式系统,各个组件间是如何协调工作的?组件是如何解耦的?线程运行如何更高效,减少阻塞带来的低效问题?本节将对 Yarn 的服务库和事件库进行介绍,看看 Yarn 是如何解决这些问题的. 一 ...
- cocos2d-x开发:服务端基础库封装
元旦前面几天都在忙着面试,随后的几天也就一直在做服务端基础库开发方面的工作.对于服务端开发,是很久之前的事情了.那时候我还在大学读书,一直都是在倒腾服务端开发方面的东西,毕业后参加公司工作就是一直从事 ...
- ESP8266开发之旅 网络篇⑥ ESP8266WiFiGeneric——基础库
1. 前言 在前面的博文中,博主介绍到ESP8266WiFi库是包含了很多功能的一个超级库.ESP8266WiFi库不仅仅局限于 ESP8266WiFi.h 和 ESP8266WiFi.cpp ...
- F#之旅5 - 小实践之下载网页(爬虫基础库)
参考文章:https://swlaschin.gitbooks.io/fsharpforfunandprofit/content/posts/fvsc-download.html 参考的文章教了我们如 ...
- Python底层socket库
Python底层socket库将Unix关于网络通信的系统调用对象化处理,是底层函数的高级封装,socket()函数返回一个套接字,它的方法实现了各种套接字系统调用.read与write与Python ...
- uTenux——重新整理底层驱动库
重新整理底层驱动库 1. 整理chip.h 在chip.h文件中的07----13的宏定义设置位如下,这样我们就不用在工程配中定义sam3s4c这个宏了,为我们以后通用少了一件麻烦事. //#if d ...
- 开始编写寄几的 CSS 基础库
前言 在现在的互联网业务中,前端开发人员往往需要支持比较多的项目数量.很多公司只有 1-2 名前端开发人员,这其中还不乏规模比较大的公司.这时前端同学就需要独挡一面支持整个公司上下的前端业务,项目如流 ...
随机推荐
- [ZJOI]2008 生日聚会
显然DP. 将题目转化下: 求由n个0.m个1组成,且满足任意子串0的数量和1的数量差绝对值不超过k的01串数量.n, m≤150,k≤20. 直接做没什么思路,,那我们尽量利用题目的时间和空间限制, ...
- linux 使用git
linux下使用git管理代码 环境:centos7.2 : 工具:xshell 1.安装git,命令如下: #yum install git 2.设置用户名和邮箱,命令如下: #git c ...
- 比特币and区块链
比特币简介 比特币(Bitcoin:比特金)最早是一种网络虚拟货币,可以购买现实生活当中的物品.它的特点是分散化.匿名.只能在数字世界使用,不属于任何国家和金融机构,并且不受地域的限制,可以在世界上的 ...
- 基于dbunit进行mybatis DAO层Excel单元测试
DAO层测试难点 可重复性,每次运行单元测试,得到的数据是重复的 独立性,测试数据与实际数据相互独立 数据库中脏数据预处理 不能给数据库中数据带来变化 DAO层测试方法 使用内存数据库,如H2.优点: ...
- JDK容器类Map源码解读
java.util.Map接口是JDK1.2开始提供的一个基于键值对的散列表接口,其设计的初衷是为了替换JDK1.0中的java.util.Dictionary抽象类.Dictionary是JDK最初 ...
- JDK的可视化工具系列 (四) JConsole、VisualVM
JConsole: Java监视与管理控制台 代码清单1: import java.util.*; public class JConsoleDemo { static class OOMObject ...
- 基于Docker的GitLab搭建
今天写一些Docker搭建GitLab,好久没有写博客园了,今天又回来了,为了学习技术? 建议使用Linux内核系统,或者虚拟机,首先安装docker环境(菜鸟教程) 一.下载镜像文件 如果慢的话,可 ...
- PHP 的一些底层知识
本篇内容比较干涩,请自备矿泉水 文章分6个主题进行讲解 PHP运行机制和原理 PHP底层变量数据结构 PHP传值赋值中的COW特性 PHP垃圾回收机制 PHP中数组底层分析 PHP数组函数分类 PHP ...
- Leetcode solution 227: Basic Calculator II
Problem Statement Implement a basic calculator to evaluate a simple expression string. The expressio ...
- 10.Go-goroutine,waitgroup,互斥锁和channel
10.1.goroutine goroutine的使用 //Learn_Go/main.go package main import ( "fmt" "time" ...