如何在hadoop中使用hadooprpcrequestproto请求字段对方法参数进行编码

jutyujz0  于 2021-06-04  发布在  Hadoop
关注(0)|答案(1)|浏览(302)

hadoop rpc引擎使用协议缓冲区对来自线路的字节进行编码/解码。
我正在尝试使用hadooprpcrequestproto在hadoop服务器上调用一个方法

HadoopRpcRequestProto rpcReHadoopRpcRequestProtoquest;
    HadoopRpcRequestProto.Builder builder =   HadoopRpcRequestProto.newBuilder();
    builder.setMethodName("foo");

如果我的“foo”方法有两个参数,foo(字符串名,int num);
如何对参数进行编码并将其设置为hadooprpcrequestproto的请求字段?
短暂性脑缺血发作

frebpwbc

frebpwbc1#

你应该可以这样做:

private HadoopRpcRequestProto constructRpcRequest(Method method, Object paramObj) {
  HadoopRpcRequestProto rpcRequest;
  HadoopRpcRequestProto.Builder builder = HadoopRpcRequestProto
      .newBuilder();
  builder.setMethodName(method.getName());

  Message param = (Message) paramObj;
  builder.setRequest(param.toByteString());
  rpcRequest = builder.build();
  return rpcRequest;
}

对于 Message 我们谈论的班级 com.google.protobuf.Message . 我认为你需要写一个.proto文件并用 protoc 之后生成java绑定,然后可以在java代码中使用它。例如,一个.proto文件可以如下所示:

message Person {
  required int32 id = 1;
  required string name = 2;
  optional string email = 3;
}

如果你这么做了 protoc myperson.proto 然后将生成一个名为 MyPerson.java 会有一个内部类 Person 像这样:

public static final class Person extends
  com.google.protobuf.GeneratedMessage
  implements PersonOrBuilder {
   ...
}

这个 GeneratedMessage 类扩展自 AbstractMessage 它实现了 Message 我上面提到的接口。所以基本上你可以创建你的 Person 对象,然后您应该能够使用 builder.setRequest(person.toByteString()) .

相关问题