分享

关于RPC的一些疑问,请大牛给予指正

zhen9718 发表于 2014-8-18 20:39:56 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 3 6837
RPC是一种进程间的调用技术,我们写好一个MR程序之后,提交到服务器,使用的是RPC机制得到服务端的代理对象,然后返回jobID和存储jar的位置。
这里我有一个疑问,既然只是需要获取jobID和存储jar的位置,为什么不使用web请求,然后由服务端进行返回??为什么要使用RPC获取服务器的对象,然后得到jobID和存储jar的位置呢?

已有(3)人评论

跳转到指定楼层
sstutu 发表于 2014-8-18 21:31:30
本帖最后由 sstutu 于 2014-8-18 21:32 编辑


1.web请求其实是http协议,而你所说的web请求可能是在说通过界面的方式,hadoop有自己的REST API,所以你想通过rpc返回参数,也是可以用过web的方式的。

2.这里在说一下,为什么使用RPC:其实各种协议各有优点和缺点。
对于RPC有如下比喻:
RPC与是Socket的类比

两个老板手下各有一个负责接通MSN的秘书.这两个秘书就是基于RPC协议建立的会话层通信.老本不需要知道怎么使用MSN,只要告诉秘书,秘书就会通过MSN与对方建立会话请求和响应.而基于Socket的通信,老板需要会使用MSN,这样尽管老板需要事先培训一下MSN的简单使用常识,但若与对方通信时,无需经过秘书,效率更高.

也就说说:
Socket、RPC与http的区别与联系:
RPC使用简单方便,但是效率可能低一些。
Socket使用方便、灵活,但是开发麻烦。


socket是一个针对TCP和UDP编程的借口,你可以借助它建立TCP连接等等。而TCP和UDP协议属于传输层   
http是个应用层的协议,它实际上也建立在TCP协议之上。

换一种方式:http是建立在tcp端口上的一种通信协议了,也是一种socket接口
这里再次总结:
也就是说本质是Socket、RPC与http的区别与联系本质是Socket、RPC的区别
而转回来:
RPC使用简单方便,但是效率可能低一些。
Socket使用方便、灵活,但是开发麻烦。

作者为什么选择RPC,可能是因为Hadoop集群大部分都是局域网的方式,即使是两个集群分隔两地(虽然很少),但是RPC也能完成通信。所以作者权衡使用了RPC的方式。


不过在想想,你们的集群目前是十几台,还是几十台,并且还会把集群一个在广州,一个在北京,这种可能性几乎很少。只要有点云技术常识,是不会这么干的。

关于RPC和Socket,可以参考下面贴子
RPC和Socket的区别




回复

使用道具 举报

zhen9718 发表于 2014-8-18 22:34:14
sstutu 发表于 2014-8-18 21:31
1.web请求其实是http协议,而你所说的web请求可能是在说通过界面的方式,hadoop有自己的REST API,所以你 ...

十分感谢,同时对于整个MR处理流程,我也产生了更多的疑问,我先找找资料看是否能够解决,否则,还希望您能够不吝赐教。
回复

使用道具 举报

sstutu 发表于 2014-8-18 22:56:37
zhen9718 发表于 2014-8-18 22:34
十分感谢,同时对于整个MR处理流程,我也产生了更多的疑问,我先找找资料看是否能够解决,否则,还希望您 ...
关于mapreduce可以参考
mapreduce学习指导及疑难解惑汇总


Mapreduce汇总大全

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条