简单点讲,RPC框架就是能够让程序员来调用远程进程上的代码一套工具。有了RPC框架,咱程序员就轻松不少了,终于能够逃离多线程、Socket、I/O的苦海了。java
RPC, 远程过程调用直观说法就是A经过网络调用B的过程方法。
通讯中的协议是你本身规定的,好比你能够规定说当A向B发送数字1, B就打印hello world, 并返回数字1给A, 若是发送数字2,B就打印hello, guy.并发送数字2给A. 程序员
序列化------------>写 write(DataOutput out)网络
反序列化-------->读 readFields(DataInput in)
多线程
一. Hadoop内置的数据类型并发
BooleanWritable:标准布尔型数值框架
ByteWritable:单字节数值工具
DoubleWritable:双字节数值oop
FloatWritable:浮点数this
IntWritable:整型数spa
LongWritable:长整型数
Text:使用UTF8格式存储的文本
NullWritable:当<key, value>中的key或value为空时使用
Hadoop中的数据类型都要实现Writable接口,以便用这些类型定义的数据能够被网络传输和文件存储。
二. 用户自定义数据类型的实现
1.继承接口Writable,实现其方法write()和readFields(), 以便该数据能被序列化后完成网络传输或文件输入/输出;
2.若是该数据须要做为主键key使用,或须要比较数值大小时,则须要实现WritalbeComparable接口,实现其方法write(),readFields(),CompareTo() 。
3.数据类型,必需要有一个无参的构造方法,为了方便反射,进行建立对象。
4.在自定义数据类型中,建议使用java的原生数据类型,最好不要使用Hadoop对原生类型进行封装的数据类型。eg.int x ;//IntWritable String s; //Text
public class Point3D implements WritableComparable<Point3D>
{
private float x,y,z;
public float getX(){return x;}
public float getY(){return y;}
public float getZ(){return z;}
public Point3D (){}
public void readFields(DataInput in) throws IOException
{
x = in.readFloat();
y = in.readFloat();
z = in.readFloat();
}
public void write(DataOutput out) throws IOException
{
out.writeFloat(x);
out.writeFloat(y);
out.writeFloat(z);
}
public int CompareTo(Point3D p)
{
//具体实现比较当前的空间坐标点this(x,y,z)与指定的点p(x,y,z)的大小
// 并输出: -1(小于), 0(等于), 1(大于)
}
}