客户端与NameNode通信过程(源码角度分析)

.RPC(remote procedure call)是hadoop分布式机制运行的基础,远程过程指的是java进程,即一个java进程调用另一个java进程中对象的方法,调用方称作客户端(client),被调用方称作服务端(server),RPC就是CS结构的通信,同样客户端与NameNode通信过程也是采用RPC协议,下面结合实例和源代码进行分析:


1.实例代码: final FSDataOutputStream out= fileSystem.create(new Path(FILE_PATH));//创建文件

2.在上面的create方法中按F3进入源码:

public abstract FSDataOutputStream create(Path f,
      FsPermission permission,
      boolean overwrite,
      int bufferSize,
      short replication,
      long blockSize,
      Progressable progress) throws IOException;

3.从1中的代码可以看出 FSDataOutputStream 是由FileSystem或者其子类产生产生的,这时在控制台输出如下代码:

System.out.println(fileSystem.getClass().getName());

结果为:DistributedFileSystem

4.进入DistributedFileSystem的create()方法:

 public FSDataOutputStream create(Path f, FsPermission permission,
    boolean overwrite,
    int bufferSize, short replication, long blockSize,
    Progressable progress) throws IOException {

    statistics.incrementWriteOps(1);
    return new FSDataOutputStream
       (<span style="color:#ff0000;"><strong>dfs.create</strong></span>(getPathName(f), permission,
                   overwrite, true, replication, blockSize, progress, bufferSize),
        statistics);
  }

图中dfs代表的是DFSClient,根据RPC机制的原理,顾名思义,此类可能是与NameNode通信的客户端,然后进入DFSClient类


 this.rpcNamenode = createRPCNamenode(nameNodeAddr, conf, ugi);
 this.namenode = createNamenode(this.rpcNamenode, conf);
 从上面图中对DFSClient类的解释,和图中划红线的代码可以看出,DFSClient就是通信的客户端,NameNode是服务端,他们通信的业务类是ClientProtocol。

最后附上最终的截图如下:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值