Hadoop技术内幕HDFS-笔记6之RPC

1.1.  hadoop远程过程调用

1、  远程接口调用(必须实现VersionedProtocol接口)

里面有一个方法,IPC通信时会比较客户端和服务端接口的版本号。必须一致才可以

package rpc;

import org.apache.hadoop.ipc.VersionedProtocol;

public interface MyBizable extends VersionedProtocol {
	//必须具有一个版本号
	public static final long VERSION = 100L;
	//实际调用方法
	public abstract String hello(String name);
}

2、  定义远程对象的实现类

package rpc;

import java.io.IOException;

public class MyBiz implements MyBizable{
	//获取版本号
	@Override
	public long getProtocolVersion(String protocol, long clientVersion)
			throws IOException {
		// TODO Auto-generated method stub
		return VERSION;
	}
	@Override
	public String hello(String name){
		System.out.println("我被调用了");
		return "hello:" + name;
	}
}

3、  构建服务器

package rpc;

import org.apache.hadoop.conf.Configuration;

import org.apache.hadoop.ipc.RPC;

import org.apache.hadoop.ipc.RPC.Server;

public class MyServer {

public static final String SERVER_ADDRESS = "localhost";

public static final int SERVER_PORT = 12344;

public static void main(String[] args) throws Exception {

//public static Server getServer(final Object instance, final String bindAddress, final int port, Configuration conf)

/** Construct an RPC server.

* @param instance the instance whose methods will be called客户端调用远程接口

* @param bindAddress the address to bind on to listen for connection监听连接地址

* @param port the port to listen for connections on端口

* @param conf 配置文件

*/

final Server server = RPC.getServer(new MyBiz(), SERVER_ADDRESS, SERVER_PORT, new Configuration());

server.start();

}

}

4、客户端实现

package rpc;

import java.io.IOException;
import java.net.InetSocketAddress;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.ipc.RPC;
import org.apache.hadoop.ipc.VersionedProtocol;

public class MyClient {

	public static void main(String[] args) throws Exception {
		/** Construct a client-side proxy object that implements the named protocol,
		   * talking to a server at the named address. */
		final MyBizable proxy = (MyBizable) RPC.waitForProxy(MyBizable.class              , MyBizable.VERSION              , new InetSocketAddress(MyServer.SERVER_ADDRESS, MyServer.SERVER_PORT)              , new Configuration());
		//普通测试
		String result = proxy.hello("hello");
		System.out.println(result);

		RPC.stopProxy(proxy);
	}
}

原理:(暂且不关注,在需要的时候可以再复习)

总结:hadoop的namenode,secondarynamenode,datanode,jobtrack等进程都实现了远程调用接口,也就是说他们每一个都是一个服务端Server,等待客户端的调用。相互之间彼此充当客户端和服务端的角色。

启动hadoop实际上就是启动了RPC的Server。

Hadoop技术内幕HDFS-笔记6之RPC

时间: 2024-10-27 18:54:12

Hadoop技术内幕HDFS-笔记6之RPC的相关文章

2本Hadoop技术内幕电子书百度网盘下载:深入理解MapReduce架构设计与实现原理、深入解析Hadoop Common和HDFS架构设计与实现原理

这是我收集的两本关于Hadoop的书,高清PDF版,在此和大家分享: 1.<Hadoop技术内幕:深入理解MapReduce架构设计与实现原理>董西成 著  机械工业出版社2013年5月出版 2.<Hadoop技术内幕:深入解析Hadoop Common和HDFS架构设计与实现原理>蔡斌.陈湘萍 著  机械工业出版社2013年4月出版 百度网盘下载地址: http://pan.baidu.com/s/1sjNmkFj

Hadoop技术内幕HDFS-笔记11之HDFS

Hdfs文件系统,提供了一套基于hadoop的抽象文件系统的API,支持以流的方式访问文件系统中的数据. 特性: 1.  支持超大文件 2.  检测和快速应对硬件故障(故障检测和自动恢复) 3.  流式数据访问,注重的是数据的吞吐量,而不是数据的响应速度 4.  简化的一致性模型,一次写入,多次读取. 不适合: 5.  低延迟数据访问,和用户的实时交互,由于hadoop对高数据吞吐量进行了优化,而牺牲了数据的延迟,对于低延迟访问,可以考虑hbase或cassandra 1.1.1.       

