hadoop之yarn Protocol Buffers

来源:互联网 发布:javascript和php哪个好 编辑:程序博客网 时间:2024/04/26 03:11

我学习使用的hadoop源码是2.2版本,里面有一个相关Protocol Buffers的Jar包叫protobuf-java-2.5.0.jar。

使用protobuf生成的java类会import protobuf-java-2.5.0.jar中的类。所以Jar包的版本和protoc.exe版本必须一致。

可以去https://github.com/google/protobuf/releases?after=v2.6.0 找到protoc-2.5.0-win32.zip下载。

注:有一点要说明,你当然可以下载任意的版本,自己利用maven编译出来这个jar也是可以的。


1.下载后配置环境变量。

   略


2.我们新建一个包proto,里面编写一个proto文件

option java_package="com.eg3";option java_outer_classname="PersonProto";message Person{required string name = 1;required int32 id = 2;optional string email =3;message PhoneNumber{required  string number = 1;optional  int32 type = 2;}repeated PhoneNumber phone = 4;}

3.cmd命令中敲入如下代码,生成我们需要的java类

D:\>protoc -I=D:\workspaces\study\hadooptest\src\proto\  --java_out=D:\workspaces\study\hadooptest\src\ D:\workspaces\study\hadooptest\src\proto\person.proto


4.可以测试了,我定义一个Server和一个Client。这样Server生成一个person实例,而Client去获取这个person实例

package com.eg3;import java.io.IOException;import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.ipc.ProtocolSignature;import org.apache.hadoop.ipc.RPC;import com.eg3.PersonProto.Person;public class Server {    interface ClientProtocol extends org.apache.hadoop.ipc.VersionedProtocol{    public static final long versionID = 1L;//不写出错    Person print(); }public static class ClientProtocolImpl implements ClientProtocol{@Overridepublic ProtocolSignature getProtocolSignature(String arg0, long arg1,int arg2) throws IOException {// TODO Auto-generated method stubreturn null;}@Overridepublic long getProtocolVersion(String arg0, long arg1)throws IOException {// TODO Auto-generated method stubreturn ClientProtocol.versionID;}@Overridepublic Person print() {Person p = Person.newBuilder().setName("a").setEmail("b").setId(1).addPhone(Person.PhoneNumber.newBuilder().setNumber("11").setType(0)).addPhone(Person.PhoneNumber.newBuilder().setNumber("22").setType(1)).build();return p;}}public static void main(String[] args) throws Exception {Configuration conf = new Configuration();org.apache.hadoop.ipc.RPC.Server server = new RPC.Builder(conf).setProtocol(ClientProtocol.class).setInstance(new ClientProtocolImpl()).setBindAddress("127.0.0.1").setPort(12701).setNumHandlers(2).build();server.start();}}


package com.eg3;import java.net.InetSocketAddress;import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.ipc.RPC;import com.eg3.PersonProto.Person;import com.eg3.Server.ClientProtocol;public class Client {public static void main(String[] args) throws Exception {Configuration conf = new Configuration();InetSocketAddress addr = new InetSocketAddress("127.0.0.1",12701);ClientProtocol proxy =(ClientProtocol)RPC.getProxy(ClientProtocol.class,ClientProtocol.versionID,addr,conf);System.out.println(((Person)proxy.print()).getEmail());}}



0 0