Hadoop源码分析之IPC机制

本文介绍了Hadoop中使用的自定义RPC机制——IPC,它不依赖RMI,而是利用Java动态代理和NIO技术。通过分析示例,展示了如何创建服务器端和客户端,实现客户端调用服务器端方法。服务器端通过RPC.getServer()监听请求,客户端通过RPC.getProxy()获取代理对象进行通信。整个过程涉及到版本检查和动态代理的调用流程。
摘要由CSDN通过智能技术生成

在Hadoop中,不同节点间使用RPC机制进行通信,在Java中比较典型的RPC是RMI(Remote Method Invocation)的调用方式,虽然Hadoop使用Java语言实现的,但是Hadoop并没有使用RMI实现RPC,而是实现了一套自己独有的节点通信机制,称为Hadoop IPC(Inter-Process Communication,进程间通信)。这是一种简洁,低消耗的通信机制,可以精确控制进程间通信中如连接、超时、缓存等细节。Hadoop IPC机制的实现使用了Java动态代理,Java NIO等技术。关于Java动态代理技术可以参考博文Java动态代理,Java NIO技术可以参考博文Java NIO

如何使用Hadoop IPC

与Hadoop IPC相关的几个类在org.apache.hadoop.ipc包中,共7个类文件。根据Hadoop提供的IPC机制,下面就来着手开发一个使用Hadoop IPC实现客户端调用服务器端方法的示例,这个示例源于《Hadoop技术内幕:深入解析Hadoop Common和HDFS架构设计与实现原理》这本书,功能是返回服务器端的一个文件信息,文件信息的类为IPCFileStatus:

package org.hadoopinternal.ipc;

import java.io.DataInput;
import java.io.DataOutput;
import java.io.IOException;
import java.util.Date;

import org.apache.hadoop.io.Text;
import org.apache.hadoop.io.Writable;
import org.apache.hadoop.io.WritableFactories;
import org.apache.hadoop.io.WritableFactory;

public class IPCFileStatus implements Writable {	
	private String filename;
    private long time;
    
    public IPCFileStatus() {    	
    }
    
	public IPCFileStatus(String filename) {
		this.filename=filename;
		this.time=(new Date()).getTime();
	}

	public String getFilename() {
		return filename;
	}
	
	public void setFilename(String filename) {
		this.filename = filename;
	}
	
	public long getTime() {
		return time;
	}
	
	public void setTime(long time) {
		this.time = time;
	}
	
	public String toString() {
		return "File: "+filename+" Create at "+(new Date(time)); 
	}

	@Override
	public void readFields(DataInput in) throws IOException {
	    this.filename = Text.readString(in);
	    this.time = in.readLong();		
	}

	@Override
	public void write(DataOutpu
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值