`
zuochanxiaoheshang
  • 浏览: 8015 次
社区版块
存档分类
最新评论

Hadoop RPC整个使用流程——以DataNode向NameNode注册为例

 
阅读更多

在HDFS实现过程中DataNode class中有一个成员变量namenode,其类型是DatanodeProtocol。namenode可以看作是远程NameNode服务器的一个代理,因为NameNode本身也是DatanodeProtocol接口的具体实现;DataNode通过调用namenode对象的方法与远程NameNode进行交互。
  下面看一下namenode变量在DataNode当中是如何初始化的:
  首先DataNode通过调用RPC.waiForProxy方法完成namenode的初始化过程,具体实现看下面的代码:
this.namenode = (DatanodeProtocol) RPC.waitForProxy(DatanodeProtocol.class,DatanodeProtocol.versionID,nameNodeAddr,conf);
  通过上面的代码可以看出,具体namenode是如何与远程的NameNode进行连接的需要通过查阅RPC.waitForProxy(...)来查看。waitForProxy通过RPC内部的一系列方法调用,最终通过下面的getProxy方法来实现:
public static VersionedProtocol getProxy(
Class<? extends VersionedProtocol> protocol,
  long clientVersion,
InetSocketAddress addr,
  UserGroupInformation ticket,
Configuration conf,
  SocketFactory factory,
  int rpcTimeout)throws IOException {

if (UserGroupInformation.isSecurityEnabled()) {
SaslRpcServer.init(conf);
}
VersionedProtocol proxy = (VersionedProtocol)                      Proxy.newProxyInstance(
protocol.getClassLoader(),
  new Class[] { protocol },
new Invoker(protocol, addr, ticket, conf, factory,                      rpcTimeout));
long serverVersion =                                            proxy.getProtocolVersion(protocol.getName(),
clientVersion);
if (serverVersion == clientVersion) {
return proxy;
} else
        {
throw new VersionMismatch(protocol.getName(),                  clientVersion,
serverVersion);
}
  }
  上面标注为红色的代码是proxy获取的关键(目前对Java Proxy的具体作用不是很了解。但是据猜测作用应该是这样的,Proxy产生了一个protocol的一个具体对象,但是对该对象所有方法的调用都是通过Invoker中的invoke方法来进行调用,也就是其最终的方法调用是通过Invoker的invoke方法进行实现的),其中Invoker是该方法的关键,我们看一下Invoker的具体实现:
  Invoker是InvocationHandler接口的具体实现(Invoker implements InvocationHandler),其中必须实现的方法是:
public Object invoke(Object proxy, Method method, Object[] args)throws Throwable {
final boolean logDebug = LOG.isDebugEnabled();
long startTime = 0;
if (logDebug) {
startTime = System.currentTimeMillis();
}

ObjectWritable value = (ObjectWritable) client.call(new Invocation(
method, args), remoteId);
if (logDebug) {
long callTime = System.currentTimeMillis() - startTime;
LOG.debug("Call: " + method.getName() + " " + callTime);
}
return value.get();
}

invoke方法通过调用client.call方法完成与远程服务器的调用,client是RPC Client的一个实例。RPC Client具体完成与远程服务器通过socket进行交互的功能。

 

分享到:
评论

相关推荐

    hadoop2.0 2个namenode 2个datanode 部署

    在这个部署中,我们将使用 Hadoop 2.0 在两个 Ubuntu 服务器上部署双 Namenode 双 Datanode 集群。 Namenode 的作用 Namenode 是 Hadoop 集群中的主节点,负责管理文件系统的命名空间和数据块的分布。它维护着...

    hadoop rpc实例

    Hadoop RPC广泛应用于Hadoop生态系统中的各种组件,如HDFS的NameNode与DataNode之间的通信、YARN的ResourceManager与NodeManager之间的交互,以及MapReduce作业的提交和执行等。 总结来说,Hadoop RPC是Hadoop...

    Hadoop RPC机制分析

    在Hadoop中,RPC被广泛用于NameNode、DataNode、TaskTracker等组件之间的通信,实现了服务端与客户端的透明交互。 二、Hadoop RPC架构 Hadoop的RPC基于Java的Socket通信,主要由以下组件构成: 1. **Protocol**: ...

    Hadoop Namenode性能诊断及优化

    ### Hadoop Namenode性能诊断及优化 #### 一、Namenode简介与性能挑战 Hadoop作为大数据处理领域的核心技术之一,其分布式文件系统HDFS(Hadoop Distributed File System)是整个框架的重要组成部分。HDFS主要由两...

    java操作hadoop的RPC,源码

    Hadoop作为一个开源的大数据处理框架,其RPC机制是实现各个组件如NameNode、DataNode、TaskTracker等之间通信的核心。以下是对这个主题的详细讲解: 1. **RPC基础概念**: - RPC是一种进程间通信(IPC)方式,它...

    Hadoop默认端口清单-防火墙申请使用

    - **8020**:`fs.defaultFS`,这是NameNode的RPC端口,客户端通过此端口与NameNode进行交互,获取元数据信息。 - **JournalNode** - **8485**:`dfs.journalnode.rpc-address`,JournalNode的RPC服务端口,用于HA...

    rpc架构与hadoop分享

    - **数据冗余与容错**:默认情况下,HDFS会为每个文件块创建三个副本,分布在不同的DataNode上,以提高数据的可靠性和可用性。 - **MapReduce工作流程**:分为Map阶段和Reduce阶段,通过将任务分解成多个子任务并行...

    hadoop中RPC协议的小测试例子(吴超老师)

    在Hadoop中,RPC主要用于NameNode、DataNode、TaskTracker等组件之间的通信。客户端通过RPC接口与服务端建立连接,发送请求,服务端处理请求后返回结果。整个过程涉及以下几个关键步骤: 1. **协议定义**:首先,...

    Hadoop中HDFS源代码分析

    Hadoop使用远程过程调用(RPC)来实现NameNode和DataNode之间的通信,以及客户端与NameNode的交互。 - **3.2.1 Client类** 客户端API包含在`org.apache.hadoop.ipc`包下,主要负责发起RPC请求,如打开文件、关闭...

    java_RPC_hadoop.zip

    在Hadoop中,RPC被用于NameNode和DataNode之间的通信,TaskTracker和JobTracker之间的通信,以及其他各种组件之间的交互。 1. **Java实现RPC**:Java中的RPC实现通常基于Socket编程,包括创建服务器端Socket监听...

    Hadoop技术内幕 深入解析HADOOP COMMON和HDFS架构设计与实现原理.pdf

    《Hadoop技术内幕:深入解析HADOOP COMMON和HDFS架构设计与实现原理》这本书是Hadoop技术领域的一本深入解析之作,它详尽地探讨了Hadoop的两大核心组件——HADOOP COMMON和HDFS(Hadoop Distributed File System)的...

    《Hadoop大数据开发实战》教学教案—03HDFS分布式文件系统.pdf

    本节课程主要介绍 HDFS 的概念、HDFS 存储架构和数据读写流程、HDFS 的 Shell 命令、Java 程序操作 HDFS、Hadoop 序列化、Hadoop 小文件处理、通信机制 RPC 等知识点。 HDFS 概念 HDFS(Hadoop Distributed File ...

    Hadoop源码分析HDFS数据流

    3. DistributedFileSystem 向客户端返回一个负责处理 DataNode 和 Namenode 间通信的 FSDataOutputStream 对象。 4. DFSOutputStream 将文件分成一个个数据包,并写入到数据队列中。 5. DataStreamer 处理数据队列,...

    自己总结的hadoop HA安装流程

    以下是我根据自身经验总结的Hadoop HA安装流程,这个流程已经在实际工作中得到验证,可以确保稳定运行。 一、环境准备 1. 操作系统:通常选择CentOS或Ubuntu等Linux发行版,确保系统稳定可靠。 2. 软件依赖:安装...

    Hadoop技术内幕 深入解析HADOOP COMMON和HDFS架构设计与实现原理

    《Hadoop技术内幕:深入解析HADOOP COMMON和HDFS架构设计与实现原理》这本书是IT领域的经典之作,专门探讨了Hadoop的核心组件——Hadoop Common和HDFS(Hadoop Distributed File System)的设计理念、架构及其背后的...

    hadoop2 文件读写原理

    这个调用会向NameNode发起远程过程调用(RPC),请求在文件系统的命名空间中创建一个新文件,但此时文件还没有关联任何数据块。NameNode会检查文件是否已存在,以及客户端是否有权限创建文件。如果检查通过,...

    HDFS源码剖析带书签目录高清.zip

    《Hadoop 2.X HDFS源码剖析》以Hadoop 2.6.0源码为基础,深入剖析了HDFS 2.X中各个模块的实现细节,包括RPC框架实现、Namenode实现、Datanode实现以及HDFS客户端实现等。《Hadoop 2.X HDFS源码剖析》一共有5章,其中...

    hadoop network

    每当DataNode向NameNode发送心跳信息时,它会报告其存储的块信息,NameNode据此可以检测到故障并进行恢复。 在文件读写过程中,Hadoop使用了一种叫做BlockCopy的机制。当客户端写入文件时,数据会被分割成多个块,...

    Hadoop系统架构 (2).docx

    DataNode会在启动后向NameNode注册,并上报自身状态信息,以便NameNode能够监控整个集群的状态。 ### HDFS数据操作 #### 文件读取流程 客户端读取HDFS中的数据时,会先向NameNode查询所需数据块的位置信息,然后...

Global site tag (gtag.js) - Google Analytics