《Hadoop與大數據挖掘》一2.4.1 HDFS Java API操作
本節書摘來華章計算機《Hadoop與大數據挖掘》一書中的第2章 ,第2.4.1節,張良均 樊 哲 位文超 劉名軍 許國傑 周 龍 焦正升 著 更多章節內容可以訪問雲棲社區“華章計算機”公眾號查看。
2.4.1 HDFS Java API操作
Hadoop中關於文件操作類基本上是在org.apache.hadoop.fs包中,這些API能夠支持的操作有:打開文件,讀寫文件,刪除文件,創建文件、文件夾,判斷是文件或文件夾,判斷文件或文件夾是否存在等。
Hadoop類庫中最終麵向用戶提供的接口類是FileSystem,這個類是個抽象類,隻能通過類的get方法得到其實例。get方法有幾個重載版本,如圖2-28所示。
比較常用的是第一個,即灰色背景的方法。
FileSystem針對HDFS相關操作的API如表2-5所示。
代碼清單2-22,是FileSystem API的一個簡單示例。該代碼首先獲取FileSystem的一個實例,然後調用該實例的listStatus方法,獲取所有根目錄下麵的文件或文件夾(注意這裏獲取的不包含遞歸子目錄);接著,調用create方法創建一個新文件,並寫入“Hello World!”;最後,讀取剛才創建的文件,並把創建的文件內容打印出來;關閉FileSystem實例。
代碼清單2-22 FileSystem API示例
package demo;
import java.io.IOException;
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 FileSystemAPIDemo {
public static void main(String[] args) throws IOException {
// 獲取Hadoop默認配置
Configuration conf = new Configuration();
conf.set("fs.defaultFS", "hdfs://master:8020"); // 配置HDFS
// 獲取HDFS FileSystem實例
FileSystem fs = FileSystem.get(conf);
// 列出根目錄下所有文件及文件夾
Path root = new Path("hdfs://master:8020/");
FileStatus[] children = fs.listStatus(root);
for(FileStatus child :children){
System.out.println(child.getPath().getName());
}
// 創建文件並寫入“HelloWorld!”
Path newFile = new Path("hdfs://master:8020/user/fansy/new.txt"); // 注意路徑需要具有寫權限
if(fs.exists(newFile)){ // 判斷文件是否存在
fs.delete(newFile, false); // 如果存在,則刪除文件
}
FSDataOutputStream out = fs.create(newFile); // 創建文件
out.writeUTF("Hello World!"); // 寫入“Hello World!”
out.close(); // 關閉輸出流
// 讀取文件內容
FSDataInputStream in = fs.open(newFile); // 打開文件
String info = in.readUTF(); // 讀取輸入流
System.out.println(info); // 打印輸出
// 關閉文件係統實例
fs.close();
}
}
執行完成後,在HDFS上可以看到創建的文件及內容,如圖2-29所示。
最後更新:2017-06-26 10:02:28