1. 程式人生 > >HDFS API程式設計

HDFS API程式設計

3.1常用類

       3.1.1Configuration

Hadoop配置檔案的管理類,該類的物件封裝了客戶端或者伺服器的配置(配置叢集時,所有的xml檔案根節點都是configuration)

建立一個Configuration物件時,其構造方法會預設載入hadoop中的兩個配置檔案,分別是hdfs-site.xml以及core-site.xml,這兩個檔案中會有訪問hdfs所需的引數值,主要是fs.default.name,指定了hdfs的地址,有了這個地址客戶端就可以通過這個地址訪問hdfs了。即可理解為configuration就是hadoop中的配置資訊。

 

     3.1.2 FileSystem

該類的物件是一個檔案系統物件,對HDFS中的檔案進行的一系列操作,如建立等

 

      3.1.3FileStatus

獲取檔案或者資料夾的元資訊!比如:檔案路徑,檔案大小,檔案所有者,所在的塊大小,檔案修改時間,備份數量,許可權等!

 

       3.1.4FSDataInputStream

輸入流物件! 可以將HDFS中的檔案或者資料夾讀取到本地!

 

     3.1.5

FSDataOutputStream

輸出流物件! 可以將本地的檔案或者資料夾上傳到HDFS中!

 

     3.1.6構建工程

指定工程路徑

框架結構

 

匯入依賴節點

 

<dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-common</artifactId>
            <version>2.8
.0</version> </dependency> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-hdfs</artifactId> <version>2.8.0</version> </dependency> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-client</artifactId> <version>2.8.0</version> </dependency>

 

查詢檔案資訊

 

// 查詢檔案資訊
    private static void catFile() throws IOException, FileNotFoundException {
        // TODO Auto-generated method stub
        // 指定叢集當中主機的IP+埠
        String uri = "hdfs://192.168.77.99:9000";
        // 載入Hadoop的配置檔案
        Configuration con = new Configuration();
        // 建立一個可以操作的HDFS物件
        FileSystem fileSystem = FileSystem.get(URI.create(uri), con);
        FileStatus[] listStatus = fileSystem.listStatus(new Path("/input/"));
        for (FileStatus fileStatus : listStatus) {
            /**
             * 快捷鍵Syso
             */
            System.out.print("file檔案資訊------》" + fileStatus);
        }

        /**
         * 獲取單個檔案
         */

        /**
         * FileStatus fileStatus = fileSystem.getFileStatus(new Path(
         * "input/file1.txt")); System.out.println(fileStatus);
         */
    }

 

查詢檔案內容

public static void getFile(String fileName) throws Exception {
        // 指定叢集中的主機IP+埠號
        String uri = "hdfs://192.168.77.99:9000";
        // 載入Hadoop的配置檔案
        Configuration con = new Configuration();
        // 建立一個可以操作的HDFS物件
        FileSystem fileSystem = FileSystem.get(URI.create(uri), con);
        // 獲取指定的檔案
        FSDataInputStream open = fileSystem.open(new Path(fileName));
        // 將檔案的內容裝載到BufferedReader物件中去
        BufferedReader reader = new BufferedReader(new InputStreamReader(open));
        String line = "";
        // 迴圈讀取檔案內容
        while ((line = reader.readLine()) != null) {
            System.out.println(line);
        }
        // 關閉資源
        reader.close();
        open.close();
        fileSystem.close();
    }

建立一個空的檔案

public static void createNewFile(String fileName) throws Exception {
        // 指定叢集中的主機IP+埠號
        String uri = "hdfs://192.168.77.99:9000";
        // 載入Hadoop的配置檔案
        Configuration con = new Configuration();
        // 建立一個可以操作的HDFS物件
        FileSystem fileSystem = FileSystem.get(URI.create(uri), con);
        if (fileSystem.exists(new Path(fileName))) {
            System.out.println("檔案已經存在");
        } else {
            boolean createNewFile = fileSystem
                    .createNewFile(new Path(fileName));
            if (createNewFile) {
                System.out.println("成功");
            } else {
                System.out.println("失敗");
            }
        }
        fileSystem.close();
    }

在新建立的資料夾寫入內容

public static void createFile(String fileName) throws Exception {
        // 指定叢集中的主機IP+埠號
        String uri = "hdfs://192.168.77.99:9000";
        // 載入Hadoop的配置檔案
        Configuration con = new Configuration();
        // 建立一個可以操作的HDFS物件
        FileSystem fileSystem = FileSystem.get(URI.create(uri), con);
        if (fileSystem.exists(new Path(fileName))) {
            System.out.println("檔案已經存在");
        } else {
            FSDataOutputStream create = fileSystem.create(new Path(fileName));
            String str = "老黑今天又黑了";
            create.write(str.getBytes());
            create.flush();
            create.close();
        }
        fileSystem.close();
    }

 建立資料夾

