原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

相關文章
相關標籤/搜索