Hadoop大數據開發基礎系列:三、Hadoop基礎操作


第三章、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編程入門 ^_^ 。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM