第三章、Hadoop基礎操作
目錄結構:
1.查看Hadoop集群的基本信息
1.1 查詢集群的存儲系統信息
1.2 查詢系統的計算資源信息
2.上傳文件到HDFS目錄
2.1 了解HDFS文件系統
2.2 掌握HDFS的基本操作
2.3 任務實現
3.運行首個MapReduce任務
3.1 了解Hadoop官方的示例程序包
3.2 提交MapReduce任務給集群運行
4.管理多個MapReduce任務
4.1 查詢MapReduce任務
4.2 中斷MapReduce任務
5.小結
6.課后練習
主要背景:是統計某網站的用戶登錄次數,整個任務體系包括檢查Hadoop集群資源、文件存儲、分布式計算調用及任務監控等。
1.查看Hadoop集群的基本信息
Hadoop集群的數據存儲是通過HDFS來實現的。HDFS是由一個NameNode和多個DataNode組成,構成了一個分布式的文件系統。通常有兩種方式查看HDFS文件系統的信息,分別是命令行方式和瀏覽器方式。
Hadoop集群的計算資源也是分布在集群的各個節點上,通過ResourceManager與NodeManager來協同調配。一般可以通過瀏覽器訪問ResourceManager的監控服務來查詢Hadoop集群的計算資源。
1.1 查詢集群的存儲系統信息
(1)HDFS的監控服務通過NameNode的端口50070來訪問,我們可以通過此界面看到運行情況
(2)通過命令行也可以查詢HDFS信息。在集群服務器的終端,輸入相關查詢命令
hdfs dfsadmin -report [-live] [-dead] [-decommissioning]
-live 輸出在線節點基本信息及相關數據統計
-dead 輸出失效節點的基本信息及相關數據統計
-decommissioning 停用節點的基本信息及相關數據統計
1.2 查詢系統的計算資源信息
(1)通過ResourceManager可以方便地查詢目前集群上的計算資源信息。進入8088端口:
(2)進入8042端口查看節點的各項資源信息:
根據以上顯示的信息,就可以初步了解到當前集群的計算資源情況,主要包括集群上的可用計算節點、可用CPU核心與內存,以及各個節點自身的CPU及內存資源。
2.上傳文件到HDFS目錄
2.1 了解HDFS文件系統
HDFS是一個類Linux的獨立的文件系統,其跟我們的了解操作系統目錄類似。(可以通過web端查看文件目錄信息)
2.2 掌握HDFS的基本操作
對於HDFS文件系統的基本操作,可以通過HDFS命令來實現,在終端,輸入“hdfs dfs”命令,就可以完成對HDFS目錄及文件的大部分管理操作,包括創建新目錄、上傳與下載文件、查看文件內容、刪除文件等。
(1)創建新目錄/user/dfstest
直接在終端輸入 hdfs dfs 就可以得到提示的命令:
然后我們執行創建目錄路徑的命令:
注意,此命令只能主機創建目錄,所以我們可以加-p來補全中間並不存在的目錄結構:
hdfs dfs -mkdir -p /user/test/example
然后我們在根目錄下查看一下我們創建的hdfs文件目錄:
hdfs dfs -ls [path] //因為hdfs文件系統不同於Linux,所以要用hdfs命令才能看到
//一定要注意一下,如果沒有指定path,系統會自動的定向到path=/home/[username],因為我們並沒有此目錄,所以系統找不到,我們要指定path,根目錄就直接用 / 即可。
(2)上傳文件與下載文件
再創建一個新的文件夾,用於做測試
①上傳文件
測試任務:利用 hdfs 命令把集群服務器節點上的本地文件 test1.txt 上傳到 HDFS目錄 /user/dfstest中
命令:
hdfs dfs [-copyFromLocal [-f][-p][-l] <localsrc> <dst> ]
//將文件從本地系統復制到HDFS文件系統,主要參數<localsrc>為本地路徑,<dst>為要復制到的目的路徑
hdfs dfs [-moveFromLocal <localsrc> <dst>]
//將文件從本地文件系統移動到HDFS文件系統,主要參數<localsrc>為本地路徑,<dst>為要移動到的目的路徑
hdfs dfs [-put [-f][-p][-l] <localsrc> <dst>]
//將文件從本地文件系統上傳到HDFS文件系統,主要參數<localsrc>為本地路徑,<dst>為要上傳到的目的路徑
②下載文件
同樣,我們也可以從HDFS中下載需要的文件
命令:
hdfs dfs [-copyTolocal [-p][-ignoreCrc][-crc] <src> <localdst>]
//將文件從HDFS文件系統復制到本地文件系統,主要參數<src>為HDFS文件系統路徑,<localdst>為本次存放文件路徑
hdfs dfs [-get [-p][-ignoreCrc][-crc] <src> <localdst>]
//獲取HDFS文件系統上指定路徑的文件到本地文件系統,主要參數<src>為HDFS文件系統路徑,<localdst>為本次存放文件路徑
(3)查看文件內容
查看HDFS系統中的文件內容:
命令:
hdfs dfs [-cat [-ignoreCrc] <src>]
//查看HDFS文件內容,<src>指定文件路徑
hdfs dfs [-tail [-f] <file>]
//查看HDFS最后1024字節,<file>指定文件路徑
示例:
(4)刪除文件或目錄
hdfs dfs [-rm [-f][-r][-skipTrash] <src>]
//刪除HDFS上的文件,主要參數-r用於遞歸刪除,<src>指定刪除的文件路徑
hdfs dfs [-rmdir [--ignore-fail-on-non-empty] <dir>]
//如果刪除的是一個目錄,可以用此命令,主要參數<dir>指定目錄路徑
示例:
2.3 任務實現
(1)把email_log.txt傳輸到master的/testhadoop目錄下
(2)將文件上傳到HDFS文件系統的/user/dftest目錄下
(3)在web端單擊 email_log.txt 檢查文件內容
我們可以看到文件分為兩個塊來存儲(文件大小216M),每個文件塊都有3個副本,分別存儲在3個不同的數據節點上。
3.運行首個MapReduce任務
要求對HDFS文件目錄中的數據文件/user/root/email_log.txt進行計算處理,統計出每個用戶的登錄次數,即可以等同於求出每個email出現的次數,可以進一步抽象為統計每個單詞出現的頻次。在Hadoop集群上執行程序包,即提交一個MapReduce任務,通常使用hadoop jar命令完成。
3.1 了解Hadoop官方的示例程序包
在集群服務器本地目錄:“$HADOOP_HOME/share/hadoop/mapreduce/ ”中可以發現示例程序包 “hadoop-mapreduce-examples-2.7.7.jar”,這個程序包封裝了一些常用的測試模塊,內容如下:
multifilewc |
統計多個文件中單詞的數量 |
pi |
應用quasi-Monte Carlo算法來估算圓周率π的值 |
randomtextwriter |
在每個數據節點隨機生成一個10GB的文本文件 |
wordcount |
對輸入文件的單詞進行頻次統計 |
wordmean |
計算輸入文件中單詞的平均長度 |
wordmedian |
計算輸入文件中單詞長度的中位數 |
wordstandarddeviation |
計算輸入文件中單詞長度的標准差 |
在本次測試中,使用wordcount對email_log.txt文件中的數據進行登錄次數統計。
3.2 提交MapReduce任務給集群運行
(1) 提交MapReduce任務時,hadoop jar 命令用法:
hadoop jar <jar> [mainClass] args
下面結合實例來對各個參數進行說明:
hadoop jar hadoop-mapreduce-examples-2.7.7.jar wordcount /user/dftest/email_log.txt /user/dftest/output
//<jar>是jar包的位置,[mainClass是指要使用的已封裝好的類],args可以指定一些讀取文件和輸出文件的存放目錄。
(2)運行日志如下:
(3)結果查看:
我們可以看到,在output文件中生成了兩個新文件:一個是_SUCCESS,這是一個標識文件,表示這個任務執行完成;另一個是part-r-00000,即任務執行完成后產生的結果文件。
查看part-r-00000內容:
任務基本完成 ^_^ 。
4.管理多個MapReduce任務
Hadoop是一個多任務系統,可以同時為多個用戶、多個作業處理多個數據集。對於提交到Hadoop集群的多個任務,如何進行管理呢,比如:如何知道集群完成了哪些任務;執行結果是成功還是失敗;怎么檢查任務的實際執行情況;如果某個任務執行時間過長,如何中斷它?
4.1 查詢MapReduce任務
(1)本例中用示例程序包內的PI類來執行估計π的值
hadoop jar hadoop-mapreduce-examples-2.7.7.jar pi 10 100
//后面兩個參數代表Map數量與每個Map的測算次數,參數的值越大,計算出來的結果精度越高
(2)執行日志:
(3)查看剛剛提交的MapReduce任務的計算資源使用情況:
①在此頁面我們可以實時看到集群資源的使用情況(因為執行完成,所以參數為初始參數)
②資源管理器顯示的MapReduce任務列表:
③查看任務的詳細信息:
(4)提交多任務:
同時啟動集群的兩個服務器終端,依次提交兩個作業:wordcount和計算pi值
我們可以觀察集群上的計算資源使用情況,有一個作業在運行中,占用了大部分的計算資源,另一個作業在等待狀態(等待給它分配計算資源,當計算資源滿足后,它才會開始執行)。
4.2 中斷MapReduce任務
對已提交的MapReduce任務,在某些特殊情況下需要中斷它,比如發現程序有異常、某個任務執行時間過長、占用大量計算資源等。
可以通過web界面上面的Application 頁面選擇界面上的選項“Kill Application”,選擇確定即可中斷該任務,再次刷新頁面可以看到該任務已被終止,等待中的任務執行。
5.小結
本章主要介紹了Hadoop的基礎操作知識,結合實際任務及多個實例,使我對Hadoop集群的文件操作系統與計算資源,以及提交MapReduce任務有了初步的了解。
6.小練習
(1)以 hadoop jar 提交MapReduce任務時,如果命令行中指定的輸出目錄已經存在,執行的結果將會是:C
A.覆蓋原目錄 B.自動創建新目錄 C. 報錯並終止任務 D. 以上都不是
下一章將介紹MapReduce編程入門 ^_^ 。