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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

简单的HDFS操作

發布時間:2025/3/21 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 简单的HDFS操作 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

簡單的HDFS操作

文章目錄

  • 簡單的HDFS操作
    • HDFS常用Shell命令
    • 使用HDFS的Shell命令
        • 輸出HDFS某一個目錄下所有文件詳細信息
        • 向HDFS中上傳任意文本文件
        • 將HDFS中指定文件的內容輸出到終端
        • 從HDFS中下載指定文件
        • 刪除HDFS中指定的文件
    • HDFS常用JavaAPI
    • 使用HDFS的JavaAPI
        • 創建工程并導入JAR包
        • 向HDFS上傳任意文本文件
        • 從HDFS下載指定文件
    • 參考文章

HDFS常用Shell命令

操作 HDFS的 Shell命令有三種:

  • hadoop fs (適用于任何不同的文件系統,比如本地文件系統和 HDFS文件系統)
  • hadoop dfs (只適用于 HDFS文件系統)
  • hdfs dfs (只適用于 HDFS文件系統)
  • 官方并不推薦使用第二種命令 hadoop dfs,有些 Hadoop版本中已將這種命令棄用。

    Shell命令語法如下

    hadoop fs [genericOptions] [commandOptions]

    HDFS常用命令說明
    hadoop fs -ls 顯示指定文件的詳細信息
    hadoop fs -cat 將指定文件的內容輸出到標準輸出
    hadoop fs touchz 創建一個指定的空文件
    hadoop fs -mkdir [-p] 創建指定的一個或多個文件夾,-p選項用于遞歸創建
    hadoop fs -cp 將文件從源路徑復制到目標路徑
    hadoop fs -mv 將文件從源路徑移動到目標路徑
    hadoop fs -rm 刪除指定的文件,只刪除非空目錄和文件
    hadoop fs -rm -r 刪除指定的文件夾及其下的所有文件,-r表示遞歸刪除子目錄
    hadoop fs -chown 改變指定文件的所有者為,該命令僅適用于超級用戶
    hadoop fs -chmod 將指定的文件權限更改為,該命令僅適用于超級用戶和文件所有者
    hadoop fs -get 復制指定的文件到本地文件系統指定的文件或文件夾
    hadoop fs -put 從本地文件系統中復制指定的單個或多個源文件到指定的目標文件系統
    hadoop fs -moveFromLocal 與put命令功能相同,但是文件上傳結束后會刪除源文件
    hadoop fs -copyFromLocal 將本地源文件復制到路徑指定的文件或文件夾中
    hadoop fs -copyToLocal 將目標文件復制到本地文件或文件夾中

    使用HDFS的Shell命令

    輸出HDFS某一個目錄下所有文件詳細信息

    我的 Hadoop版本為 Hadoop3.1.3。首先,我們先開啟 Hadoop集群

    cd $HADOOP_HOME ./sbin/start-dfs.sh

    如果沒有配置環境變量 HADOOP_HOME,請把上面命令中的 HADOOP_HOME改成你本地 Hadoop的安裝位置。

    第一次使用HDFS時,需要首先在HDFS中創建用戶目錄。我們建立用戶目錄/user/hadoop。

    ./bin/hdfs dfs –mkdir –p /user/hadoop

    用戶目錄的名字自己可以隨意擬定,因為我現在使用的用戶名是 hadoop,所以我的用戶目錄順便也叫 hadoop。

    用戶目錄建立完成后,所有的操作都會在用戶目錄上進行。也就是說,現在用戶目錄就是當前 HDFS默認的操作路徑。例如,我們在 HDFS直接上建立文件夾 test,它的絕對路徑是 /user/hadoop/test。

    //下面兩個命令等價 ./bin/hdfs dfs –mkdir test ./bin/hdfs dfs –mkdir /user/hadoop/test

    我們在用戶目錄下建立input和output文件夾,并創建一個abc.txt文件。

    ./bin/hdfs dfs -mkdir input output ./bin/hdfs dfs touchz abc.txt

    我們現在可以查看用戶目錄下所有文件的讀寫權限、大小、創建時間、路徑等信息。

    ./bin/hdfs dfs -ls .

    向HDFS中上傳任意文本文件

    我們在本地 home目錄中創建一個 myFile.txt文件,使用 vim編輯文件。

    cd ~ touch myFile.txt vim myFile.txt

    按 “i” 鍵進入編輯模式,隨便往文件里輸入一些字母,比如

    hadoop spark flink

    然后按 “esc” 鍵,輸入“:wq”保存并退出。

    然后我們使用 put命令,把 myFile.txt文件上傳到 HDFS用戶目錄的 input文件夾中。

    cd $HADOOP_HOME ./bin/hdfs dfs -put ~/myLocalFile.txt input

    我們可以使用 ls命令查看一下文件是否成功上傳到HDFS中

    ./bin/hdfs dfs –ls input

    可以看到,myFile.txt文件已經在 input文件夾中。

    將HDFS中指定文件的內容輸出到終端

    我們使用 cat命令即可查看 HDFS中 myFile.txt文件的內容

    ./bin/hdfs dfs -cat input/myFile.txt

    從HDFS中下載指定文件

    我們使用 get命令將剛才上傳的 myFile.txt文件下載到本地 home/Videos目錄中

    ./bin/hdfs dfs -get input/myFile.txt ~/Videos

    同樣地,使用 ls命令查看是否下載成功

    cd ~/Videos ls

    刪除HDFS中指定的文件

    我們使用 rm 命令刪除 input文件夾,以及該文件夾下的所有文件

    cd $HADOOP_HOME ./bin/hdfs dfs -rm -r input

    然后用 ls命令查看用戶目錄,判斷是否刪除成功

    ./bin/hdfs dfs -ls .

    HDFS常用JavaAPI

    Hadoop本身使用 Java語言編寫的,Hadoop不同的文件系統之間可以通過調用 JavaAPI來進行交互。Shell命令本質上就是 JavaAPI的應用。

    HDFS常用 JavaAPI說明
    org.apache.hadoop.fs.FileSystem一個通用文件系統的抽象基類,可以被分布式文件系統繼承。所有可能使用 Hadoop文件系統的代碼都要使用這個類。
    org.apache.hadoop.fs.FileStatus一個接口,用于向客戶端展示系統中文件和目錄的元數據,具體包括文件大小、塊大小、副本信息、所有者、修改時間等。
    org.apache.hadoop.fs.FSDataInputStream文件輸入流,用于讀取 Hadoop文件
    org.apache.hadoop.fs.FSDataOutputStream文件輸入流,用于寫 Hadoop文件
    org.apache.hadoop.conf.Configuration訪問配置項
    org.apache.hadoop.fs.Path用于表示 Hadoop文件系統中的一個文件或一個目錄的路徑

    使用HDFS的JavaAPI

    創建工程并導入JAR包

    這里我們使用的是 Ubuntu16.04系統,IDE是 Eclipse。如果沒有在 Ubuntu系統上安裝 Eclipse的,請參考這篇博客進行安裝 Ubuntu16.04系統安裝Eclipse

    啟動 Eclipse,在菜單欄選擇 “File”->“New”->“Java Project”,創建新的 Java項目。

    根據個人喜好輸入工程名稱,這里我們輸入“HDFS_Practice”。勾選“Use default location”,讓工程文件保存在我們設置的 Eclipse的工作區里。JRE部分選擇“Use a project specific JRE”,使用我們自己安裝的 JDK版本。然后點擊“next”,進入下一步。

    我們需要為項目導入必要的 JAR包,這些 JAR包中包含了可以訪問 HDFS的 Java API。JAR包的位置在“Hadoop安裝目錄/share/hadoop”目錄下。比如我的是在“/usr/local/hadoop/share/hadoop”目錄下,下面的操作中請選擇到自己配置的 hadoop目錄下導入 JAR包。

    我們點擊標題欄的“Libraries”,點擊“Add Externtal JARs”

    在新的彈窗中,我們通過選擇上面的文件目錄,進入“/usr/local/hadoop/share/hadoop”目錄,記住是進入自己的Hadoop安裝目錄

    我們需要向 Java工程中添加以下 JAR包:

    • “/usr/local/hadoop/share/hadoop/common”目錄下的所有 JAR包,即 hadoop-common-3.1.3.jar、hadoop-common-3.1.3-tests.jar、haoop-nfs-3.1.3.jar和、haoop-kms-3.1.3.jar,不包括 jdiff、lib、sources、webapps四個文件夾。
    • “/usr/local/hadoop/share/hadoop/common/lib”目錄下的所有 JAR包
    • “/usr/local/hadoop/share/hadoop/hdfs”目錄下的所有 JAR包。同樣地,不包括 jdiff、lib、sources、webapps四個文件夾。
    • “/usr/local/hadoop/share/hadoop/hdfs/lib”目錄下的所有 JAR包

    我們分四次操作,把需要的 JAR包全部導入進來(lib目錄下的 JAR包太多,我們可以使用 Ctrl+A快捷鍵進行全選)。所需的 JAR包全部添加完畢以后,我們點擊右下角的“Finish”,完成 Java工程的創建。

    如果是第一次使用 Eclipse來操作 HDFS,我們還需要去關閉 HDFS的權限檢測。因為 HDFS的權限檢測機制默認是打開的,未關閉的時候,不能使用 eclipse插件對 HDFS上的文件進行操作,比如上傳,刪除等。我們先關閉 HDFS服務,然后在 hdfs-site.xml文件中加入一個變量 dfs.permissions,值設置為 false,用來其關閉權限檢測。

    我們先進入 home folder(也就是文件管理器),點擊右上角的更多按鈕,選擇“Enter Location”

    然后彈出的搜索框中輸入“hadoop安裝目錄/etc/hadoop”,回車進入目錄,然后找到 hdfs-site.xml,鼠標右鍵點擊文件,選擇“Open with”->“vim”進行編輯。

    輸入以下代碼并保存。

    <property><name>dfs.permissions</name><value>false</value> </property>

    因為我們是偽分布式模式運行 Hadoop,我們還需要將“hadoop安裝目錄/etc/hadoop”目錄下的 core-site.xml、hdfs-site.xml這兩個文件拷貝到 eclipse工作區中該工程的 bin文件夾下。

    向HDFS上傳任意文本文件

    我們開始新建一個 Java程序,在 Eclipse界面左側找到我們剛才創建的項目,點擊鼠標右鍵,選擇“New”->“Class”。

    因為我們想要向 HDFS上傳任意文本文件,所以我們取名為“uploadFile”,其他設置保持默認,點擊“Finish”。

    創建程序完成后,界面如下

    接下來,我們開始編寫往 HDFS中上傳文件的 Java程序。

    import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path;public class uploadFile {public static void main(String[] args) {try {/*配置參數*/Configuration conf = new Configuration(); //實例化配置對象URI uri = new URI("hdfs://localhost:9000"); //指定偽分布式模式FileSystem fs = FileSystem.get(uri, conf, "hadoop"); //獲取文件系統對象,三個參數分別綁定uri,conf,當前用戶賬戶/*指定源文件和上傳目錄*/String srcFile = "/home/hadoop/myFile.txt"; //本地目錄String dstDir = "/user/hadoop/"; //hdfs用戶目錄Path src = new Path(srcFile); //綁定Path路徑Path dst = new Path(dstDir);/*上傳文件*/fs.copyFromLocalFile(src, dst); //調用copyFromLocal命令fs.close(); //關閉文件系統對象} catch (Exception e) {e.printStackTrace();}} }

    源文件是我已經提前編寫好放在 /home/hadoop/目錄下的 myFile.txt,待上傳的目錄 /user/hadoop也是之前創建好的。

    在開始編譯運行程序之前,請一定確保 Hadoop已經啟動運行,如果還沒有啟動,請打開一個 Linux終端,輸入命令啟動 Hadoop

    cd $HADOOP_HOME ./sbin/start-dfs.sh

    按快捷鍵“Ctrl+S”保存一下代碼,接下來我們開始編譯運行 Java程序。我們點擊 Eclipse菜單欄上的運行按鈕,選擇“Run as”->“Java Application”。或者我們也可以使用快捷鍵“Ctrl+F11”直接運行。

    程序運行結束后,底部的“Console”控制臺會彈出運行信息,我們可以根據運行信息來判斷程序是否成功執行。

    如果遇到“log4j:WARN···”之類的警告信息,將 “hadoop安裝目錄/etc/hadoop”目錄下的 log4j.properties文件復制到項目的 bin文件夾下,重新運行即可。

    如果在控制臺上看到這個提示信息,則證明文件上傳成功。

    INFO sasl.SaslDataTransferClient: SASL encryption trust check: localHostTrusted = false, remoteHostTrusted = false

    我們看到,雖然程序運行沒有問題,但是多了一個警告,說是不能加載 native-hadoop庫。

    Unable to load native-hadoop library for your platform… using builtin-java classes where applicable

    這是因為我們修改配置文件的時候少配置了 native路徑,系統加載不到這些庫文件。具體解決辦法請參考這篇博客 Hadoop之Unable to load native-hadoop library問題解決

    言歸正傳,我們現在通過 terminal終端,驗證一下文件是否上傳成功。

    cd $HADOOP_HOME ./bin/hdfs dfs -ls .

    可以看到,HDFS的用戶目錄 /user/hadoop下已經有了 myFile.txt文件。

    我們也可以通過 Web界面來查看 HDFS的文件,進行驗證。打開 Ubuntu自帶的 FireFox瀏覽器,在地址欄輸入“localhost:9870”,回車,進入 HDFS的 WebUI。點擊標題欄右側的“Utilities”,選擇“Browse the file system”

    在下方目錄搜索欄中輸入“/user/hadoop”,然后回車。可以看到,此時 HDFS的用戶目錄下的確存在 myFile.txt文件,通過 Java API向 HDFS 上傳文件成功。

    從HDFS下載指定文件

    同理,我們新建 Java程序 downloadFile.java,使用 Java API編寫程序從 HDFS下載文件。我們就將剛才上傳的 myFile.txt文件,從 HDFS中下載到本地桌面上。

    import java.net.URI;import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path;public class downloadFile {public static void main(String[] args) {try {//set configurationsConfiguration conf = new Configuration();URI uri = new URI("hdfs://localhost:9000");FileSystem fs = FileSystem.get(uri, conf, "hadoop");//set File and DirString srcFile = "/user/hadoop/myFile.txt";String dstDir = "/home/hadoop/Desktop/";Path src = new Path(srcFile);Path dst = new Path(dstDir);//downloadfs.copyToLocalFile(src, dst);fs.close();} catch (Exception e) {e.printStackTrace();}} }

    保存代碼,然后我們開始編譯運行 Java程序。同樣地,看到提示信息,證明文件下載成功。

    INFO sasl.SaslDataTransferClient: SASL encryption trust check: localHostTrusted = false, remoteHostTrusted = false

    我們回到桌面上,可以看到,桌面上已經有了 myFile.txt文件,通過 Java API從 HDFS 下載文件成功。

    參考文章

    HDFS編程實踐(Hadoop3.1.3)

    通過JAVA API 來操作HDFS

    使用Java API操作hdfs

    eclipse控制臺打印log4j警告

    總結

    以上是生活随笔為你收集整理的简单的HDFS操作的全部內容,希望文章能夠幫你解決所遇到的問題。

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