原hadoop中RPC通讯文件上传原理

01    //APP2中调用的代码
02    public static final String HDFS_PATH = "hdfs://hadoop:9000/hello";
03        public static final String DIR_PATH = "/d1000";
04        public static final String FILE_PATH = "/d1000/f10000";
05     
06        public static void main(String[] args) throws Exception {
07            FileSystem fileSystem = FileSystem.get(new URI(HDFS_PATH),
08                    new Configuration());
09            // //建立文件
10            // fileSystem.mkdirs(new Path(DIR_PATH));
11            // //上传文件
12            // FSDataOutputStream out = fileSystem.create(new Path(FILE_PATH));
13            // FileInputStream in = new FileInputStream("c:/hello.txt");
14            // IOUtils.copyBytes(in, out, 1024,true);
15            // //下载数据
16            // FSDataInputStream in1 = fileSystem.open(new Path(FILE_PATH));
17            // IOUtils.copyBytes(in1, System.out, 1024,true);
18     
19            // 删除文件夹
20            deleteFile(fileSystem);
21        }
22     
23        private static void deleteFile(FileSystem fileSystem) throws IOException {
24            fileSystem.delete(new Path(FILE_PATH), true);
25            
26        }



注:RPC(remote procedure call)

  不一样java进程间的对象方法的调用。一方称做服务端(server),一方称做客户端(client)。

   server端提供对象,供客户端调用的,被调用的对象的方法的执行发生在server端。

  RPC是hadoop框架运行的基础。

rpc通讯

上图为RPC通讯调用的一系列方法最终达到把文件写入到linux文件系统中的过程,可是因为hadoop中hdfs分布式文件系统的API封装的特别 好,让调用者感受不到这个复杂的过程,对用户或者程序而言实际是经过网络来访问文件的动做,但对用户看来就像访问本地磁盘同样,充分体现了通透性....

   综上:对于HDFS的操做在应用中只需掌握FileSystem,而不须要关注数据是存放在DataNode的哪一个块中(由于这个工做时交给NameNode的)....

  注意:虽然客户端上传数据的时候是经过DataStreamer向NameNode申请block块和blockid,可是数据的传输行为并非经过NameNode转的,而是与DataNode直接链接!!php

相关文章
相关标签/搜索