1. 程式人生 > >通過IO流操作 HDFS程式碼實現

通過IO流操作 HDFS程式碼實現

HDFS檔案上傳

	 @Test
	    /**
	     * HDFS檔案上傳
	     */
	    public void putFileToHDFS() throws URISyntaxException, IOException, InterruptedException {
	        //1.獲取檔案系統
	        Configuration configuration = new Configuration();
	        FileSystem fs = FileSystem.get(new URI("hdfs://testnote01:9000"),configuration,"root");
	        //2.建立輸入流
	        FileInputStream fis = new FileInputStream(new File("e:/hostsmap.txt"));
	        //3.獲取輸出流
	        FSDataOutputStream fos = fs.create(new Path("/114.txt"));
	        //4.流對拷
	        IOUtils.copyBytes(fis,fos,configuration);
	
	        //5.關閉資源
	        IOUtils.closeStream(fos);
	        IOUtils.closeStream(fis);
	        fs.close();
	
	    }

HDFS檔案下載

	    /**
	     * HDFS檔案的下載
	     */
	    @Test
	    public void getFileFromHDFS() throws URISyntaxException, IOException, InterruptedException {
	        //1 獲取檔案系統
	        Configuration configuration = new Configuration();
	        FileSystem fs = FileSystem.get(new URI("hdfs://testnote01:9000"),configuration,"root");
	        //2 獲取輸入流
	        FSDataInputStream fis = fs.open(new Path("/114.txt"));
	
	        //3 獲取輸出流
	        FileOutputStream fos = new FileOutputStream(new File("e:/wo114.txt"));
	        //4 流的對拷
	        IOUtils.copyBytes(fis,fos,configuration);
	        //5 關閉資源
	        IOUtils.closeStream(fos);
	        IOUtils.closeStream(fis);
	        fs.close();
    }

HDFS檔案的定位某一塊進行下載

下載第一塊
 /**
     * 下載第一塊
     */
    @Test
    public void readFileSeek() throws InterruptedException, IOException, URISyntaxException {
        //1 獲取檔案系統
        Configuration configuration = new Configuration();
        FileSystem fs = FileSystem.get(new URI("hdfs://testnote01:9000"),configuration,"root");
        //2 獲取輸入流
        FSDataInputStream fis = fs.open(new Path("/user/hadoop-2.7.2.tar.gz"));
        //3 建立輸出流
        FileOutputStream fos = new FileOutputStream(new File("e:/hadoop-2.7.2.tar.gz.part1"));
        //4 流的拷貝
        byte[] buf = new byte[1024];

        for (int i = 0; i < 1024*128; i++) {
            fis.read(buf);
            fos.write(buf);
        }
        //5 關閉資源
        IOUtils.closeStream(fos);
        IOUtils.closeStream(fis);
    }
下載第二塊
    /**
     * 下載第二塊
     */
    @Test
    public void readFileSeek2() throws URISyntaxException, IOException, InterruptedException {
        //1 獲取檔案系統
        Configuration configuration = new Configuration();
        FileSystem fs = FileSystem.get(new URI("hdfs://testnote01:9000"),configuration,"root");
        //2 開啟輸入流
        FSDataInputStream fis = fs.open(new Path("/user/hadoop-2.7.2.tar.gz"));
        //3 定位輸入資料位置
        fis.seek(1024*1024*128);
        //4 建立輸出流
        FileOutputStream fos = new FileOutputStream(new File("e:/hadoop-2.7.2.tar.gz.part2"));
        //5 流的對拷
        IOUtils.copyBytes(fis,fos,configuration);
        //6 關閉資源
        IOUtils.closeStream(fos);
        IOUtils.closeStream(fis);

    }
合併檔案

找到檔案所在位置,搜尋欄搜尋cmd 在 window 命令視窗中執行 type hadoop-2.7.2.tar.gz.part2 >> hadoop-2.7.2.tar.gz.part1 重新命名檔名:hadoop-2.7.2.tar.gz.part1為hadoop-2.7.2.tar.gz