Hadoop技术内幕HDFS-笔记1

书籍学习——董西成<Hadoop技术内幕 深入解析HADOOP COMMON和HDFS架构设计与实现原理> HDFS 高容错,高伸缩性 Lucene是引擎开发包,提供了一个纯java的高性能全文检索,可方便的嵌入到各种应用中实现全文搜索/索引功能. Nutch是以Lucene为基础实现的搜索引擎应用,Lucene为Nutch提供了文本搜索和索引的Api,Nutch不光有搜索功能,还有数据抓取的功能,却无法支持拥有数亿网页的网络(在网络抓取和索引过程中产生的大量文件存储需求). Hadoop优势

Hadoop技术内幕:深入解析YARN架构设计与实现原理pdf

下载地址:网盘下载 <Hadoop技术内幕:深入解析MapReduce架构设计与实现原理>内容简介:"Hadoop技术内幕"共两册,分别从源代码的角度对"Common+HDFS"和"MapReduce的架构设计和实现原理"进行了极为详细的分析.<Hadoop技术内幕:深入解析MapReduce架构设计与实现原理>由Hadoop领域资深的实践者亲自执笔,首先介绍了MapReduce的设计理念和编程模型,然后从源代码的角度深入

Hadoop技术内幕HDFS-笔记2

任何一个复杂的软件系统,为了提高其适应性和扩展性,一般都会有一个配置模块或者配置系统,作完成其扩展.定制的手段和方式. 1.1.  Windows的配置文件 (第一次知道这事啊): 采用的是ini后缀的文本文件,可通过动态链接库提供方法进行处理. 初始化文件或profile概要文件 1.2.  Java配置文件: Properties文件 Xml文件 工具:Apache Commons Configuration 用于对配置文件进行常用的操作. Hadoop configuration Hado

Hadoop技术内幕HDFS-笔记4之远程调用

1.      hadoop远程过程调用 RPC:XML-RPC,JSON-RPC,CORBA,RMI(Remote Method Invocation),Haoop IPC(进程间通信) RPC原理:允许本地程序(客户端)调用其他机器(服务器)上的过程,客户端使用参数将信息传送给调用方,通过返回值得到消息. RPC的server在运行时会阻塞在接收消息的调用上,当接到客户端的请求后,会解包以获取请求参数:结束后返回值通过主程序打包发送给客户端. 1.1.  java RMI 依赖于java序列

Hadoop技术内幕HDFS-笔记10之hadoop IO

1.1.1. hadoop IO 对比Java IO即可 FSDataInputStream,FSDataOutputStream 为抽象类, FSInputStream抽象类 1.1.2. hadoop文件系统中的权限 枚举类FsAction定义了rwx权限,常量 建议使用get()方法获取文件系统对象,而不是newInstance() 1.1.3. hadoop 协议处理器(会用即可) 获取HDFS上的资源,必须安装协议处理系统 后面通过获取的in IO流操作就是普通的操作形式了. Hado

hadoop技术内幕-序列化与压缩(一)

一.java内建序列化机制 java序列化机制将对象转换为连续的byte数据,这些数据可以在日后还原为原先的对象状态,还能自动处理不同操作系统上的差异,也不用担心字节排列次序. java的类实例可被序列化只要在类声明中加入implements Serializable即可.Serializable接口是一个标志,不具有任何成员函数. java的序列化会自动访问对象的父类,以保证对象内容的一致性.序列化的结果中包含了大量与类相关的信息(包括版本号.类描述信息.类的版本ID.父类等).在这个过程中序

Hadoop技术内幕——Hadoop配置信息处理

配置系统是复杂软件必不可少的一部分,org.apache.hadoop.conf.Configuration在Hadooop各个子项目中发挥着重要作用. windows系统广泛使用一种特殊批的ASCII文件.ini作为其主要配置文件标准,被称为(Initialization File)或概要文件(profile):java中JDK提供了java.util.Properties类处理简单的配置文件.而Hadoop采用自己独有的配置文件管理系统. Hadoop的配置文件的根元素是configurat