`

namenode任务线程之RPC

阅读更多

namenode需要监听和收集各个datanode的信息,需要在某个端口监听,然后等待datanode发送一些消息过来,同时这个端口也负责收集那些注册到namenode来的datanode的信息(心跳信息中带有其他元数据信息,而不是简单的心跳而已)

dfs.namenode.handler.count

 这个参数指定namenode机器上有多少个线程来处理datanode过来的请求,这里没有使用线程池技术,而是直接使用new Thread的方法,生成了count个线程。

在RPC监听主程序中使用Proactor网络模式,利用java nio增大并发处理量。

主程序中将接收到的请求构造为Call对象放入到BlockingQueue<Call>队列中,然后由之前生成的handle线程来取出并调用相应的处理类处理。

 

hadoop里针对网络处理使用的模式都很经典,故在此给出一些模式的参考:

 

Reactor   http://en.wikipedia.org/wiki/Reactor_pattern

Proactor  http://en.wikipedia.org/wiki/Proactor_pattern

 

本想贴几个图来说明这个模式的,发现只有图貌似大家不好理解,故找了几个网上比较好的文章给大家,让大家知道Proactor模式的含义:

 

http://www.javaworld.com.tw/jute/post/view?bid=44&id=17733&sty=1&tpg=8&age=0

 

http://cpp.ezbty.org//myfiles/boost/doc/html/boost_asio/overview/core/async.html

 

其实这个模式的定义以及起源都是源自一本书(POSA2)

Pattern Oriented Software Architecture, Volume 2 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics