加入收藏 | 设为首页 | 会员中心 | 我要投稿 河北网 (https://www.hebeiwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

Hadoop 中 IPC 的源码说明

发布时间:2018-04-14 19:02:22 所属栏目:编程 来源:开源中国社区
导读:最近开始看 Hadoop 的一些源码,睁开hadoop的源码包,各个组件分得较量清晰,于是开始看一下 IPC 的一些源码。 IPC模块,也就是历程间通讯模块,假如是在差异的呆板上,那就可以领略为 RPC 了,也就是长途挪用。究竟上, hadoop 中的 IPC 也就是基于 RPC

最近开始看 Hadoop 的一些源码,睁开hadoop的源码包,各个组件分得较量清晰,于是开始看一下 IPC 的一些源码。

IPC模块,也就是历程间通讯模块,假如是在差异的呆板上,那就可以领略为 RPC 了,也就是长途挪用。究竟上, hadoop 中的 IPC 也就是基于 RPC 实现的。

行使 sloccount 统计一下 ipc 包中代码的行数,一共是 2884 行。也就是说,IPC 作为hadoop的基本组件,仅仅用了不到3000行的代码,就完成得不变且富有服从。

IPC 中的要害类相关:

Hadoop 中 IPC 的源码声名

对用户而言,可以直接行使的就是绿色的类。

通过 RPC 这个门面:

客户端可以建设响应的 proxy,接着就可以举办长途挪用。

而处事提供者则可以建设响应的 server,并举办响应的生命周期打点(start、stop),从而提供处事。

序列化

从上图也可以看出,client 和 server 的交互,是通过收集 connection, 而走收集的挪用,是必要走序列化/反序列话的进程的。

这个进程, IPC 行使了 Hadoop 的本身的序列化机制,统统都在 Writable 接口中,只要给定 writable 的 DataOutput 和 DataInput,就可以让 Writable 本身实现序列化。

一些题目和思索

  • client 是单例的吗 —— 可以领略为是,但着实不必然。可以跟踪 getProxy 的代码,固然每次城市新建一个署理工具,但底层的 Client 照旧和 SocketFactory 对应的。一样平常默认的,都是行使默认的 SocketFactory, 但假如你配置了 "hadoop.rpc.socket.factory.class.default" ,则会有新的Client与你自界说的 SocketFactory 对应。这时辰, client 就不是单例的。

  • client 与统一个 server 有几个毗连 —— 一个 client与一个 server 只有一个毗连,详细可以看天生的署理中,有一个 remoteId, 这个 remoteId 是和 client关联的,client 举办挪用的行使,会将此 remoteId 作为一个 connectionId。因此,一样平常一个 client 是一个毗连。

  • 假如 client 是一个毗连,那么对此 client 的挪用,不都是串行的吗? —— 看你怎么领略了,在用户层面,也就是 client 挪用的要领,是可以并发的。client 底层是行使一个毗连来进也许的完成吞吐量。每个 request 和 response 城市有一个 id 关联起来。因此一个毗连上可以跑满哀求和响应。

  • 因为收集题目,client挪用处事失败后,有重试机制吗 —— 在IPC中没有看到call的重试,必要上层去担保了。可是后头的挪用会从头成立毗连。

  • server 是单例的吗 —— 不必然。假如你只 getServer 一次的话。建设一个 server 的价钱长短常重的。通过上图你也可以知道,他必要有一个线程 (Listener)来 accept socket,同时必要一些 Reader线程 来举办 socket 的 read,尚有一个 Responder 来举办 socket 的 write,其它,尚有多少个 handler线程 来举办营业处理赏罚。因此,假如可以镌汰 server 的个数,就应该镌汰 server 个数。

  • 袒暴露的处事是否应该是线程安详的 —— 是的,必然要线程安详。server 底层是通过 nio 举办 socket 操纵的,因此固然只有一个线程认真 accept,可是可以或许支持许多的client毗连。这些毗连在达到 server 端之后,很有也许就会并发执行统一要领(假如你的营业handler不止一个的话)

  • 一个 server 要耗损几多线程资源? —— 让我们来算一下,一个 Listener 线程,多少个 Reader 线程(默认1个),多少个 Handler 线程(在 getServer 的时辰指定,一样平常1 - 10个),一个 Responder 线程。假如都凭证默认值来计较的话。起码必要 1 + 1 + 1 + 1 = 4 个线程。大概,不该该算多,假如哀求量不大的话,这些线程应该都被 blocked 住的。

总结

  • Hadoop 的 IPC 是一个较量轻量级此外 RPC
  • 从代码来看,只支持 java 历程之间的通讯
  • 从没有重试机制、一个Client 只有一个毗连的机制来看,得当与应用收集情形较好的场景,适条约机架可能同机房的集群。

P.S. 看了一下 io 包中,着实有个 retry 的 package,内里就是一个重试机制。稀疏的是为啥这个 package 被包括在 io package 中。

(编辑:河北网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读