A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© gjf 初级黑马   /  2019-9-28 18:57  /  1333 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

一. RPC通信模型
二. Hadoop RPC的特点概述
三. RPC总体架构
四. Hadoop RPC使用方法
五. Hadoop RPC类详解
六. Hadoop RPC参数调优


一. RPC通信模型

RPC是一种提供网络从远程计算机上请求服务,但不需要了解底层网络技术的协议

RPC通常采用客户机/服务器模型。请求程序是一个客户机,而服务提供程序则是一个服务器。一个典型的RPC框架,主要包括以下几个部分 : 
通信模块。两个相互协作的通信模块实现请求 - 应答协议,它们在客户和服务器之间传递请求和应答消息,一般不会对数据包进行任何处理。请求 - 应答协议的实现一般有同步方式和异步方式两种
同步模式下客户端程序一直阻塞到服务器断发送的应答请求到达本地
异步模式下将请求发送到服务端后,不必等待应答返回,可以做其他事情

Stub程序。客户端和服务器端均包含Stub程序,可以将之看作代理程序。它使得远程函数调用表现的跟本地调用一样,对用户程序完全透明。在客户端,Stub程序像一个本地程序,但不直接执行本地调用,而是将请求信息提供网络模块发送给服务器端,服务器端给客户端发送应答后,客户端Stub程序会解码对应结果。在服务器端,Stub程序依次进行解码请求消息中的参数、调用相应的服务过程和编码应答结果的返回值等处理
调度程序。调度程序接收来自通信模块的请求信息,并根据其中的标识选择一个Stub程序进行处理。通常客户端并发请求量比较大时,会采用线程池提高处理效率
客户程序/服务过程。请求的发出者和请求的处理者


一个RPC请求从发送到获取处理结果,所经历的步骤 :
客户程序以本地方式调用系统产生的Stub程序
该Stub程序将函数调用信息按照网络通信模块的要求封装成消息包,并交给通信模块发送给远程服务器端
远程服务器端接收此消息后,将此消息发送给相应的Stub程序
Stub程序拆封消息,形成被调过程要求的形式,并调用对应函数
被调用函数按照所获参数执行,并将结果返回给Stub程序
Stub程序将此结果封装成消息,通过网络通信模块逐级地传送给客户程序



2. 当某个source算子收到一个barrier时,便暂停数据处理过程,然后将自己的当前状态制作成快照,并保存到指定的持久化存储中,最后向CheckpointCoordinator报告自己快照制作情况,同时向自身所有下游算子广播该barrier,恢复数据处理 。


3. 下游算子收到barrier之后,会暂停自己的数据处理过程,然后将自身的相关状态制作成快照,并保存到指定的持久化存储中,最后向CheckpointCoordinator报告自身快照情况,同时向自身所有下游算子广播barrier,恢复数据处理。


4. 每个算子按照步骤3不断制作快照并向下游广播,直到最后barrier传递到sink算子,快照制作完成。

5. 当CheckpointCoordinator收到所有算子的报告之后,认为该周期的快照制作成功; 否则,如果在规定的时间内没有收到所有算子的报告,则认为本周期快照制作失败。

两个输入源checkpoint实现流程

如果一个算子有两个输入源,则暂时阻塞先收到barrier的输入源,等到第二个输入源相同编号的barrier到来时,再制作自身快照并向下游广播该barrier。具体步骤如下。

1. 假设算子C有A和B两个输入源 ,在第i个快照周期中,由于某些原因(如处理时延、网络时延等)输入源A发出的barrier先到来,这时算子C暂时将输入源A的输入通道阻塞,仅收输入源B的数据。

:
 
2. 当输入源B发出的barrier到来时,算子C制作自身快照并向CheckpointCoordinator报 告自身的快照制作情况,然后将两个barrier合并为一个,向下游所有的算子广播。


 
3. 当由于某些原因出现故障时,CheckpointCoordinator通知流图上所有算子统一恢复到某个周期的checkpoint状态,然后恢复数据流处理。分布式checkpoint机制保证了数据仅被处理一次(Exactly Once)。


checkpoint机制是Flink的重要特性,他是Flink的容错的轻量级实现,当Flink程序运算出错,只需要在checkpoint
保存的运算状态数据中恢复数据即可,不需要进行重新的运算去恢复数据。掌握checkpoint机制是学习Flink的重要
环节。1. CheckpointCoordinator周期性的向该流应用的所有source算子发送barrier。

2. 当某个source算子收到一个barrier时,便暂停数据处理过程,然后将自己的当前状态制作成快照,并保存到指定的持久化存储中,最后向CheckpointCoordinator报告自己快照制作情况,同时向自身所有下游算子广播该barrier,恢复数据处理 。

3. 下游算子收到barrier之后,会暂停自己的数据处理过程,然后将自身的相关状态制作成快照,并保存到指定的持久化存储中,最后向CheckpointCoordinator报告自身快照情况,同时向自身所有下游算子广播barrier,恢复数据处理。

4. 每个算子按照步骤3不断制作快照并向下游广播,直到最后barrier传递到sink算子,快照制作完成。

5. 当CheckpointCoordinator收到所有算子的报告之后,认为该周期的快照制作成功; 否则,如果在规定的时间内没有收到所有算子的报告,则认为本周期快照制作失败。

两个输入源checkpoint实现流程

如果一个算子有两个输入源,则暂时阻塞先收到barrier的输入源,等到第二个输入源相同编号的barrier到来时,再制作自身快照并向下游广播该barrier。具体步骤如下。

1. 假设算子C有A和B两个输入源 ,在第i个快照周期中,由于某些原因(如处理时延、网络时延等)输入源A发出的barrier先到来,这时算子C暂时将输入源A的输入通道阻塞,仅收输入源B的数据。
 
2. 当输入源B发出的barrier到来时,算子C制作自身快照并向CheckpointCoordinator报 告自身的快照制作情况,然后将两个barrier合并为一个,向下游所有的算子广播。
 
3. 当由于某些原因出现故障时,CheckpointCoordinator通知流图上所有算子统一恢复到某个周期的checkpoint状态,然后恢复数据流处理。分布式checkpoint机制保证了数据仅被处理一次(Exactly Once)。
 

小结

checkpoint机制是Flink的重要特性,他是Flink的容错的轻量级实现,当Flink程序运算出错,只需要在checkpoint
保存的运算状态数据中恢复数据即可,不需要进行重新的运算去恢复数据。掌握checkpoint机制是

1 个回复

倒序浏览
一个人幸运的前提,其实是他有能力改变自己。嗯,来到这里的我们都是幸运的吧?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马