日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

Hadoop大数据入门到实战(第六节)- HDFS文件系统(JavaApi)

發布時間:2024/3/13 windows 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Hadoop大数据入门到实战(第六节)- HDFS文件系统(JavaApi) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

上一小節我們學習了FileSystem類的基本使用,本小節我們首先來學習使用API來完成文件的上傳,要使用javaAPI來上傳文件至集群我們需要使用到FSDataInputStream對象。

FSDataInputStream

我們知道在Java中要將數據輸出到終端,需要文件輸出流,HDFS的JavaAPI中也有類似的對象。
FileSystem類有一系列新建文件的方法,最簡單的方法是給準備新建的文件制定一個path對象,然后返回一個用于寫入數據的輸出流:

public FSDataOutputStream create(Path p)throws IOException

該方法有很多重載方法,允許我們指定是否需要強制覆蓋現有文件,文件備份數量,寫入文件時所用緩沖區大小,文件塊大小以及文件權限。

注意: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)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。