利用Hadoop提供的RPC API实现简单的RPC程序

[toc]


利用Hadoop提供的RPC API实现简单的RPC程序

在Hadoop中提供了RPC服务的使用API,通过其API地使用,可以非常简单地构建远程过程调用程序,下面就给出一个简单的实例。

项目结构

为了方便操作,所有的代码都放在本地一个项目中,实际上,完全可以将代码放在不同的服务器上,这是RPC的概念,这里就不做过多的介绍。
项目结构如下:

rpc/
├── HelloServiceImpl.java
├── IHelloService.java
├── RPCClientDriver.java
└── RPCServerDriver.java

程序代码

这里只是做一个简单的示例,并且代码中也给出了非常详细的注释,所以直接给出程序代码。

IHelloService.java

package com.uplooking.bigdata.rpc;

import org.apache.hadoop.ipc.VersionedProtocol;

/**
 * 接口
 * 要想使用hadoop提供的RPC服务,必须要继承VersionedProtocol
 */
public interface IHelloService extends VersionedProtocol {

    public long versionID = 1L;

    public String sayHi(String name);

    public String hearBeat(String beat);
}

HelloServiceImpl.java

package com.uplooking.bigdata.rpc;

import org.apache.hadoop.ipc.ProtocolSignature;

import java.io.IOException;

/**
 * HelloService服务实现类
 */
public class HelloServiceImpl implements IHelloService {

    public String sayHi(String name) {
        System.out.println("name..." + name);
        return "Hi, " + name;
    }

    public String hearBeat(String beat) {
        System.out.println("----heartbeat----" + beat);
        return System.currentTimeMillis() + "--->" + beat;
    }

    public long getProtocolVersion(String protocol, long clientVersion) throws IOException {
        return versionID;
    }

    public ProtocolSignature getProtocolSignature(String protocol, long clientVersion, int clientMethodsHash) throws IOException {
        return new ProtocolSignature();
    }
}

RPCServerDriver.java

package com.uplooking.bigdata.rpc;

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

import java.io.IOException;

/**
 * RPC服务端程序,启动并发布服务
 */
public class RPCServerDriver {

    public static void main(String[] args) throws IOException {
        // 创建RPC的配置
        Configuration configuration = new Configuration();
        // 构建RPC的builder对象
        RPC.Builder builder = new RPC.Builder(configuration);
        // 设置RPC Server的信息,返回一个server对象
        RPC.Server server = builder.setBindAddress("localhost")
                .setPort(4893)
                .setProtocol(IHelloService.class)
                .setInstance(new HelloServiceImpl())
                .build();
        // 启动RPC Server
        // 这是一个守护进程,所以main函数不会退出
        server.start();

        System.out.println("---服务启动了---");

    }

}

RPCClientDriver.java

package com.uplooking.bigdata.rpc;

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

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

/**
 * RPC客户端程序
 */
public class RPCClientDriver {
    public static void main(String[] args) throws IOException {
        // 构建InetSocketAddress对象
        InetSocketAddress address = new InetSocketAddress(InetAddress.getByName("localhost"), 4893);
        // 通过RPC.getProxy方法获得代理对象
        /**
         * @param protocol      接口的类型对象
         * @param clientVersion 版本号
         * @param addr          服务端地址
         * @param conf          配置信息
         */
        IHelloService helloServiceProxy = RPC.getProxy(IHelloService.class, IHelloService.versionID, address, new Configuration());
        String result = helloServiceProxy.sayHi("小秋田");
        System.out.println(result);
    }
}

测试

启动RPCServerDriver,输出如下:

---服务启动了---

启动RPCClicentDriver,输出如下:

Hi, 小秋田

此时再查看服务端的输出:

---服务启动了---
name...小秋田

这样的话,通过使用Hadoop提供的RPC API,就实现了一个简单的RPC程序。

原文地址:http://blog.51cto.com/xpleaf/2074362

时间: 2024-11-08 08:05:22

利用Hadoop提供的RPC API实现简单的RPC程序的相关文章

如何利用CEF3创建一个简单的应用程序 (Windows Platform)

1. 说明 这篇文章主要讲述如何利用CEF3来创建一个简单的应用程序,引用的是1535及以上版本中包含的 Cefsimple 项目例子.如果想知道关于CEF3更多的使用方法,可以去访问 GeneralUsage. 2. 开始 首先,根据自身所使用的开发平台,可以去 这里 下载对应的发布版本.针对这个教程,我们需要下载1750或者更新的版本.当前支持的平台有Windows, Linux和Mac OS X.每一个版本都包含了当在特定平台上编译特定版本CEF3时所需要的所有文件和资源.您可以通过包含在

Java实现简单的RPC框架

