hadoop之yarn Protocol Buffers

19 篇文章 0 订阅

我学习使用的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{

		@Override
		public ProtocolSignature getProtocolSignature(String arg0, long arg1,
				int arg2) throws IOException {
			// TODO Auto-generated method stub
			return null;
		}

		@Override
		public long getProtocolVersion(String arg0, long arg1)
				throws IOException {
			// TODO Auto-generated method stub
			return ClientProtocol.versionID;
		}

		@Override
		public 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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值