hadoop ipc.Server

Hadoop IPC分析 (基于v0.1.0)

抽象类,由RPC.Server实现了Writable call(Writable param)方法。

通过RPC.getServer()方法被调用,然后start()线程。

从业务上看,会启动server线程的地方有三处:

1. TaskTracker  2. JobTracker  3. NameNode

Server类的属性如下:

1. ThreadLocal SERVER; // 为线程局部变量

2. int port; // 端口

3. int handlerCount; // handler数量,dfs.namenode.handler.count,默认为10

4. int maxQueuedCalls; // 大小同handlerCount

5. Class paramClass; // 参数信息类,RPC.Invocation.class

6. Configuration conf; // 配置信息

7. int timeout; // ipc.client.timeout,默认10000

8. boolean running; // 状态位

9. LinkedList callQueue; // 请求队列

10. Object callDequeued; // 锁

Call类封装了client call id、参数和连接对象。

Connection类为线程,封装了连接的信息,包括socket、in和out。启动后读取client call id和参数信息,生成Call对象,加入callQueue队列。

Listener类为daemon线程,封装了socket信息,监听port端口,一个Listener对应一个Connection。

以上三个类的包含关系为: Listener -> Connection -> Call

Handler类为daemon线程类,循环读取callQueue请求队列,获取请求后,Writable value = call(call.param);然后将结果写到输出流中。

一个Server由一个Listener和多个Handler组成。

你可能感兴趣的:(Hadoop)