Hadoop_12_Hadoop 中的RPC框架演示

Posted QueryMarsBo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hadoop_12_Hadoop 中的RPC框架演示相关的知识,希望对你有一定的参考价值。

Hadoop中自己提供了一个RPC的框架。集群中各节点的通讯都使用了那个框架

1.服务端

1.1.业务接口:ClientNamenodeProtocol

 

package cn.bigdata.hdfs.hadoopRpc.protocol;

//定义业务接口方法
public interface ClientNamenodeProtocol {
    // 协议版本号
    public static final long versionID = 1L;
    public String getMetaData(String path);
}

 

1.2.业务接口实现类:MyNameNode

 

package cn.bigdata.hdfs.hadoopRpc.service;

import cn.bigdata.hdfs.hadoopRpc.protocol.ClientNamenodeProtocol;

public class MyNameNode implements ClientNamenodeProtocol{

    @Override
    public String getMetaData(String path) {
        // 模拟NameNode的业务方法,获取元数据
        return path+": 3 - {BLK_1,BLK_2} ...";
    }
}

 

1.3.服务端类:将业务实现类发布为一个服务

 

package cn.bigdata.hdfs.hadoopRpc.service;

import java.io.IOException;

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

import cn.bigdata.hdfs.hadoopRpc.protocol.ClientNamenodeProtocol;

//使用下面的代码可以把业务类发布为一个服务
public class PublishServiceUtil {
    public static void main(String[] args) throws IOException {
        Builder builder = new RPC.Builder(new Configuration());
        builder.setBindAddress("localhost")
        .setPort(8888)
        .setProtocol(ClientNamenodeProtocol.class)
        .setInstance(new MyNameNode());
        
        Server build = builder.build();
        build.start();
    }
}

 

2.客户端

package cn.bigdata.hdfs.hadoopRpc.client;
import java.net.InetSocketAddress;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.ipc.RPC;

import cn.bigdata.hdfs.hadoopRpc.protocol.ClientNamenodeProtocol;

public class MyHdfsClient {
    public static void main(String[] args) throws Exception {
        //获取代理对象
        ClientNamenodeProtocol nameNode = RPC.getProxy(ClientNamenodeProtocol.class, 
                1L, // 这里指定的协议版本号要跟接口中的versionID的值保持一致
                new InetSocketAddress("localhost",8888), 
                new Configuration());
        
        String metaData = nameNode.getMetaData("/angelababy");
        System.out.println(metaData);
    }
}

 

我们也可以在自己的项目中使用Hadoop的RPC框架,把Hadoop的Common包导入进来就可以了

 

以上是关于Hadoop_12_Hadoop 中的RPC框架演示的主要内容,如果未能解决你的问题,请参考以下文章

hadoop18---socket实现rpc

Hadoop_21_编写MapReduce程序实现Join功能

Hadoop RPC框架

大数据技术之_03_Hadoop学习_01_入门_大数据概论+从Hadoop框架讨论大数据生态+Hadoop运行环境搭建(开发重点)

Hadoop_05_运行 Hadoop 自带 MapReduce程序

Hadoop RPC框架