hadoop[6]-rpc

Hadoop中各节点之间存在大量的远程过程调用,hadoop为此封装了一个RPC基础框架,使用方法如下:

服务端代码pom:

<dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-common</artifactId>
    <version>2.4.1</version>
</dependency>

RCP通信的两端共同遵守的协议(本质上就是业务实现类的接口)

public interface NameNodeProtocal {
    //RPC通信双方一致的版本号
    public static final long versionID = 1L;
    //业务方法签名
    public String getMetaData(String path);
}

实现类

public class NameNodeProtocalImpl implements NameNodeProtocal {
    @Override
    public String getMetaData(String path) {
        return "metadata";
    }
}

发布服务

import com.wange.service.NameNodeProtocal;
import com.wange.service.impl.NameNodeProtocalImpl;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.ipc.RPC;
import org.apache.hadoop.ipc.RPC.*;
import java.io.IOException;

public class Application {
    public static void main(String[] args) throws Exception {
        //创建一个RPC服务builder
        Builder builder = new RPC.Builder(new Configuration());
        //将要发布的服务的信息设置到builder中
        builder.setBindAddress("hadoop-server-00").setPort(10000).setProtocol(NameNodeProtocal.class).setInstance(new NameNodeProtocalImpl());

        //用builder构建出一个socket服务
        Server server = builder.build();
        //将服务启动,就可以等待客户端请求
        server.start();
    }
}

将代码打成一个jar包,上传到hadoop-server-00服务器上,启动它:java -jar xxx.jar

客户端调用,pom引入依赖和服务端相同,将协议文件(NameNodeProtocal)拷贝过来,就可以开始调用了,代码如下:

import com.wange.service.NameNodeProtocal;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.ipc.RPC;
import org.apache.hadoop.ipc.RPC.*;

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

public class Application {
    public static void main(String[] args) throws IOException {
        System.setProperty("hadoop.home.dir", "E:/soft/hadoop-2.4.1");
        //首先用RPC框架获得要调用的远端服务的引用(动态代理对象)
        NameNodeProtocal namenodeImpl = RPC.getProxy(NameNodeProtocal.class, 1L, new InetSocketAddress("hadoop-server-00", 10000), new Configuration());
        //因为这个动态代理对象实现了业务类的接口,所以可以直接通过这个引用来调用业务类的实现方法(本质上,具体实现在远端,走的是socket通信请求)
        String metaData = namenodeImpl.getMetaData("/m1");

        System.out.println(metaData);
    }
}

这样就完成了,使用非常简单,这就是hadoop为我们封装好的rpc基础调用。

原文地址:https://www.cnblogs.com/wange/p/9866527.html

时间: 2024-11-09 03:45:08

hadoop[6]-rpc的相关文章

Hadoop的RPC机制

一.RPC(Remote Procedure Call)简介 RPC 是远程过程调用(Remote Procedure Call),即远程调用其他虚拟机中运行的javaobject.RPC 是一种客户端/服务器模式,那么在使用时包括服务端代码和客户端代码,还有我们调用的远程过程对象.HDFS 的运行就是建立在此基础之上的.本章通过分析实现一个简单的RPC 程序来分析HDFS 的运行机理. 二.代码解析 1.服务端代码 代码如下: public class MyServer { public st

Hadoop之——RPC通信实例

转载请注明出处:http://blog.csdn.net/l1028386804/article/details/45922715 一. RPC(remote procedure call) 不同java进程间的对象方法的调用. 一方称作服务端(server),一方称作客户端(client). server端提供对象,供客户端调用的,被调用的对象的方法的执行发生在server端. RPC是hadoop框架运行的基础. 二.通过rpc小例子获得的认识 1.服务端提供的对象必须是一个接口,接口ext

hadoop的RPC调用原理

1. RPC(Remote Procedure Call Protocol)远程方法调用,客户端对服务端进行访问,服务端通过创建一个服务端的代理对象对服务端中的方法进行访问.要理解代理. 2.远程方法调用的实现有:webservice, hessian,RMI,但是他们与Hadoop的RPC的实现目的相同,都是通过客户端对服务端进行访问. 3.  工程进行建立后需要导入jar包 (1)E:\hadoop\hadoop-2.6.0\share\hadoop\common文件夹中的jar. (2)E

Hadoop中RPC协议小例子报错java.lang.reflect.UndeclaredThrowableException解决方法

最近在学习传智播客吴超老师的Hadoop视频,里面他在讲解RPC通信原理的过程中给了一个RPC的小例子,但是自己编写的过程中遇到一个小错误,整理如下: log4j:WARN No appenders could be found for logger (org.apache.hadoop.metrics2.lib.MutableMetricsFactory).log4j:WARN Please initialize the log4j system properly.log4j:WARN See

Hadoop之RPC简单使用(远程过程调用协议)

一.RPC概述 RPC是指远程过程调用,也就是说两台不同的服务器(不受操作系统限制),一个应用部署在Linux-A上,一个应用部署在Windows-B或Linux-B上,若A想要调用B上的某个方法method(),由于不在一个内存空间,不能直接调用,需要通过网络来表达调用的语意和传达调用的参数. 楼主在接触RPC之前,用得最多的莫过于WebService.WebService可以说是在RPC发展的基础之上.RPC的协议有很多,比如最早的CORBA,Java RMI,Web Service等,又比

源码级强力分析Hadoop的RPC机制

分析对象: hadoop版本:hadoop 0.20.203.0 必备技术点: 1. 动态代理(参考 :http://weixiaolu.iteye.com/blog/1477774 )2. Java NIO(参考 :http://weixiaolu.iteye.com/blog/1479656 )3. Java网络编程 目录: 一.RPC协议二.ipc.RPC源码分析三.ipc.Client源码分析四.ipc.Server源码分析 分析:  一.RPC协议 在分析协议之前,我觉得我们很有必要先

Hadoop 自定义RPC protocol

RPC的全称为远程过程调用.由于Hadoop是一个分布式系统,因此底层的通信库也就必须实现RPC的基础功能.Hadoop RPC 在整个hadoop中扮演着底层通信模块的角色,举例而言NN和DN.AM和RM之间的通信和协调都是Hadoop RPC来完成的.熟悉使用Hadoop RPC可以加深我们对Hadoop各个模块之间通信过程的理解,也能让我们实现一些自己想要的分布式的小功能. 很多Hadoop相关书籍中都详细介绍了Hadoop RPC,其具体原理大家有兴趣的话可以去看源码加深理解.不过,我觉

hadoop;RPC;调用接口;cmd的jps查看java进程;有main方法的类才能产生进程

实验平台: redhat 6    以安装 安装步骤: (1):在网上找到自己想要的交叉工具链安装包 (2):解压自己的安装包   ; tar -xzvf arm-linux-gcc-4.3.2.tar.gz   -C /     解压到或目录 或tar  -xjvf   arm-linux-gcc-3.4.5.tar.bz2   -C / 在解压的过程中我们可以看到,其可执行程序,被解压到/usr/local/arm/3.4.5/bin, (4):修改配置文件 vim  /etc/profil

Hadoop的RPC框架介绍

为什么会引入RPC: RPC采用客户机/服务器模式.请求程序就是一个客户机,而服务提供程序就是一个服务器.当我们讨论HDFS的,通信可能发生在: Client-NameNode之间,其中NameNode是服务器 Client-DataNode之间,其中DataNode是服务器 DataNode-NameNode之间,其中NameNode是服务器 DataNode-DateNode之间,其中某一个DateNode是服务器,另一个是客户端 如果我们考虑Hadoop的Map/Reduce以后,这些系统