Hadoop RPC protocol description--转

本文介绍了Snakebite如何实现Hadoop RPC协议与NameNode进行通信的具体过程,包括连接建立、消息发送与接收等核心内容,并详细解析了各部分的数据格式及序列化方式。

原文地址:https://spotify.github.io/snakebite/hadoop_rpc.html

Snakebite currently implements the following protocol in snakebite.channel.SocketRpcChannel to communicate with the NameNode.

Connection

The Hadoop RPC protocol works as described below. On connection, headers are sent to setup a session. After that, multiple requests can be sent within the session.

FunctionTypeDefault
Headerbytes“hrpc”
Versionuint87
Auth methoduint880 (Auth method SIMPLE)
Serialization typeuint80 (protobuf)
IpcConnectionContextProto lengthuint32 
IpcConnectionContextProtobytes 

Sending messages

When sending a message, the following is sent to the sever:

FunctionType
Length of the next two partsuint32
RpcPayloadHeaderProto lengthvarint
RpcPayloadHeaderProtoprotobuf serialized message
HadoopRpcRequestProto lengthvarint
HadoopRpcRequestProtoprotobuf serialized message

varint is a Protocol Buffer variable int.

Note

The Java protobuf implementation uses writeToDelimited to prepend the message with their lenght, but the python implementation doesn’t implement such a method (yet).

Next to an rpcKind (snakebites default is RPC_PROTOCOL_BUFFER), an rpcOp (snakebites default isRPC_FINAL_PAYLOAD), the RpcPayloadHeaderProto message defines a callId that is added in the RPC response (described below).

The HadoopRpcRequestProto contains a methodName field that defines what server method is called and a has a property request that contains the serialized actual request message.

Receiving messages

After a message is sent, the response can be read in the following way:

FunctionType
Length of the RpcResponseHeaderProtovarint
RpcResponseHeaderProtobytes
Length of the RPC responseuint32
Serialized RPC responsebytes

The RpcResponseHeaderProto contains the callId of the request and a status field. The status can beSUCCESSERROR or FAILURE. In case SUCCESS the rest of response is a complete protobuf response.

In case of ERROR, the response looks like follows:

FunctionType
Length of the RpcResponseHeaderProtovarint
RpcResponseHeaderProtobytes
Length of the RPC responseuint32
Length of the Exeption class nameuint32
Exception class nameutf-8 string
Length of the stack traceuint32
Stack traceutf-8 string

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值