一.RPC简介 RPC,全称为Remote Procedure Call,即远程过程调用,它是一个计算机通信协议.它允许像调用本地服务一样调用远程服务.它可以有不同的实现方式.如RMI(远程方法调用).Hessian.Http invoker等.另外,RPC是与语言无关的. RPC示意图 如上图所示,假设Computer1在调用sayHi()方法,对于Computer1而言调用sayHi()方法就像调用本地方法一样,调用 –>返回.但从后续调用可以看出Computer1调用的是Computer2

Hadoop通过c语言API访问hdfs

Hadoop给我们提供了使用c语言访问hdfs的API,下面进行简要介绍: 环境:ubuntu14.04  hadoop1.0.1  jdk1.7.0_51 访问hdfs的函数主要定义在hdfs.h文件中,该文件位于hadoop-1.0.1/src/c++/libhdfs/文件夹下,而相应的库文件是位于hadoop-1.0.1/c++/Linux-amd64-64/lib/目录下的libhdfs.so,另外要访问hdfs还需要依赖jdk的相关API,头文件目录包括jdk1.7.0_51/incl

Java 实现简单的RPC框架

0 引言 RPC,全称为Remote Procedure Call,即远程过程调用,它是一个计算机通信协议.它允许像调用本地服务一样调用远程服务.它可以有不同的实现方式.如RMI(远程方法调用).Hessian.Http invoker等.另外,RPC是与语言无关的. 假设Computer1在调用sayHi()方法,对于Computer1而言调用sayHi()方法就像调用本地方法一样,调用 –>返回.但从后续调用可以看出Computer1调用的是Computer2中的sayHi()方法,RPC屏

利用Java提供的Observer接口和Observable类实现观察者模式

对于观察者模式,其实Java已经为我们提供了已有的接口和类.对于订阅者(Subscribe,观察者)Java为我们提供了一个接口,JDK源码如下: 1 package java.util; 2 3 public interface Observer { 4 void update(Observable o, Object arg); 5 } 和我们上一篇实现的观察者一样,仅提供一个update方法用于接收通知者的通知做出相应改变. 我们再来看看Java为我们提供了一个怎样的通知者(Publish

Hadoop源码学习笔记(4) ——Socket到RPC调用

Hadoop源码学习笔记(4) ——Socket到RPC调用 Hadoop是一个分布式程序,分布在多台机器上运行,事必会涉及到网络编程.那这里如何让网络编程变得简单.透明的呢? 网络编程中,首先我们要学的就是Socket编程,这是网络编程中最底层的程序接口,分为服务器端和客户端,服务器负责监听某个端口,客户端负责连接服务器上的某个端口,一旦连接通过后,服务器和客户端就可以双向通讯了,我们看下示例代码: ServerSocket server = new ServerSocket(8111); S

免费超大量邮件发送服务Amazon SES和Mailgun提供SMTP和API支持

一般来说网站注册.论坛消息.新闻推送.广告宣传等都会有发送邮件服务,大量的邮件发送服务如果用PHP来发送,一是会消耗主机资源,二是容易被各大邮箱判定为垃圾邮件而被拒收.用第三方的邮局服务发送邮件,可以保证邮件到达率,同时适合超大量的邮件发送服务. 与部落之前介绍的腾讯企业邮箱.新浪企业邮箱等发送邮件服务不同,Amazon SES和Mailgun是专业级别的邮件发送服务,能够满足企业或者个人每天超大量邮件发送服务,并且保证邮件足够的到达率,如果你愿意付费的话,可以极低价格发送每天上万封的邮件. A

Geth RPC API中文文档

Geth除了支持官方的DApp API开发接口,还支持额外的管理API接口.类似于DApp API,这些管理API也是通过JSON-PRC协议提供,并且遵循同样的规范.Geth内置的控制台支持所有这些额外的管理API.Geth管理API官方文档中文版由汇智网翻译整理,访问地址:Geth管理API文档 如果要快速高效地学习以太坊应用开发,推荐汇智网的以太坊智能合约与DApp开发入门 启用管理API 要通过Geth的RPC访问端结点提供这些管理API,需要在启动geth时使用--${interfac

【Python】Python利用有道翻译开发API应用示例

Python源码是关于Python利用有道翻译开发API应用示例.这是一个很有意思又简单的API应用练习题,方法中用到了有道词典开放API应用,合成的类似于命令行词典应用Python小程序.功能简单,但效果却很好. 这里要注意的是:有道API的请求频率限制,限制频率为每小时1000次,如果超过限制会被封禁. 提示:如果想一直用这个可以自己申请一个KEY,申请的过程非常简单的,只要替换原有的KEY_FROM和KEY就可以了. Python利用有道翻译开发API应用示例,源码如下: #!/usr/b