public static void mkdirFile(String fileName) throws Exception {
        // 指定叢集中的主機IP+埠號
        String uri = "hdfs://192.168.77.99:9000";
        // 載入Hadoop的配置檔案
        Configuration con = new Configuration();
        // 建立一個可以操作的HDFS物件
        FileSystem fileSystem = FileSystem.get(URI.create(uri), con);
        boolean mkdirs = fileSystem.mkdirs(new Path(fileName));
        if (mkdirs) {
            System.out.println("成功!");
        } else {
            System.out.println("失敗!");
        }
        fileSystem.close();
    }

重名檔案的名字

public static void renameFile(String ordername, String newname)
            throws Exception {
        // 指定叢集中的主機IP+埠號
        String uri = "hdfs://192.168.77.99:9000";
        // 載入Hadoop的配置檔案
        Configuration con = new Configuration();
        // 建立一個可以操作的HDFS物件
        FileSystem fileSystem = FileSystem.get(URI.create(uri), con);
        boolean rename = fileSystem.rename(new Path(ordername), new Path(
                newname));
        if (rename) {
            System.out.println("成功!");
        } else {
            System.out.println("失敗!");
        }
        fileSystem.close();
    }

刪除資料夾

@SuppressWarnings("deprecation")
    public static void deleteFile(String filename) throws Exception {
        // 指定叢集中的主機IP+埠號
        String uri = "hdfs://192.168.77.99:9000";
        // 載入Hadoop的配置檔案
        Configuration con = new Configuration();
        // 建立一個可以操作的HDFS物件
        FileSystem fileSystem = FileSystem.get(URI.create(uri), con);

        boolean delete = fileSystem.delete(new Path(filename));
        if (delete) {
            System.out.println("成功!");
        } else {
            System.out.println("失敗!");
        }
        fileSystem.close();
    }

上傳檔案 Windows上傳到HDFS上

public static void fromFile(String localName, String fromName)
            throws Exception {
        // 指定叢集中的主機IP+埠號
        String uri = "hdfs://192.168.77.99:9000";
        // 載入Hadoop的配置檔案
        Configuration con = new Configuration();
        // 建立一個可以操作的HDFS物件
        FileSystem fileSystem = FileSystem.get(URI.create(uri), con);
        fileSystem.copyFromLocalFile(new Path(localName), new Path(fromName));
        fileSystem.close();
    }

從hdfs下載到Windows

    public static void downLoad(String defsFile,String localFile) throws Exception {
        String uri = "hdfs://192.168.77.99:9000";
        // 載入hadoop配置檔案
        Configuration con = new Configuration();
        // 建立一個可以操作HDFS物件
        FileSystem fileSystem = FileSystem.get(URI.create(uri), con);
         fileSystem.copyToLocalFile(new Path(defsFile),new Path (localFile));
        fileSystem.close();
        
    }

注意:要記得呼叫方法

完整的程式碼結構--各種操作的方法

package com.hdfs;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URI;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;

public class HDFS {

    public static void main(String[] args) throws Exception {
        // catFile();

        // getFile("/input/file1.txt");// 查詢單個檔案資訊

        // createNewFile("/input/file3.txt");
        // createFile("/input/file4.txt");
        // mkdirFile("/MKDIRS");//建立資料夾
        // renameFile("/input/file5.txt","/input/file4.txt");//重新命名檔案的名字
        //deleteFile("/MKDIRS");// 刪除資料夾
        //fromFile("C:\\Users\\70424\\Desktop\\1.txt","/input");//上傳檔案Windows到HDFS上
        downLoad("/input/file1.txt","C:\\Users\\70424\\Desktop");//從hdfs下載到Windows
    }

    // 查詢檔案資訊
    private static void catFile() throws IOException, FileNotFoundException {
        // TODO Auto-generated method stub
        // 指定叢集當中主機的IP+埠
        String uri = "hdfs://192.168.77.99:9000";
        // 載入Hadoop的配置檔案
        Configuration con = new Configuration();
        // 建立一個可以操作的HDFS物件
        FileSystem fileSystem = FileSystem.get(URI.create(uri), con);
        FileStatus[] listStatus = fileSystem.listStatus(new Path("/input/"));
        for (FileStatus fileStatus : listStatus) {
            /**
             * 快捷鍵Syso
             */
            System.out.print("file檔案資訊------》" + fileStatus);
        }

        /**
         * 獲取單個檔案
         */

        /**
         * FileStatus fileStatus = fileSystem.getFileStatus(new Path(
         * "input/file1.txt")); System.out.println(fileStatus);
         */
    }

