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框架演示的更多相关文章
- 3 weekend110的hadoop中的RPC框架实现机制 + hadoop中的RPC应用实例demo
hadoop中的RPC框架实现机制 RPC是Remotr Process Call, 进程间的远程过程调用,不是在一个jvm里. 即,Controller拿不到Service的实例对象. hadoop ...
- abelkhan中的rpc框架
rpc简介:http://www.ibm.com/developerworks/cn/aix/library/au-rpc_programming/index.html 常见的rpc框架有protob ...
- 大数据入门第四天——基础部分之轻量级RPC框架的开发
一.概述 .掌握RPC原理 .掌握nio操作 .掌握netty简单的api .掌握自定义RPC框架 主要内容 1.RPC是什么 RPC(Remote Procedure Call)—远程过程调用,它是 ...
- 主流的RPC框架有哪些
RPC是远程过程调用的简称,广泛应用在大规模分布式应用中,作用是有助于系统的垂直拆分,使系统更易拓展.Java中的RPC框架比较多,各有特色,广泛使用的有RMI.Hessian.Dubbo等.RPC还 ...
- 【Flink】Flink 底层RPC框架分析
1. 前言 对于Flink中各个组件(JobMaster.TaskManager.Dispatcher等),其底层RPC框架基于Akka实现,本文着重分析Flink中的Rpc框架实现机制及梳理其通信流 ...
- JDK动态代理在RPC框架中的应用
RPC框架中一般都有3个角色:服务提供者.服务消费者和注册中心.服务提供者将服务注册到注册中心,服务消费者从注册中心拉取服务的地址,并根据服务地址向服务提供者发起RPC调用.动态代理在这个RPC调用的 ...
- php中流行的rpc框架详解
什么是RPC框架? 如果用一句话概括RPC就是:远程调用框架(Remote Procedure Call) 那什么是远程调用? 我的官方群点击此处. 通常我们调用一个php中的方法,比如这样一个函数方 ...
- rpc框架: thrift/avro/protobuf 之maven插件生成java类
thrift.avro.probobuf 这几个rpc框架的基本思想都差不多,先定义IDL文件,然后由各自的编译器(或maven插件)生成目标语言的源代码,但是,根据idl生成源代码这件事,如果每次都 ...
- rpc框架之 thrift 学习 1 - 安装 及 hello world
thrift是一个facebook开源的高效RPC框架,其主要特点是跨语言及二进制高效传输(当然,除了二进制,也支持json等常用序列化机制),官网地址:http://thrift.apache.or ...
随机推荐
- Hadoop 部署之 Hadoop (三)
目录 一.Hadoop 介绍 1.HDFS 介绍 2.HDFS 组成 3.MapReduce 介绍 4.MapReduce 架构 JobTracker TaskTracker 二.Hadoop的安装 ...
- 知识点整理-mysql怎么查看优化器优化后的sql
背景 1.新建两张表 CREATE TABLE t1 (m1 )); CREATE TABLE t2 (m2 )); 2.插入些数据 INSERT INTO t1 VALUES(, , , 'c'); ...
- souce and bash 的区别
对于一些环境变量的配置文件,如想使更改后立即生效,多用 souce +file 执行后即可.如/etc/profile 里加了配置, source 和 bash 的区别: source filena ...
- Java异步调用转同步的5种方式
1.异步和同步的概念 同步调用:调用方在调用过程中,持续等待返回结果. 异步调用:调用方在调用过程中,不直接等待返回结果,而是执行其他任务,结果返回形式通常为回调函数. 2 .异步转为同步的概率 需要 ...
- 【FFMPEG】FFMPEG介绍
FFmpeg是一套可以用来记录.转换数字音频.视频,并能将其转化为流的开源计算机程序.它包括了目前领先的音/视频编码库libavcodec. FFmpeg是在Linux下开发出来的,但它可以在包括Wi ...
- [Agc030B]Tree Burning_贪心
Tree Burning 题目链接:https://atcoder.jp/contests/agc030/tasks/agc030_b 数据范围:略. 题解: 开始以为是左右左右这样,发现过不去样例. ...
- quartz报错 org.quartz.impl.StdSchedulerFactory.
quartz任务执行报错 Exception in thread "main" java.lang.NoClassDefFoundError: org/slf4j/LoggerFa ...
- # win10下设置软件启动快捷方式
win10下设置软件启动快捷方式 win10下设置软件启动快捷键,必须把快捷方式放在C:\ProgramData\Microsoft\Windows\Start Menu\Programs目录下,在这 ...
- PHP内存管理-zendMM
ZendMM 是zend memory manager zendMM可以分为三层: 1.存储层 维护者不同体量内存的hash表,已提供堆层使用,负责向os申请和释放内存 2.堆层 PHP内存管理的核心 ...
- Python爬取猫眼电影排行
import requests import pyquery def crawl_page(url: str) -> None: headers = { 'user-agent': 'Mozil ...