成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Hadoop中IPC的源碼分析

大數據 Hadoop
最近開始看 Hadoop 的一些源碼,展開 hadoop 的源碼包,各個組件分得比較清楚,于是開始看一下 IPC 的一些源碼。

最近開始看Hadoop的一些源碼,展開 hadoop 的源碼包,各個組件分得比較清楚,于是開始看一下IPC的一些源碼。

IPC模塊,也就是 進程間通信模塊,如果是在不同的機器上,那就可以理解為 RPC 了,也就是遠程調用。事實上, hadoop 中的 IPC 也就是基于 RPC 實現的。

使用 sloccount 統計一下 ipc 包中代碼的行數,一共是 2884 行。也就是說,IPC 作為hadoop的基礎組件,僅僅用了不到3000行的代碼,就完成得穩定且富有效率。

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 中。

原文鏈接:http://my.oschina.net/zavakid/blog/119020

責任編輯:林師授 來源: zavakid的博客
相關推薦

2022-03-30 15:06:25

數據傳輸Harmony源碼分析

2012-05-31 02:54:07

HadoopJava

2017-05-15 19:40:40

AndroidIPC機制

2019-12-31 14:59:06

TomcatNIOJava

2023-04-28 08:42:08

Linux內核SPI驅動

2021-03-13 14:08:00

Hadoop 源碼HDFS

2014-08-26 11:11:57

AsyncHttpCl源碼分析

2011-03-15 11:33:18

iptables

2011-08-31 16:01:33

2011-05-26 10:05:48

MongoDB

2018-06-15 20:44:40

Hadoop數據分析數據

2021-11-11 17:40:08

WatchdogAndroid源碼分析

2020-08-26 14:00:37

C++string語言

2021-03-11 08:10:48

JVM對象的創建School

2015-11-16 11:22:05

Java對象內存分配

2018-07-19 15:57:46

ViewStub源碼方法

2015-03-24 15:08:21

mapreducehadoop

2011-05-26 16:18:51

Mongodb

2011-08-19 18:30:52

ipc中文man

2016-12-22 09:52:13

Hadoop大數據分析
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 91色啪| 日本三级线观看 视频 | 精品无码久久久久久国产 | 一区二区久久 | 国产a一区二区 | 亚洲精品久久久一区二区三区 | 欧美一区二区三区久久精品视 | www国产亚洲精品久久网站 | 国产免费一区二区三区 | 日韩久久综合网 | 国产精品欧美一区二区 | 欧美一区不卡 | 国产精品国产成人国产三级 | 久久一级 | 日本久久精 | 欧美一区二区三区在线观看视频 | 91最新视频 | 伊人伊成久久人综合网站 | 久久aⅴ乱码一区二区三区 亚洲国产成人精品久久久国产成人一区 | 毛片免费在线 | 亚洲欧美日韩在线 | 国产美女黄色片 | 色眯眯视频在线观看 | 免费黄色的视频 | 曰韩三级| 一级黄a视频 | 91精品中文字幕一区二区三区 | 视频第一区 | 国产一区二区在线播放 | 国产丝袜av | 丁香综合 | 日韩精品免费一区二区在线观看 | 特级丰满少妇一级aaaa爱毛片 | 久久国产99 | 午夜寂寞福利视频 | 国产成人在线视频播放 | 狠狠操在线 | 婷婷精品 | 午夜国产一级 | 99精品在线免费观看 | 99精品视频在线观看免费播放 |