PATH=PATH:PATH:PATH:/bin:$/sbin
這里創建的 用戶,就是以后管理 平臺的管理員用戶,所有對 的管理操作都需要通過這個用戶來完成,這一點需注意。
另外,在配置的環境變量中,以下兩個要特別注意,如果沒有配置或者配置錯誤,將導致某些服務無法啟動:
到這里為止, 已經基本安裝完成了,是不是很簡單!
配置 參數
安裝完成后,先來了解一下其安裝目錄下幾個重要的目錄和文件,這里將 安裝在了 /opt// 目錄下,打開這個目錄分布式文件系統有哪些,需要掌握的幾個目錄如下表所示:
了解完目錄的功能后,就開始進行配置操作了, 的配置相當復雜,不過這些是后面要講的內容。而在偽分布模式下,僅僅需要修改一個配置文件即可,該文件是 core-site.xml,此文件目前位于 /etc//conf 目錄下,在此文件 標簽下增加如下內容:
<property>
<name>fs.defaultFSname>
<value>hdfs://hadoop3servervalue>
property>
其中,fs. 屬性描述的是訪問 HDFS 文件系統的 URI 加一個 RPC 端口, 不加端口的話,默認是 8020。另外, 可以是服務器的主機名,也可以是任意字符,但都需要將此標識在服務器的 /etc/hosts 進行解析,也就是添加如下內容:
172.16.213.232 hadoop3server
這里的 172.16.213.232 就是安裝 軟件的服務器 IP 地址。
啟動 服務
配置操作完成后,下面就可以啟動 服務了,雖然是偽分布模式,但 所有的服務都必須要啟動,需要啟動的服務有如下幾個。
服務的功能和用途,先介紹這么多,后面將會進行更深入的闡述。接下來,要啟動 集群的服務,必須以 用戶來執行,并且每個服務的啟動是有先后順序的,下面依次啟動每個服務。
(1)啟動 服務
首先需要對 進行格式化,命令如下:
[root@hadoop3server ~]#su - hadoop
[hadoop@hadoop3server ~]$ cd /opt/hadoop/current/bin
[hadoop@hadoop3server bin]$ hdfs namenode -format
然后就可以啟動 服務了,操作過程如下:
[hadoop@hadoop3server conf]$ hdfs --daemon start namenode
[hadoop@hadoop3server conf]$ jps|grep NameNode
27319 NameNode
通過 jps 命令查看 進程是否正常啟動,如果無法正常啟動,可以查看 啟動日志文件,檢查是否有異常信息拋出,這里的日志文件路徑是:/opt///logs/---.log。
啟動完成后,就可以通過 Web 頁面查看狀態了,默認會啟動一個 http 端口 9870,可通過訪問地址::9870 查看 服務狀態,如下圖所示:
在上圖中,紅框標注的幾個重點信息需要關注,第一個是 中 的訪問地址為 hdfs://:8020,這是我們在配置文件中指定過的;另外還有 的版本、運行模式、容量、“Live node”及“Dead node”,下面逐個解釋。
運行模式顯示“Safe mode is ON”,這表示目前 處于安全模式下了,為什么呢,其實圖中已經說明原因了, 在啟動時,會檢查 的狀態,如果 上報的 block 個數達到了元數據記錄的 block 個數的 0.999 倍才可以離開安全模式,否則一直運行在安全模式。安全模式也叫只讀模式,此模式下,對 HDFS 上的數據無法進行寫操作。因為現在還沒啟動 服務,所以肯定是處于安全模式下。
HDFS 容量, 目前顯示為 0,這也是因為還沒啟動 服務導致的,等啟動后,應該就有容量顯示了。
“Live node”及“Dead node”分別顯示目前集群中活躍的 節點和故障(死) 節點,運維經常通過監控這個頁面中“Dead node”的值來判斷集群是否出現異常。
(2)啟動 服務
在 服務啟動完成后,就可以啟動 服務了,直接執行如下命令:
[hadoop@hadoop3server ~]$ hdfs --daemon start secondarynamenode
[hadoop@hadoop3server ~]$ jps|grep SecondaryNameNode
29705 SecondaryNameNode
與 類似,如果無法啟動 進程,可以通過 /opt///logs/---.log 文件檢查 啟動日志中是否存在異常。
(3)啟動 服務
現在是時候啟動 服務了,直接執行如下命令:
[hadoop@hadoop3server ~]$ hdfs --daemon start datanode
[hadoop@hadoop3server ~]$ jps|grep DataNode
3876 DataNode
如果無法啟動,可通過查看 /opt///logs/---.log 文件檢查 啟動過程是否存在異常。
到這里為止,分布式文件系統 HDFS 服務已經啟動完成,可以對 HDFS 文件系統進行讀、寫操作了。現在再次通過 :9870 查看 服務狀態頁面,如圖所示:
從圖中可以看出,HDFS 集群中安全模式已經關閉,并且集群容量和活躍節點已經有數據了,這是因為 服務已經正常啟動了。
(4)啟動 服務
接下來,還需要啟動分布式計算服務,首先啟動的是 ,啟動方式如下:
[hadoop@hadoop3server ~]$ yarn --daemon start resourcemanager
[hadoop@hadoop3server ~]$ jps|grep ResourceManager
4726 ResourceManager
注意,啟動 服務的命令變成了 yarn,而不是 hdfs,記住這個細節。
同理,如果 進程無法啟動,可以通過檢查 /opt///logs/---.log 日志文件來排查 啟動問題。
服務啟動后,會默認啟動一個 http 端口 8088,可通過訪問 :8088 查看 的 Web 狀態頁面,如下圖所示:
在上圖中,需要重點關注的是 中可用的內存資源、CPU 資源數及活躍節點數,目前看來,這些數據都是 0,是因為還沒有 服務啟動。
(5)啟動 服務
在啟動完成 服務后,就可以啟動 服務了,操作過程如下:
[hadoop@hadoop3server ~]$ yarn --daemon start nodemanager
[hadoop@hadoop3server ~]$ jps|grep NodeManager
8853 NodeManager
如果有異常,可通過檢查 /opt///logs/---.log 文件來排查 問題。
(6)啟動 服務
等待 和 服務啟動完畢后,最后還需要啟動一個 服務,操作過程如下:
[hadoop@hadoop3server ~]$ mapred --daemon start historyserver
[hadoop@hadoop3server ~]$ jps|grep JobHistoryServer
1027 JobHistoryServer
注意,啟動 服務的命令變成了 ,而非 yarn。這是因為 服務是基于 的, 服務啟動后,會運行一個 http 端口,默認端口號是 19888,可以通過訪問此端口查看每個任務的歷史運行情況,如下圖所示:
至此, 偽分布式已經運行起來了,可通過 jps 命令查看各個進程的啟動信息:
[hadoop@hadoop3server ~]$ jps
12288 DataNode
1027 JobHistoryServer
11333 NameNode
1158 Jps
29705 SecondaryNameNode
18634 NodeManager
19357 ResourceManager
不出意外的話,會輸出每個服務的進程名信息,這些輸出表明 服務都已經正常啟動了。現在,可以在 下愉快的玩耍了。
運用 HDFS 命令進行分布式存儲
的 HDFS 是一個分布式文件系統,要對 HDFS 進行操作,需要執行 HDFS Shell,跟 Linux 命令很類似,因此,只要熟悉 Linux 命令,可以很快掌握 HDFS Shell 的操作。
下面看幾個例子,你就能迅速知道 HDFS Shell 的用法, 需要注意,執行 HDFS Shell 建議在 用戶或其他普用用戶下執行。
(1)查看 hdfs 根目錄數據,可通過如下命令:
[hadoop@hadoop3server ~]$ hadoop fs -ls /
通過這個命令的輸出可知,剛剛創建起來的 HDFS 文件系統是沒有任何數據的,不過可以自己創建文件或目錄。
(2)在 hdfs 根目錄創建一個 logs 目錄,可執行如下命令:
[hadoop@hadoop3server ~]$ hadoop fs -mkdir /logs
(3)從本地上傳一個文件到 hdfs 的 /logs 目錄下,可執行如下命令:
[hadoop@hadoop3server ~]$ hadoop fs -put /data/test.txt /logs
[hadoop@hadoop3server ~]$ hadoop fs -put /data/db.gz /logs
[hadoop@hadoop3server ~]$ hadoop fs -ls /logs
Found 2 items
-rw-r--r-- 3 hadoop supergroup 150569 2020-03-19 07:11 /logs/test.txt
-rw-r--r-- 3 hadoop supergroup 95 2020-03-24 05:11 /logs/db.gz
注意,這里的 /data/test.txt 及 db.gz 是操作系統下的一個本地文件,通過執行 put 命令,可以看到,文件已經從本地磁盤傳到 HDFS 上了。
(4)要查看 hdfs 中一個文本文件的內容,可執行如下命令:
[hadoop@hadoop3server ~]$ hadoop fs -cat /logs/test.txt
[hadoop@hadoop3server ~]$ hadoop fs -text /logs/db.gz
可以看到,在 HDFS 上的壓縮文件通過“-text”參數也能直接查看,因為默認情況下 會自動識別常見的壓縮格式。
(5)刪除 hdfs 上一個文件,可執行如下命令:
[hadoop@hadoop3server ~]$ hadoop fs -rm -r /logs/test.txt
注意,HDFS 上面的文件,只能創建和刪除,無法更新一個存在的文件,如果要更新 HDFS 上的文件,需要先刪除這個文件,然后提交最新的文件即可。除上面介紹的命令之外,HDFS Shell 還有很多常用的命令,這個在后面會有專門課時來講解。
在 中運行 程序
要體驗 的分布式計算功能,這里借用 安裝包中附帶的一個 的 demo 程序,做個簡單的 MR 計算。
這個 demo 程序位于 $/share// 路徑下,這個環境下的路徑為 /opt///share//,在此目錄下找到一個名為 ---3.2.1.jar 的 jar 文件,有了這個文件下面的操作就簡單多了。
單詞計數是最簡單也是最能體現 思想的程序之一,可以稱為 版“Hello World”,---3.2.1.jar 文件中包含了一個 功能,它主要功能是用來統計一系列文本文件中每個單詞出現的次數。下面開始執行分析計算。
(1)創建一個新文件
創建一個測試文件 demo.txt,內容如下:
Linux Unix windows
hadoop Linux spark
hive hadoop Unix
MapReduce hadoop Linux hive
windows hadoop spark
(2)將創建的文件存入 HDFS
[hadoop@hadoop3server ~]$ hadoop fs -mkdir /demo
[hadoop@hadoop3server ~]$ hadoop fs -put /opt/demo.txt /demo
[hadoop@hadoop3server ~]$ hadoop fs -ls /demo
Found 1 items
-rw-r--r-- 3 hadoop supergroup 105 2020-03-24 06:02 /demo/demo.txt
這里在 HDFS 上創建了一個目錄 /demo,然后將剛才創建好的本地文件 put 到 HDFS 上,這里舉例是一個文件,如果要統計多個文件內容,將多個文件都上傳到 HDFS 的 /demo 目錄即可。
(3)執行分析計算任務
下面開始執行分析任務:
[hadoop@hadoop3server ~]$ hadoop jar /opt/hadoop/current/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.1.jar wordcount /demo /output
[hadoop@hadoop3server ~]$ hadoop fs -ls /output
Found 2 items
-rw-r--r-- 3 hadoop supergroup 0 2020-03-24 06:05 /output/_SUCCESS
-rw-r--r-- 3 hadoop supergroup 61 2020-03-24 06:05 /output/part-r-00000
[hadoop@hadoop3server ~]$ hadoop fs -text /output/part-r-00000
Linux 3
MapReduce 1
Unix 2
hadoop 4
hive 2
spark 2
windows 2
在上面的操作中,通過執行“ jar”后面跟上 jar 包示例文件,并給出執行的功能是 ,即可完成任務的執行,請注意,最后的兩個路徑都是 HDFS 上的路徑,第一個路徑是分析讀取文件的目錄,必須存在;第二個路徑是分析任務輸出結果的存放路徑,必須不存在,分析任務會自動創建這個目錄。
任務執行完畢后,可以查看 / 目錄下有兩個文件,其中:
通過查看 part-r-00000 文件內容,可以看到 的統計結果。左邊一列是統計的單詞,右邊一列是在文件中單詞出現的次數。
(4)在 的 Web 頁面展示運行任務
細心的你可能已經發現了,上面在命令行執行的 統計任務雖然最后顯示是執行成功了,統計結果也正常,但是在 的 Web 頁面并沒有顯示出來。
究其原因,其實很簡單:這是因為那個 任務并沒有真正提交到 yarn 上來,因為默認 的運行環境是 local(本地),要讓 在 yarn 上運行,需要做幾個參數配置就行了。
需要修改的配置文件有兩個,即 -site.xml 和 yarn-site.xml分布式文件系統有哪些,在你的配置文件目錄,找到它們。
打開 -site.xml 文件,在 標簽內添加如下內容:
<property>
<name>mapreduce.framework.namename>
<value>yarnvalue>
property>
yarn.app..am.env
=${}
.map.env
=${}
..env
=${}
其中,..name 選項就是用來指定 的運行時環境,指定為 yarn 即可,下面的三個選項是指定 運行時一些環境信息。
最后,修改另一個文件 yarn-site.xml,添加如下內容到 標簽中:
<property>
<name>yarn.nodemanager.aux-servicesname>
<value>mapreduce_shufflevalue>
property>
其中,yarn..aux- 選項代表可在 上運行的擴展服務,需配置成 ,才可運行 程序。
配置修改完成后,需要重啟 與 服務才能使配置生效。
現在,我們再次運行剛才的那個 的 統計,所有執行的任務都會在 的 Web 頁面展示出來,如下圖所示:
從圖中可以清晰的看出,執行任務的 ID 名、執行任務的用戶、程序名、任務類型、隊列、優先級、啟動時間、完成時間、最終狀態等信息。從運維角度來說,這個頁面有很多信息都需要引起關注,比如任務最終狀態是否有失敗的,如果有,可以點擊倒數第二列“ UI”下面的 鏈接查看日志進行排查問題。
的 Web 頁面和 的 Web 頁面在進行大數據運維工作中,經常會用到,這些 Web 界面主要用來狀態監控、故障排查,更多使用細節和技巧,后面課時會做更加詳細的介紹。
小結
怎么樣,現在可以感受到 集群的應用場景了吧!雖然本課時介紹的是偽分別式環境,但與真實的完全分布式 環境實現的功能完全一樣。上面的例子中我只是統計了一個小文本中單詞的數量,你可能會說,這么點數據,手動幾秒鐘就算出來了,真沒看到分布式計算有什么優勢。沒錯,在小量數據環境中,使用 Yarn 分析是沒有意義的,而如果你有上百 GB 甚至 TB 級別的數據時,就能深刻感受到分布式計算的威力了。但有一點請注意,不管數據量大小,分析的方法都是一樣的,所以,你可以按照上面執行 的方法去讀取 GB 甚至 TB 級別的數據。