分布式系统详解--框架(Hadoop--RPC协议)

简介: 分布式系统详解--框架(Hadoop--RPC协议)

 分布式系统详解--框架(Hadoop--RPC协议)

      在之前的一篇文章当中已经写过一篇文章是关于RPC通信协议的文章,是    分布式系统详解--基础知识(通信)是讲的关于网络通信的最基本的知识。这篇文章也简单讲一下关于hadoop内部的网络通信。

一、hadoop的RPC模式

C/S模式

基于传输层模式。(TCP/IP)

事件处理模型。(请求、计算、协议)

二、RPC设计目的

调用非本机方法。

不同语言程序之间通讯。

不了解底层通讯,向本地方法一样调用。

三、RPC作用

分布式程序基础(分布式操作系统、分布式计算、分布式软件设计)

垂直应用服务化拆分。

四、RPC特点

封装网络交互

远程调用对象代理

支持容器(Spring、Jetty)

可配置,可扩展

五、hadoop 主要协议

NameNode主要实现了ClientProtocol、DataNodeProtocol、NameNodeProtocol。

Hadoop2.0中存在两个ipc包,分别在hadoop-common和hadoop-yarncommom项目下。分别是hadoop RPC和新的yarn RPC。

六、JAVA代码实现简单hadoop-RPC简单实现测试

6.1 协议接口

/**
 * 
 */
package com.yuyi.rpc;
 
/**
 * @author mcb 
 *
 * 2018年10月15日 上午11:08:02 
 *  RPC中的协议
 */
public interface SayHello {
  
  public static final long versionID=1;
  //协议
  public String sayHello(String words);
 
}

6.2 服务端接口

/**
 * 
 */
package com.yuyi.rpc;
 
import java.io.IOException;
 
import org.apache.hadoop.HadoopIllegalArgumentException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.ipc.RPC;
import org.apache.hadoop.ipc.RPC.Server;
 
/**
 * @author mcb 
 *
 * 2018年10月15日 上午11:10:50 
 *  RPC中的服务端 实现协议
 * 
 */
public class RPCServer implements SayHello{
 
  
  public String sayHello(String words) {
    // TODO 自动生成的方法存根
    System.out.println("客户端说的话是: "+words);
    
    return "OK~我知道你没有挂掉了~~~";
  }
  
  public static void main(String[] args) {
    
    try {
      Server server = new RPC.Builder(new Configuration())
      .setInstance(new RPCServer())
      .setProtocol(SayHello.class)
      .setBindAddress("127.0.0.1")
      .setPort(6666)
      .build();
      
      server.start();
      System.out.println("server is started... ");
      
    } catch (HadoopIllegalArgumentException e) {
      // TODO 自动生成的 catch 块
      e.printStackTrace();
    } catch (IOException e) {
      // TODO 自动生成的 catch 块
      e.printStackTrace();
    }
    
  }
  
  
  
}

6.3 客户端接口

/**
 * 
 */
package com.yuyi.rpc;
 
import java.io.IOException;
import java.net.InetSocketAddress;
 
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.ipc.RPC;
 
/**
 * @author mcb 
 *
 * 2018年10月15日 上午11:20:11 
 */
 
public class RPCClient {
  private static String sayHello;
 
  public static void main(String[] args) {
    //第一个参数:协议 第二份参数:版本(long整数),第三个参数:地址,第四个参数:configuration。
    try {
      while (true) {
      SayHello sayH = RPC.getProxy(SayHello.class, 1, new InetSocketAddress("127.0.0.1",6666), new Configuration());
      sayHello = sayH.sayHello("我现在活着,心跳正在进行~~~");
      System.out.println(sayHello);
      Thread.sleep(2000);
      }
      
    } catch (IOException e) {
      // TODO 自动生成的 catch 块
      e.printStackTrace();
    } catch (InterruptedException e) {
      // TODO 自动生成的 catch 块
      e.printStackTrace();
    }
    
  }
  
}

启动后结果:

