Hadoop总结篇之四---底层通信是怎么做到的
上一篇介绍了一个job的提交过程。期间多次提到通信协议。那么协议是什么?
协议其实就是通信的双方所遵守的一套规范,这套规范规定了通信时传输的数据的固定的格式。
4.1 RPC协议:在hadoop中,我们采用的是RPC协议。
该协议主要包含四个部分:
序列化层:协议中的参数采用Protocol Buffers来序列化/反序列化。
这个Protocol Buffers是一种数据存储格式,可以理解我们按照其语法格式定义一个数据结构类model,然后使用工具(Protocol Buffers编译器)编译为我们所使用的语言,比如java。接下来,就可以使用对应库提供的Api来操作这个java语言的类来存储我们的数据。
网络传输层:序列化好后就需要传输,采用基于Tcp/IP的Socket机制
服务器端处理框架:传输成功后,就要考虑怎么在Server端进行处理。基于Reactor设计模式的事件驱动I/O模型
函数调用层:这里就是最后一步,怎么调用到具体的函数了。采用了反射和动态代理来实现的。
4.2 Hadoop RPC协议主要组成
4.2.1 server 实现细节(主要负责接到消息后的处理过程)

(1)接收请求
接收RPC 请求,封装为Call类型对象
放到一个共享队列(callQueue)中,以便进行后续处理。该阶段内部又分为建立
连接和接收请求两个子阶段,分别由Listener 和Reader 两种线程完成。
整个Server 只有一个Listener 线程,统一负责监听来自客户端的连接请求,一旦有新的请
求到达,它会采用轮询的方式从线程池中选择一个Reader 线程进行处理,而Reader 线程可同
时存在多个,它们分别负责接收一部分客户端连接的RPC 请求,至于每个Reader 线程负责
哪些客户端连接,完全由Listener 决定,当前Listener 只是采用了简单的轮询分配机制。
Listener 和Reader 线程内部各自包含一个Selector 对象,分别用于监听SelectionKey.
OP_ACCEPT 和SelectionKey.OP_READ 事件。对于Listener 线程,主循环的实现体是监听
是否有新的连接请求到达,并采用轮询策略选择一个Reader 线程处理新连接;对于Reader
线程,主循环的实现体是监听(它负责的那部分)客户端连接中是否有新的RPC 请求到
达,并将新的RPC 请求封装成Call 对象,放到共享队列callQueue 中。
(2)处理请求
从共享队列callQueue 中获取Call 对象,执行对应的函数调用,并
将结果返回给客户端,这全部由Handler 线程完成。
Server 端可同时存在多个Handler 线程,它们并行从共享队列中读取Call 对象,经执
行对应的函数调用后,将尝试着直接将结果返回给对应的客户端。但考虑到某些函数调用
返回结果很大或者网络速度过慢,可能难以将结果一次性发送到客户端,此时Handler 将尝
试着将后续发送任务交给Responder 线程。
(3)返回结果
前面提到,每个Handler 线程执行完函数调用后,会尝试着将执行结果返回给客户端,
但对于特殊情况,比如函数调用返回结果过大或者网络异常情况(网速过慢),会将发送任
务交给Responder 线程。
Server 端仅存在一个Responder 线程, 它的内部包含一个Selector 对象, 用于监听
SelectionKey.OP_WRITE 事件。当Handler 没能将结果一次性发送到客户端时, 会向该
Selector 对象注册SelectionKey.OP_WRITE 事件,进而由Responder 线程采用异步方式继续
发送未发送完成的结果。
4.2.2 client 类(主要负责建立连接发送请求)
Call类和Connection类。
Call类是请求的内容定义以及返回值定义
Connection供客户端建立一个通信连接。各种信息,包括Call类内容,都被封装到Connection中。
4.2.3 RPC类 (对服务器端、客户端的定义和管理)
提供一系列方法供调用,比如构建服务,启动服务等,设置基本参数(比如序列化方式)
4.3 Yarn RPC
将序列化部分剥离出来,自身作为一个工厂,可使用第三方的具体实现,比如Protocol Buffers对应的RPCEngine实现。底层的函数调用机制仍采用Hadoop自带的。
4.4 协议都用在哪?
yarn是资源管理系统负责资源的管理和调度。如果要让应用程序在yarn上得到执行,通常需要编写两个组件:
Client 提交应用程序、查询运行状态
ApplicationMaster 申请资源、与NodeManager通信启动Container,监控各个任务运行状态,失败时重新申请资源。
yarn已为我们实现了。这些组件和yarn框架通信,将使用下一节即将介绍的各种协议。
4.5 主要的RPC协议
我们从一个作业提交、执行、结束整个过程开始捋。
4.6.1 提交 ApplicationClientProtocol
Client和ResourceManager通信。提交、查询Application运行状态活杀死应用程序。
4.6.2 申请资源 ApplicationMastertProtocol
MRAppMaster和ResourceManager通信。注册、申请资源,获取任务运行状态。
4.6.3 执行ContainerManagementProtocol
APPMaster和NodeManager通信。启动/撤销Container活查询Container运行状态。
4.6.4 贯穿全局的ResourceTracker
负责ResourceManager和NodeManager之间的通信。定义了两个主主要的RPC函数:
registerNodeManager 向ResourceManager注册
nodeHearbeat 周期性发送心跳信息
4.6.5 MRAPPMaster
APPMaster启动后,Client和APPMaster直接通信,以减轻ResourceManager负担。
Hadoop总结篇之四---底层通信是怎么做到的的更多相关文章
- [老老实实学WCF] 第五篇 再探通信--ClientBase
老老实实学WCF 第五篇 再探通信--ClientBase 在上一篇中,我们抛开了服务引用和元数据交换,在客户端中手动添加了元数据代码,并利用通道工厂ChannelFactory<>类创 ...
- 【深入浅出 Yarn 架构与实现】2-2 Yarn 基础库 - 底层通信库 RPC
RPC(Remote Procedure Call) 是 Hadoop 服务通信的关键库,支撑上层分布式环境下复杂的进程间(Inter-Process Communication, IPC)通信逻辑, ...
- Hadoop总结篇之一------开篇
从今天开始新的系列:Hadoop总结篇 之前的hadoop学习篇由于是学习过程中随手记下来的一些内容,不具有系统性.所以在这个系列中,将凭着这段时间的研究心得,来记录一些自认为比较重要的东西. 本系列 ...
- Scala进阶之路-Spark底层通信小案例
Scala进阶之路-Spark底层通信小案例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Spark Master和worker通信过程简介 1>.Worker会向ma ...
- Hadoop总结篇之三---一个Job到底被提交到哪去了
我们会定义Job,我们会定义map和reduce程序.那么,这个Job到底是怎么提交的?提交到哪去了?它到底和集群怎么进行交互的呢? 这篇文章将从头讲起. 开发hadoop的程序时,一共有三大块,也就 ...
- Hadoop总结篇之二--yarn的概况
在弄清楚yarn是什么之前,先来看一下MRv1. 它的由编程模型+数据处理引擎(map/reduceTask)+运行时环境组成(JobTracker/TaskTracker).其中JobTracker ...
- hadoop入门篇---超详细hadoop服务器环境配置教程
虚拟机以及Linux系统安装在之前的两篇分享中已经详细的介绍了方法,并且每一步的都配图了.如果有朋友还是看不懂,那我也爱莫能助了.本篇主要就hadoop服务器操作系统配置进行详细说明,hadoop安装 ...
- Hadoop介绍篇
Hadoop详解 1.前言 对于初次接触Hadoop的小伙伴来说,Hadoop是一个很陌生的东西,尤其是Hadoop与大数据之间的关联,写这篇文章之前,我也有许多关于Hadoop与大数据的疑惑,接下来 ...
- Hadoop学习篇 2 初识 Hadoop
在一个全配置的集群上,运行Hadoop意味着在网络分布的不同服务器上运行一组守护进程 (daemons),这些守护进程或运行在单个服务器上,或运行与多个服务器上,他们包括: (1) NameNode( ...
随机推荐
- Oracle 导入导出--and一些知识,备忘
这两天在做迁移Ora数据库,有一个圆友帮忙,哈哈,两个臭皮匠顶半个诸葛亮. 本来以为很简单的就imp和exp就欧了,结果各种状况百出,百度了老多,学到好多东西. 你的导出:exp yc/yc@orcl ...
- Inversion_树状数组***
Problem Description You have a sequence {a1,a2,...,an} and you can delete a contiguous subsequence o ...
- Maven项目pom.xml文件详解
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...
- [.NET] CErrStack 方便地管理错误或异常
Option Explicit On Option Strict On Imports System.Reflection Imports System.Diagnostics Public Stru ...
- 页面上常用的一些小功能--QQ、回到顶部
1.QQ <script charset="utf-8" type="text/javascript" src="http://wpa.b.qq ...
- .htaccess详解及.htaccess参数说明【转】
目录(?)[-] htaccess 详解 htaccess rewrite 规则详细说明 RewriteEngine OnOff RewriteBase URL-path RewriteCond Te ...
- day05 java JDBC案例—Android小白的学习笔记
1.要从键盘录入用户名与密码我们需要使用Scanner类完成操作 2.接收到用户名与密码后,我们需要调用jdbc程序根据用户名与密码查询数据库 User.java package com.superg ...
- 本地计算机 上的 OracleOraDb11g_home1TNSListener 服务启动后停止
今天玩oracle的时候突然遇到一个问题:本地计算机 上的 OracleOraDb11g_home1TNSListener 服务启动后停止.某些服务在未由其他服务或程序使用时将自动停止. 在网上找解决 ...
- 加密web.config
当我们要进行数据库的连接时,就会根据<%$ connectionsStrings:MyConnectionStringName %>这个表达式在Web.config文件中找到和MyConn ...
- .net web端导出Excel个人的看法
//对已有方法进行重写 public override void VerifyRenderingInServerForm(Control control) { } //设置文件名 string fil ...