    // 查詢檔案內容
    public static void getFile(String fileName) throws Exception {
        // 指定叢集中的主機IP+埠號
        String uri = "hdfs://192.168.77.99:9000";
        // 載入Hadoop的配置檔案
        Configuration con = new Configuration();
        // 建立一個可以操作的HDFS物件
        FileSystem fileSystem = FileSystem.get(URI.create(uri), con);
        // 獲取指定的檔案
        FSDataInputStream open = fileSystem.open(new Path(fileName));
        // 將檔案的內容裝載到BufferedReader物件中去
        BufferedReader reader = new BufferedReader(new InputStreamReader(open));
        String line = "";
        // 迴圈讀取檔案內容
        while ((line = reader.readLine()) != null) {
            System.out.println(line);
        }
        // 關閉資源
        reader.close();
        open.close();
        fileSystem.close();
    }

    // 建立一個空的檔案
    public static void createNewFile(String fileName) throws Exception {
        // 指定叢集中的主機IP+埠號
        String uri = "hdfs://192.168.77.99:9000";
        // 載入Hadoop的配置檔案
        Configuration con = new Configuration();
        // 建立一個可以操作的HDFS物件
        FileSystem fileSystem = FileSystem.get(URI.create(uri), con);
        if (fileSystem.exists(new Path(fileName))) {
            System.out.println("檔案已經存在");
        } else {
            boolean createNewFile = fileSystem
                    .createNewFile(new Path(fileName));
            if (createNewFile) {
                System.out.println("成功");
            } else {
                System.out.println("失敗");
            }
        }
        fileSystem.close();
    }

    // 在新建立的資料夾寫入內容
    public static void createFile(String fileName) throws Exception {
        // 指定叢集中的主機IP+埠號
        String uri = "hdfs://192.168.77.99:9000";
        // 載入Hadoop的配置檔案
        Configuration con = new Configuration();
        // 建立一個可以操作的HDFS物件
        FileSystem fileSystem = FileSystem.get(URI.create(uri), con);
        if (fileSystem.exists(new Path(fileName))) {
            System.out.println("檔案已經存在");
        } else {
            FSDataOutputStream create = fileSystem.create(new Path(fileName));
            String str = "老黑今天又黑了";
            create.write(str.getBytes());
            create.flush();
            create.close();
        }
        fileSystem.close();
    }

    // 建立資料夾
    public static void mkdirFile(String fileName) throws Exception {
        // 指定叢集中的主機IP+埠號
        String uri = "hdfs://192.168.77.99:9000";
        // 載入Hadoop的配置檔案
        Configuration con = new Configuration();
        // 建立一個可以操作的HDFS物件
        FileSystem fileSystem = FileSystem.get(URI.create(uri), con);
        boolean mkdirs = fileSystem.mkdirs(new Path(fileName));
        if (mkdirs) {
            System.out.println("成功!");
        } else {
            System.out.println("失敗!");
        }
        fileSystem.close();
    }

    // 重名檔案的名字
    public static void renameFile(String ordername, String newname)
            throws Exception {
        // 指定叢集中的主機IP+埠號
        String uri = "hdfs://192.168.77.99:9000";
        // 載入Hadoop的配置檔案
        Configuration con = new Configuration();
        // 建立一個可以操作的HDFS物件
        FileSystem fileSystem = FileSystem.get(URI.create(uri), con);
        boolean rename = fileSystem.rename(new Path(ordername), new Path(
                newname));
        if (rename) {
            System.out.println("成功!");
        } else {
            System.out.println("失敗!");
        }
        fileSystem.close();
    }

    // 刪除資料夾
    @SuppressWarnings("deprecation")
    public static void deleteFile(String filename) throws Exception {
        // 指定叢集中的主機IP+埠號
        String uri = "hdfs://192.168.77.99:9000";
        // 載入Hadoop的配置檔案
        Configuration con = new Configuration();
        // 建立一個可以操作的HDFS物件
        FileSystem fileSystem = FileSystem.get(URI.create(uri), con);

        boolean delete = fileSystem.delete(new Path(filename));
        if (delete) {
            System.out.println("成功!");
        } else {
            System.out.println("失敗!");
        }
        fileSystem.close();
    }

    // 上傳檔案 Windows上傳到HDFS上
    public static void fromFile(String localName, String fromName)
            throws Exception {
        // 指定叢集中的主機IP+埠號
        String uri = "hdfs://192.168.77.99:9000";
        // 載入Hadoop的配置檔案
        Configuration con = new Configuration();
        // 建立一個可以操作的HDFS物件
        FileSystem fileSystem = FileSystem.get(URI.create(uri), con);
        fileSystem.copyFromLocalFile(new Path(localName), new Path(fromName));
        fileSystem.close();
    }
    //從hdfs下載到Windows
    public static void downLoad(String defsFile,String localFile) throws Exception {
        String uri = "hdfs://192.168.77.99:9000";
        // 載入hadoop配置檔案
        Configuration con = new Configuration();
        // 建立一個可以操作HDFS物件
        FileSystem fileSystem = FileSystem.get(URI.create(uri), con);
         fileSystem.copyToLocalFile(new Path(defsFile),new Path (localFile));
        fileSystem.close();
        
    }

}
View Code