Hadoop大数据入门到实战(第六节)- HDFS文件系统(JavaApi)
上一小節我們學習了FileSystem類的基本使用,本小節我們首先來學習使用API來完成文件的上傳,要使用javaAPI來上傳文件至集群我們需要使用到FSDataInputStream對象。
FSDataInputStream
我們知道在Java中要將數據輸出到終端,需要文件輸出流,HDFS的JavaAPI中也有類似的對象。
FileSystem類有一系列新建文件的方法,最簡單的方法是給準備新建的文件制定一個path對象,然后返回一個用于寫入數據的輸出流:
該方法有很多重載方法,允許我們指定是否需要強制覆蓋現有文件,文件備份數量,寫入文件時所用緩沖區大小,文件塊大小以及文件權限。
注意:create()方法能夠為需要寫入且當前不存在的目錄創建父目錄,即就算傳入的路徑是不存在的,該方法也會為你創建一個目錄,而不會報錯。如果有時候我們并不希望它這么做,可以先用exists()方法先判斷目錄是否存在。
我們在寫入數據的時候經常想要知道當前的進度,API也提供了一個Progressable用于傳遞回調接口,這樣我們就可以很方便的將寫入datanode的進度通知給應用了。
package org.apache.hadoop.util; public interface Progressable{public void progress(); }接下來我們通過一個例子來體驗FSDataOutputStream的用法:
還是一樣我們先在本地創建一個文件,以供測試。
接下來編寫代碼:
運行得到如下結果:
可以看到文件已經成功上傳了。
練習
學以致用才能真正掌握知識,編寫代碼與腳本實現如下功能:
在/develop/input/目錄下創建hello.txt文件,并輸入如下數據:
迢迢牽牛星,皎皎河漢女。
纖纖擢素手,札札弄機杼。
終日不成章,泣涕零如雨。
河漢清且淺,相去復幾許?
盈盈一水間,脈脈不得語。
《迢迢牽牛星》使用FSDataOutputStream對象將文件上傳至HDFS的/user/tmp/目錄下,并打印進度。
刪除文件
上傳了文件之后,如果我們不想要了,怎么使用java代碼刪除集群上的文件呢?
使用FileSystem的delete()方法可以永久性刪除文件或目錄。
為了能查看到刪除文件之后的效果我們先來了解下如何使用java代碼輸出HDFS的文件目錄。
列出文件
我們在開發或者維護系統時,經常會需要列出目錄的內容,在HDFS的API中就提供了listStatus()方法來實現該功能。
public FileStatus[] listStatus(Path f)throws IOException public FileStatus[] listStatus(Path f,PathFilter filter)throws IOException public FileStatus listStatus(Path[] files)throws IOException public FileStatus() listStatus(Path[] files,PathFilter filter)throws IOException當傳入參數是一個文件時,他會簡單的轉變成以數組方式返回長度為1的FileStatus對象,當傳入參數是一個目錄時,則返回0或多個FileStatus對象,表示此目錄中包含的文件和目錄。
接下來通過一個例子,來體驗一下listStatus()方法的使用:
在命令行啟動hadoop,編寫代碼,運行可以看到如下結果。
顯示了hdfs根目錄下的文件夾與user目錄下的文件夾。
刪除文件
使用FileSystem的delete()方法可以永久性刪除文件或目錄。
public boolean delete(Path f,boolean recursive)throws IOException如果f是一個文件或者空目錄,那么recursive的值可以忽略,當recursize的值為true,并且p是一個非空目錄時,非空目錄及其內容才會被刪除(否則將會拋出IOException異常)。
接下來我們通過一個例子,來查看該方法如何使用。
編寫代碼,點擊評測,可以看到如下結果:
可以看到/user/hadoop/目錄已經被刪除了。
練習
先創建對應目錄,然后使用java代碼實現如下功能:
- 刪除HDFS的/user/hadoop/目錄(空目錄);
- 刪除HDFS的/tmp/test/目錄(非空目錄);
- 列出HDFS根目錄下所有的文件和文件夾;
- 列出HDFS下/tmp/的所有文件和文件夾。
總結
以上是生活随笔為你收集整理的Hadoop大数据入门到实战(第六节)- HDFS文件系统(JavaApi)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 猎魂觉醒服务器界面不显示角色,猎魂觉醒新
- 下一篇: html下划线输入框自动延伸,纯CSS实