目录
相关文章
|
20天前
|
JSON 移动开发 网络协议
gRPC不是银弹:为内网极致性能,如何设计自己的RPC协议?
自研RPC协议针对内网高并发场景,通过精简帧头、长度前缀解决TCP拆包粘包,支持灵活扩展与高效序列化,显著提升性能与资源利用率,适用于对延迟敏感的分布式系统。
107 4
|
7月前
|
数据采集 存储 数据可视化
分布式爬虫框架Scrapy-Redis实战指南
本文介绍如何使用Scrapy-Redis构建分布式爬虫系统,采集携程平台上热门城市的酒店价格与评价信息。通过代理IP、Cookie和User-Agent设置规避反爬策略,实现高效数据抓取。结合价格动态趋势分析,助力酒店业优化市场策略、提升服务质量。技术架构涵盖Scrapy-Redis核心调度、代理中间件及数据解析存储,提供完整的技术路线图与代码示例。
638 0
分布式爬虫框架Scrapy-Redis实战指南
|
11月前
|
Java 数据库
在Java中使用Seata框架实现分布式事务的详细步骤
通过以上步骤,利用 Seata 框架可以实现较为简单的分布式事务处理。在实际应用中,还需要根据具体业务需求进行更详细的配置和处理。同时,要注意处理各种异常情况,以确保分布式事务的正确执行。
|
11月前
|
消息中间件 Java Kafka
在Java中实现分布式事务的常用框架和方法
总之,选择合适的分布式事务框架和方法需要综合考虑业务需求、性能、复杂度等因素。不同的框架和方法都有其特点和适用场景,需要根据具体情况进行评估和选择。同时,随着技术的不断发展,分布式事务的解决方案也在不断更新和完善,以更好地满足业务的需求。你还可以进一步深入研究和了解这些框架和方法,以便在实际应用中更好地实现分布式事务管理。
|
5月前
|
监控 Java 调度
SpringBoot中@Scheduled和Quartz的区别是什么?分布式定时任务框架选型实战
本文对比分析了SpringBoot中的`@Scheduled`与Quartz定时任务框架。`@Scheduled`轻量易用,适合单机简单场景,但存在多实例重复执行、无持久化等缺陷;Quartz功能强大,支持分布式调度、任务持久化、动态调整和失败重试,适用于复杂企业级需求。文章通过特性对比、代码示例及常见问题解答,帮助开发者理解两者差异,合理选择方案。记住口诀:单机简单用注解,多节点上Quartz;若是任务要可靠,持久化配置不能少。
511 4
|
6月前
|
XML JSON 网络协议
利用HTTP POST协议实现简单的RPC协议:WireShark抓包分析
通过这种方式,我们可以使用HTTP POST实现简单的RPC协议,并使用WireShark进行抓包分析。这不仅可以帮助我们理解RPC协议的工作原理,也可以帮助我们调试和优化我们的代码。
249 30
|
6月前
|
JSON 数据格式
利用HTTP POST协议实现简单的RPC协议,并使用WireShark进行抓包分析
通过这种方式,我们可以利用HTTP POST实现简单的RPC协议,并使用WireShark进行抓包分析。这种方式简单易懂,实用性强,可以应用于各种网络编程场景。
202 16
|
11月前
|
Dubbo 安全 应用服务中间件
Apache Dubbo 正式发布 HTTP/3 版本 RPC 协议,弱网效率提升 6 倍
在 Apache Dubbo 3.3.0 版本之后,官方推出了全新升级的 Triple X 协议,全面支持 HTTP/1、HTTP/2 和 HTTP/3 协议。本文将围绕 Triple 协议对 HTTP/3 的支持进行详细阐述,包括其设计目标、实际应用案例、性能测试结果以及源码架构分析等内容。
583 112
|
10月前
|
存储 监控 数据可视化
常见的分布式定时任务调度框架
分布式定时任务调度框架用于在分布式系统中管理和调度定时任务,确保任务按预定时间和频率执行。其核心概念包括Job(任务)、Trigger(触发器)、Executor(执行器)和Scheduler(调度器)。这类框架应具备任务管理、任务监控、良好的可扩展性和高可用性等功能。常用的Java生态中的分布式任务调度框架有Quartz Scheduler、ElasticJob和XXL-JOB。
3557 66
|
11月前
|
数据库
如何在Seata框架中配置分布式事务的隔离级别?
总的来说,配置分布式事务的隔离级别是实现分布式事务管理的重要环节之一,需要认真对待和仔细调整,以满足业务的需求和性能要求。你还可以进一步深入研究和实践 Seata 框架的配置和使用,以更好地应对各种分布式事务场景的挑战。
335 63

热门文章

最新文章

相关实验场景

更多