文章目錄
- 前言
- 一、實驗目的
- 二、實驗平臺
- 三、實驗內容和要求
- 3.1、HDFS 目錄操作
- 3.1.1、創建用戶目錄
- 3.1.2、顯示 HDFS 中與當前用戶對應的目錄內容
- 3.1.3、列出 HDFS 上的所有目錄
- 3.1.4、用戶目錄下創建一個 input 目錄
- 3.1.5、根目錄下創建 input 的目錄
- 3.1.6、刪除子目錄
- 3.2、HDFS 文件操作
- 3.2.1、向 HDFS 中上傳任意文本文件
- 3.2.2、從 HDFS 中下載指定文件
- 3.2.3、輸出 HDFS 指定文件到終端中
- 3.2.4、顯示 HDFS 中指定的文件信息
- 3.2.5、輸出 HDFS 指定目錄下文件信息
- 3.2.6、指定路徑創建和刪除文件
- 3.2.7、指定路徑創建和刪除目錄
- 3.2.8、向 HDFS 中指定的文件追加內容
- 3.2.9、刪除 HDFS 中指定的文件
- 3.2.10、刪除 HDFS 中指定的目錄
- 3.2.11、將文件從源路徑移動到目的路徑
- 總結
前言
本篇文章是大數據基礎系列的第五篇,完全針對 HDFS 文件系統,目的即理解 HDFS 在 Hadoop 體系結構中的角色,熟練使用 HDFS 操作常用的 Shell 命令,熟悉 HDFS 操作常用的 Java API。對大數據系列感興趣的同學可以移步本人大數據專欄查看更多內容。前文回顧:《大數據入門系列 4:全網最全,偽分布式 Hadoop 在 Ubuntu 上的安裝流程完整步驟及易錯點分析》
一、實驗目的
- 理解 HDFS 在 Hadoop 體系結構中的角色。
- 熟練使用 HDFS 操作常用的 Shell 命令。
- 熟悉 HDFS 操作常用的 Java API。
二、實驗平臺
- 操作系統:Linux。
- Hadoop 版本:Hadoop-3.2.1。
- JDK 版本:java-8-openjdk-amd64。
- Java IDE:Eclipse。
三、實驗內容和要求
3.1、HDFS 目錄操作
Hadoop 系統安裝好之后,第一次使用 HDFS 時,在初始化并啟動之后,首先需要在 HDFS 中創建用戶目錄。
3.1.1、創建用戶目錄
本次實驗全部采用 bailu 用戶登錄 Linux 系統,故在 HDFS 中為 bailu 用戶創建用戶目錄,命令如下:
cd /usr/local/hadoop/hadoop-3.2.1
./bin/hdfs dfs -mkdir -p /user/bailu
具體如下圖所示:
說明:該命令表示在 HDFS 中創建一個 /user/bailu 的目錄。
- -mkdir 是創建目錄的操作。
- -p 表示如果是多級目錄,則父目錄和子目錄一起創建。
注意:這里 /user/bailu 就是一個多級目錄,因此必須使用參數 -p,否則會出錯。
3.1.2、顯示 HDFS 中與當前用戶對應的目錄內容
/user/bailu 目錄就成為 bailu 用戶對應的用戶目錄。
我們可以使用如下命令顯示 HDFS 中與當前 bailu 對應的用戶目錄下的內容:
./bin/hdfs dfs -ls .
說明:
- -ls 表示列出 HDFS 某個目錄下的所有內容。
- . 表示 HDFS 中當前用戶目錄,也就是 /user/bailu 目錄。
等價于:
./bin/hdfs dfs -ls /user/bailu
3.1.3、列出 HDFS 上的所有目錄
如果要列出 HDFS 上的所有目錄,可以使用如下命令:
./bin/hdfs dfs -ls
3.1.4、用戶目錄下創建一個 input 目錄
在 bailu 用戶下創建一個input目錄,命令如下:
./bin/hdfs dfs -mkdir input
具體如下圖所示:
說明:我們在創建 input 目錄時,采用了相對路徑形式,實際上 input 目錄創建成功后,它在 HDFS 中的完整路徑是 /user/bailu/input。
3.1.5、根目錄下創建 input 的目錄
如果要在 HDFS 的根目錄下創建一個名為 input 的目錄,則需要以下命令:
./bin/hdfs dfs -mkdir /input
3.1.6、刪除子目錄
可以使用 rm 命令刪除剛才在 HDFS 中創建的 /input 目錄(不是 /user/bailu/input 目錄):
./bin/hdfs dfs -rm -r /input
說明:-r 參數表示如果刪除 /input 目錄及其子目錄下的所有內容,如果要刪除的目錄包含了子目錄,則必須使用 -r 參數,否則會執行失敗。
3.2、HDFS 文件操作
首先使用 gedit 編輯器,在本地 Linux 文件系統的 /home/bailu/ 目錄下創建一個文件 myLocalFile.txt,里面隨意輸入一些單詞,具體如下圖所示:
3.2.1、向 HDFS 中上傳任意文本文件
向 HDFS 中上傳任意文本文件,如果指定的文件在 HDFS 中已經存在,由用戶指定是追加到原有文件末尾還是覆蓋原有的文件,命令如下:
./bin/hdfs dfs -put /home/bailu/myLocalFile.txt input
具體如下圖所示:
3.2.2、從 HDFS 中下載指定文件
從 HDFS 中下載指定文件,如果本地文件與要下載的文件名稱相同,則自動對下載的文件重命名,命令如下:
./bin/hdfs dfs -get input/myLocalFile.txt /home/bailu/下載
具體如下圖所示:
3.2.3、輸出 HDFS 指定文件到終端中
將 HDFS 中指定文件的內容輸出到終端中,命令如下:
./bin/hdfs dfs -cat input/myLocalFile.txt
具體如下圖所示:
3.2.4、顯示 HDFS 中指定的文件信息
顯示 HDFS 中指定的文件的讀寫權限、大小、創建時間、路徑等信息,命令如下:
./bin/hdfs dfs -ls input/myLocalFile.txt
具體如下圖所示:
3.2.5、輸出 HDFS 指定目錄下文件信息
給定 HDFS 中某一個目錄,輸出該目錄下的所有文件的讀寫權限、大小、創建時間、路徑等信息,如果該文件是目錄,則遞歸輸出該目錄下所有文件相關信息,命令如下:
./bin/hdfs dfs -ls input
具體如下圖所示:
3.2.6、指定路徑創建和刪除文件
提供一個 HDFS 內的文件的路徑,對該文件進行創建和刪除操作。如果文件所在目錄不存在,則自動創建目錄(以操作 empty.txt 文件為例),創建文件操作命令如下:
./bin/hdfs dfs -touchz empty.txt
具體如下圖所示:
刪除文件操作命令如下:
./bin/hdfs dfs -rm empty.txt
具體如下圖所示:
3.2.7、指定路徑創建和刪除目錄
提供一個 HDFS 的目錄的路徑,對該目錄進行創建和刪除操作。創建目錄時,如果目錄文件所在目錄不存在則自動創建相應目錄;刪除目錄時,由用戶指定當該目錄不為空時是否還刪除該目錄(以操作 empty 文件夾為例),創建目錄操作命令如下:
./bin/hdfs dfs -mkdir empty
具體如下圖所示:
刪除目錄操作命令如下:
./bin/hdfs dfs -rm -r empty
具體如下圖所示:
3.2.8、向 HDFS 中指定的文件追加內容
向 HDFS 中指定的文件追加內容,由用戶指定內容追加到原有文件的開頭或結尾。
我們先在本地 /home/bailu 下創建 test.txt 文件,并添加內容如下圖所示:
將 test.txt 文件上傳至 HDFS 文件系統 /user/bailu/input 目錄下,具體如下圖所示:
追加 test.txt 文件至 myLocalFile.txt 文件后,命令如下:
./bin/hdfs dfs -appendToFile test.txt input/myLocalFile.txt
具體如下圖所示:
3.2.9、刪除 HDFS 中指定的文件
刪除 HDFS 中指定的文件 test.txt,命令如下:
./bin/hdfs dfs -rm input/test.txt
具體如下圖所示:
3.2.10、刪除 HDFS 中指定的目錄
刪除 HDFS 中指定的目錄,由用戶指定目錄中如果存在文件時是否刪除目錄(以操作 empty 目錄為例),先創建 empty 目錄,命令如下:
./bin/hdfs dfs -mkdir empty
具體如下圖所示:
刪除 empty 目錄,命令如下:
./bin/hdfs dfs -rm -r empty
具體如下圖所示:
3.2.11、將文件從源路徑移動到目的路徑
在 HDFS 中,將文件從源路徑移動到目的路徑(以把 input 下的 myLocalFile.txt 文件移動到 empty 文件夾為例),命令如下:
./bin/hdfs dfs -mv input/myLocalFile.txt empty
具體如下圖所示:
總結
本文通過使用 HDFS 文件系統對目錄和文件兩大結構類型進行了增刪改查的基本操作,幫助初學者進一步鞏固 HDFS 的實驗操作,為之后的學習奠定基礎。初學的同學可能會覺得甚是繁瑣,命令比較多,熟能生巧即可。我是白鹿,一個不懈奮斗的程序猿。望本文能對你有所裨益,歡迎大家的一鍵三連!若有其他問題、建議或者補充可以留言在文章下方,感謝大家的支持!