大資料平台技術之HDFS檔案系統操作與程式設計

2021-10-04 20:00:14 字數 4151 閱讀 5129

實驗目的:

(1)hdfs基本目錄操作;

(2)hdfs檔案操作。

前提:系統已經進行了hadoop偽分布式配置!!!!

執行./sbin/start-dfs.sh啟動 hadoop

可以通過命令jps判斷是否啟動成功

若成功啟動則會列出如下程序: 「namenode」、」datanode」 和 「secondarynamenode」

grep 例子讀取的是本地資料,偽分布式讀取的則是 hdfs 上的資料。要使用 hdfs,首先需要在 hdfs 中建立使用者目錄:

./bin/hdfs dfs -mkdir -p /user/hadoop
接著將 ./etc/hadoop 中的 xml 檔案作為輸入檔案複製到分布式檔案系統中,即將 /usr/local/hadoop/etc/hadoop 複製到分布式檔案系統中的 /user/hadoop/input 中。我們使用的是 hadoop 使用者,並且已建立相應的使用者目錄 /user/hadoop ,因此在命令中就可以使用相對路徑如 input,其對應的絕對路徑就是 /user/hadoop/input:

./bin/hdfs dfs -mkdir input

./bin/hdfs dfs -put ./etc/hadoop/*.xml input

複製完成後,可以通過如下命令檢視檔案列表:

偽分布式執行 mapreduce 作業的方式跟單機模式相同,區別在於偽分布式讀取的是hdfs中的檔案(可以將單機步驟中建立的本地 input 資料夾,輸出結果 output 資料夾都刪掉來驗證這一點)。

檢視執行結果的命令(檢視的是位於 hdfs 中的輸出結果):

./bin/hdfs dfs -cat output/*
結果如下,注意到剛才我們已經更改了配置檔案,所以執行結果不同。

我們也可以將執行結果取回到本地:

rm -r ./output    # 先刪除本地的 output 資料夾(如果存在)

./bin/hdfs dfs -get output ./output # 將 hdfs 上的 output 資料夾拷貝到本機

cat ./output/*

hadoop 執行程式時,輸出目錄不能存在,否則會提示錯誤 「org.apache.hadoop.mapred.filealreadyexist***ception: output directory hdfs://localhost:9000/user/hadoop/output already exists」 ,因此若要再次執行,需要執行如下命令刪除 output 資料夾:

./bin/hdfs dfs -rm -r output    # 刪除 output 資料夾

若要關閉 hadoop,則執行

需要注意的是,hadoop系統安裝好以後,第一次使用hdfs時,需要首先在hdfs中建立使用者目錄。本教程全部採用hadoop使用者登入linux系統,因此,需要在hdfs中為hadoop使用者建立乙個使用者目錄,命令如下:

cd /usr/local/hadoop

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

該命令中表示在hdfs中建立乙個「/user/hadoop」目錄,「–mkdir」是建立目錄的操作,「-p」表示如果是多級目錄,則父目錄和子目錄一起建立,這裡「/user/hadoop」就是乙個多級目錄,因此必須使用引數「-p」,否則會出錯。

「/user/hadoop」目錄就成為hadoop使用者對應的使用者目錄,可以使用如下命令顯示hdfs中與當前使用者hadoop對應的使用者目錄下的內容:

./bin/hdfs dfs –ls .
該命令中,「-ls」表示列出hdfs某個目錄下的所有內容,「.」表示hdfs中的當前使用者目錄,也就是「/user/hadoop」目錄,因此,上面的命令和下面的命令是等價的:

./bin/hdfs dfs –ls /user/hadoop
如果要列出hdfs上的所有目錄,可以使用如下命令:

./bin/hdfs dfs –ls
下面,可以使用如下命令建立乙個input目錄

./bin/hdfs dfs –mkdir input
在建立個input目錄時,採用了相對路徑形式,實際上,這個input目錄建立成功以後,它在hdfs中的完整路徑是「/user/hadoop/input」。如果要在hdfs的根目錄下建立乙個名稱為input的目錄,則需要使用如下命令:

./bin/hdfs dfs –mkdir /input
可以使用rm命令刪除乙個目錄,比如,可以使用如下命令刪除剛才在hdfs中建立的「/input」目錄(不是「/user/hadoop/input」目錄):

./bin/hdfs dfs –rm –r /input
上面命令中,「-r」引數表示如果刪除「/input」目錄及其子目錄下的所有內容,如果要刪除的乙個目錄包含了子目錄,則必須使用「-r」引數,否則會執行失敗。

然後,可以使用如下命令把本地檔案系統的「/home/hadoop/mylocalfile.txt」上傳到hdfs中的當前使用者目錄的input目錄下,也就是上傳到hdfs的「/user/hadoop/input/」目錄下:

./bin/hdfs dfs -put /home/hadoop/mylocalfile.txt  input
可以使用ls命令檢視一下檔案是否成功上傳到hdfs中,具體如下:

下面使用如下命令檢視hdfs中的mylocalfile.txt這個檔案的內容:

./bin/hdfs dfs –cat input/mylocalfile.txt

$ cd ~

$ ls

$ cat mylocalfile.txt

最後,了解一下如何把檔案從hdfs中的乙個目錄拷貝到hdfs中的另外乙個目錄。比如,如果要把hdfs的「/user/hadoop/input/mylocalfile.txt」檔案,拷貝到hdfs的另外乙個目錄「/input」中(注意,這個input目錄位於hdfs根目錄下),可以使用如下命令:

大資料全系技術概覽

大資料 big data 指無法在一定時間範圍內用常規軟體工具進行捕捉 管理和處理的資料集合,是需要新處理模式才能具有更強的決策力 洞察發現力和流程優化能力的海量 高增長率和多樣化的資訊資產。在維克托 邁爾 捨恩伯格及肯尼斯 庫克耶編寫的 大資料時代 中大資料指不用隨機分析法 抽樣調查 這樣捷徑,而...

大資料 hdfs 檔案限額配置 小記

hdfs檔案限額配置允許我們以檔案大小或者檔案個數來限制某個目錄下上傳的檔案數量或者檔案的內容總量 hdfs dfs mkdir p user root lisi 建立hdfs資料夾 hdfs dfsadmin setquota 50 lisi 給該資料夾下面設定最多上傳49個檔案,還有乙個檔案是l...

hdfs讀寫流程 大資料實戰之HDFS讀寫流程

hdfs是乙個分布式檔案系統,其中最需要關注的就是讀寫流程了,寫流程比讀流程更快,下面分別講解寫和讀的細節。一.hdfs寫流程 1 首先,客戶端利用hdfs client建立了distributed filesystem例項,再通過 distributed filesystem向namenode發起...