hadoop 集群的控制和数据流都被 Protocol 协议包装。
hadoop RPC 最简单的使用 说明 :
VersionedProtocol / getProtocolVersion 需要提供一个协议版本
我们先从使用最简单的使用开始理解 hadoop的 RPC.
参考:http://www.cnblogs.com/hiddenfox/archive/2011/12/30/2305786.html
1. 在 Server 端 , 通过 RPC.getServer 绑定实现 VersionedProtocol的实现类 .
实现类 其他RPC方法返回值 须是 Writable 实现类,保证可序列化传输.
2. 在 Client 端 ,调用 RPC.waitForProxy(VersionedProtocol实现类Class)
获取Client端 的代理类。
3. 在 Client 端,调用 proxy.xxx 方法,会在 Server 运行的并把 运行的 xxx 方法的返回值 通过 RPC 返回给 Client 的 proxy.xxx ;
再来看看hadoop内部 RPC 是怎么处理的 :
参考:
了解RPC内部的运行流程
1. 在 Server 端,使用 RPC.getServer
2. 会实例化出 RPC.Server 并 start()
2.1 start listener #server 接受监听请求,拥塞在 selector.select
关键在 listener.doAccept 处, 获取请求后 线程Reader
2.2 start responder #拥塞在 selector.select
2.3 start handlers #拥塞在 callQueue.take()
这一周断断续续的时间,搭建:
环境 : win7 cygwin java1.6 hadoop0.20.203
测试PRG开发 : /opt/app/hadoop/src/examples 下的
package org.apache.hadoop.examples.my
编译 : ant compile-examples
执行 : 自己写个简易的 运行脚本,待 使用 jdb 调试 准备
- classpat=""
- #加 examples 到 classpath ,和 hadoop core 其他类
- for var in `find /opt/app/hadoop/build -maxdepth 1 -type d | perl -nle 's/\/opt\/app\/hadoop\/build\//D:\/cygwin\/opt\/app_install\/hadoop-0.20.203.0\/build\//g;print "$_\/"'`
- do
- classpath=$var";"$classpath ;
- done
- # 运行依赖的其他jar
- for var in `find /opt/app/hadoop/lib -name "*.jar" -type f | perl -nle 's/\/opt\/app\/hadoop\/lib\//D:\/cygwin\/opt\/app_install\/hadoop-0.20.203.0\/lib\//g;print "$_\/"'`
- do
- classpath=$var";"$classpath ;
- done
- #java -cp $classpath org.apache.hadoop.examples.my.MyServer
- java -cp $classpath $1
MyClient.java
$> sh my_run.sh org.apache.hadoop.examples.my.MyClient
MyServer.java
$> sh my_run.sh org.apache.hadoop.examples.my.MyClient
未完
阅读(1506) | 评论(0) | 转发(0) |