HDFS API程式設計
阿新 • • 發佈:2018-12-15
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