客户端和NameNode、DataNode通信过程

  • client和NameNode之间是通过RPC通信
  • DataNode和NameNode之间是通过RPC通信
  • client和DataNode之间是通过简单的Socket通信

以HDFS读写文件为例:
  NameNode主要负责管理文件系统的命名空间、集群配置信息和存储块的复制等。NameNode会将文件系统的Meta-data存储在内存中,这些信息主要包括了文件信息、每一个文件对应的文件块的信息和每一个文件块在DataNode的信息等。NameNode本身就是一个RPC的服务端,主要实现的接口有:ClientProtocol、DatanodeProtocol、NamenodeProtocol。
  DataNode是文件存储的基本单元,它将Block存储在本地文件系统中,保存了Block的Meta-data,同时周期性地将所有存在的Block信息发送给NameNode。
客户端和NameNode、DataNode通信过程_第1张图片
文件写入

  • Client向NameNode发起文件写入的请求
  • NameNode根据文件大小和文件块配置情况,返回给Client应该向哪一个DataNode写入数据
  • Client将文件划分为多个Block,根据DataNode的地址信息,按顺序写入到每一个DataNode块中

文件读取

  • Client向NameNode发起文件读取的请求
  • NameNode返回文件存储的DataNode的信息
  • Client读取文件信息

为什么要用RPC机制?
  RPC简单来讲就说在一台机器上面调用另机器上的程序,它主要是通过Java的序列化和反序列化来实现的,因为不同节点的信息主要是保存在java对象里面的嘛,序列化就是把java文件转化成字节的形式通过保存下来,然后通过网络发送到另一台机器上面。
  RPC(远程过程调用),会起多个java进程,并且之间进行通信的时候用的是Scoket通信,意味着RPC通信客户端和服务端不一定位于同一台机器上,因为Scoket通信可以指定ip和端口,完整的Hadoop体系结构可以分散在多个进程、多个不同的服务器之上的。所以NameNode作为其中的一部分,需要实现RPC机制的,让程序运行在不同的服务器上,实现分布式。

附:Hadoop安装时为什么进行SSH配置?
  Hadoop在执行诸如start-dfs.sh/start-yarn.sh命令时,在主节点执行上述两条命令,然后主节点会通过SSH通信,登录到从节点执行相关的hadoop-damen.sh start DataNode之类的工作。之后NameNode向DataNode发送数据块以及DataNode向NameNode发送心跳等一系列问题都是通过RPC进行的。所以,要进行SSH免密码登录配置。
  SSH配置时,SSH公钥只需要将NameNode的公钥拷贝到DataNode上即可。如果不需要DataNode免密码登录NameNode则不需要将DataNode的公钥拷贝到NameNode。

你可能感兴趣的:(Hadoop)