2.2 HDFS 僞分佈式集羣搭建
目的
- 瞭解 Hadoop 集羣的組成和規劃
- 重點掌握 HDFS 集羣的相關配置
- 掌握格式化文件系統的命令
- 學會啓動和關閉 HDFS 集羣的兩種方式
- 能夠使用 jps 命令查看進程的啓動情況
- 能夠通過 UI 查看 HDFS 集羣的運行狀態
配置清單
- 任務 1:Hadoop 集羣簡介
- 任務 2:安裝包準備
- 任務 3:HDFS 集羣主要配置文件講解
- 任務 4:配置 Hadoop 系統環境變量
- 任務 5:HDFS 集羣測試
1:集羣簡介
Hadoop 集羣具體來說包含兩個集羣:HDFS 集羣和YARN 集羣,兩者邏輯上分離,但物理上常在一起。 另外,對於 Hadoop 的集羣來講,可以分爲兩大類角色:master 和 slave。
(1)HDFS 集羣:負責海量數據的存儲,集羣中的角色主要有:NameNode(一個,master)、DataNode(若干,slave)和 SecondaryNameNode(一個)。
(2)YARN 集羣:負責海量數據運算時的資源調度,集羣中的角色主要有: ResourceManager(一個,master) 和 NodeManager(若干,slave)。
爲什麼沒有 MapReduce 集羣呢?MapReduce 是什麼呢?
它其實是一個應用程序開發包,也就是一堆 Java 的 jar 包,不需要安裝。
2:安裝包準備
Hadoop 是 Apache 基金會面向全球開源的產品之一,任何用戶都可以從 Apache Hadoop 官網http://archive.apache.org/dist/hadoop/common/下載使用。本次我們採用當下較爲穩定的 hadoop2.7.7 版本爲例,詳細講解 Hadoop 的安裝。所以我們手動下載 hadoop-2.7.7.tar.gz 即可。想要最完整安裝包的鐵汁,請回戳LInux最全jdk1.8+安裝教程提供的百度網盤鏈接獲取
我們這裏將hadoop安裝包存放在 /root/software 目錄下,使用如下命令進行解壓
tar -zxvf hadoop-2.7.7.tar.gz
將其解壓到當前目錄下,即 /root/software 中
接下來,進入 Hadoop 的安裝目錄,通過 ll
命令查看 Hadoop 目錄結構,如下圖所示:
從圖中可以看出,Hadoop 安裝目錄包括 bin、etc、include、lib、libexec、sbin、share 共 7 個目錄以及其他一些文件,下面簡單介紹下各目錄內容及作用。
(1)bin:存放操作 Hadoop 相關服務(HDFS、YARN)的腳本,但是我們通常使用 sbin 目錄下的腳本。
(2)etc:存放 Hadoop 配置文件,主要包含 core-site.xml、hdfs-site.xml、mapred-site.xml 等從 Hadoop1.0 繼承而來的配置文件和 yarn-site.xml 等 Hadoop2.0 新增的配置文件。
(3)include:對外提供的編程庫頭文件(具體動態庫和靜態庫在 lib 目錄中),這些頭文件均是用 C++ 定義的,通常用於 C++ 程序訪問 HDFS 或者編寫 MapReduce 程序。
(4)lib:該目錄包含了 Hadoop 對外提供的編程動態庫和靜態庫,與 include 目錄中的頭文件結合使用。
(5)libexec:各個服務對應的 shell 配置文件所在的目錄,可用於配置日誌輸出、啓動參數(比如 JVM 參數)等基本信息。
(6)sbin:該目錄存放 Hadoop 管理腳本,主要包含 HDFS 和 YARN 中各類服務的啓動/關閉腳本。
(7)share:Hadoop 各個模塊編譯後的 jar 包所在的目錄。
3:HDFS 集羣主要配置文件講解
Hadoop 默認提供了兩種配置文件:
(1)一種是只讀的默認配置文件,包括 core-default.xml、hdfs-default.xml、mapred-default.xml 和 yarn-default.xml,這些文件包含了 Hadoop 系統各種默認配置參數;
(2)另一種是 Hadoop 集羣自定義配置時編輯的配置文件(這些文件多數沒有任何配置內容,都存在於 Hadoop 安裝包下的 etc/hadoop 目錄中),包括 hadoop-env.sh、yarn-env.sh、core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml 和 slaves 共 7 個文件,可以根據需要在這些文件中對默認配置文件中的參數進行修改,Hadoop 會優先選擇這些配置文件中的參數。
接下來,我們通過一張表對 Hadoop 集羣搭建可能涉及的主要配置文件及功能進行描述。
配置文件 | 功能描述 |
---|---|
hadoop-env.sh | 配置 Hadoop 運行所需的環境變量 |
yarn-env.sh | 配置 YARN 運行所需的環境變量 |
core-site.xml | Hadoop 核心全局配置文件,可在其它配置文件中引用該文件 |
hdfs-site.xml | HDFS 配置文件,繼承 core-site.xml 配置文件 |
mapred-site.xml | MapReduce 配置文件,繼承 core-site.xml 配置文件 |
yarn-site.xml | YARN 配置文件,繼承 core-site.xml 配置文件 |
slaves | Hadoop 集羣所有從節點(DataNode 和 NodeManager)列表 |
(1)前兩個配置文件都是用來指定 Hadoop 和 YARN 所需運行環境。
- hadoop-env.sh:用來保證 Hadoop 系統能夠正常執行 HDFS 的守護進程 NameNode、SecondaryNameNode 和 DataNode;
- yarn-env.sh:用來保證 YARN 的守護進程 ResourceManager 和 NodeManager 能正常執行。
(2)slaves 文件存儲了當前集羣的所有從節點的列表。
(3)其它 4 個配置文件都是用來設置集羣運行參數的,在這些配置文件中可以使用 Hadoop 默認配置文件中的參數進行配置以此來優化 Hadoop 集羣,從而使集羣更加穩定高效。
Hadoop 提供的默認配置文件 core-default.xml、hdfs-default.xml、mapred-default.xml 和 yarn-default.xml 中的參數非常之多,具體使用時可以通過訪問 Hadoop 官方文檔,進入到文檔最底部的 Configuration 部分進行學習和查看。
接下來,爲大家詳細講解 HDFS 集羣的相關配置,具體步驟如下。
3.1 配置環境變量 hadoop-env.sh
因爲 Hadoop 的各守護進程依賴於 JAVA_HOME 環境變量(jdk目錄),所以需要修改“hadoop-env.sh”環境變量文件中的 JAVA_HOME 的值。
首先需要複製一下本機安裝的 JDK 的實際位置(避免寫錯最好不要手寫),可以使用下列方式打印 JDK 的安裝目錄:
echo $JAVA_HOME
語法解析:
- echo:輸出命令
- $:引用環境變量的值
- JAVA_HOME:環境變量
使用如下命令打開 hadoop-env.sh 文件:
vim /root/software/hadoop-2.7.7/etc/hadoop/hadoop-env.sh
找到 JAVA_HOME 參數位置,修改爲本機安裝的 JDK 的實際位置:
3.2 配置核心組件 core-site.xml
該文件**是 Hadoop 的核心配置文件,其目的是配置 HDFS 地址、端口號,以及臨時文件目錄。**使用如下命令打開 “core-site.xml” 文件:
vim /root/software/hadoop-2.7.7/etc/hadoop/core-site.xml
將下面的配置內容添加到 <configuration></configuration>
中間:
<!-- HDFS集羣中NameNode的URI(包括協議、主機名稱、端口號),默認爲 file:/// -->
<property>
<name>fs.defaultFS</name>
<!-- 用於指定NameNode的地址 -->
<value>hdfs://localhost:9000</value>
</property>
<!-- Hadoop運行時產生文件的臨時存儲目錄 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/root/hadoopData/temp</value>
</property>
3.3 配置文件系統 hdfs-site.xml
該文件主要用於配置 HDFS 相關的屬性,例如複製因子(即數據塊的副本數)、NameNode 和 DataNode 用於存儲數據的目錄等。在完全分佈式模式下,默認數據塊副本是 3 份。 使用如下命令打開“hdfs-site.xml”文件:
vim /root/software/hadoop-2.7.7/etc/hadoop/hdfs-site.xml
將下面的配置內容添加到 <configuration></configuration>
中間:
<!-- NameNode在本地文件系統中持久存儲命名空間和事務日誌的路徑 -->
<property>
<name>dfs.namenode.name.dir</name>
<value>/root/hadoopData/name</value>
</property>
<!-- DataNode在本地文件系統中存放塊的路徑 -->
<property>
<name>dfs.datanode.data.dir</name>
<value>/root/hadoopData/data</value>
</property>
<!-- 數據塊副本的數量,默認爲3 -->
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
3.4 配置 slaves 文件
該文件用於記錄 Hadoop 集羣所有從節點(HDFS 的 DataNode 和 YARN 的 NodeManager 所在主機)的主機名,用來配合一鍵啓動腳本啓動集羣從節點(並且還需要保證關聯節點配置了 SSH 免密登錄)。
打開該配置文件:
vim /root/software/hadoop-2.7.7/etc/hadoop/slaves
我們看到其默認內容爲 localhost,因爲我們搭建的是僞分佈式集羣,就只有一臺主機,所以從節點也需要放在此主機上,所以此配置文件無需修改。
4:配置 Hadoop 系統環境變量
(1)首先打開/etc/profile 文件:
vim /etc/profile
(2)在文件底部添加如下內容:
# 配置Hadoop的安裝目錄
export HADOOP_HOME=/root/software/hadoop-2.7.7
# 在原PATH的基礎上加入Hadoop的bin和sbin目錄
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
注意:
- export 是把這兩個變量導出爲全局變量。
- 大小寫必須嚴格區分。
另外:
- **bin:**存放操作 Hadoop 相關服務(HDFS、YARN)的腳本,但是通常使用 sbin 目錄下的腳本。
- **sbin:**該目錄存放 Hadoop 管理腳本,主要包含 HDFS 和 YARN 中各類服務的啓動/關閉腳本。
(3)讓配置文件立即生效,使用如下命令:
source /etc/profile
(4)檢測 Hadoop 環境變量是否設置成功,使用如下命令查看 Hadoop 版本:
hadoop version
執行此命令後,若是出現 Hadoop 版本信息說明配置成功:
5:HDFS 集羣測試
5.1 格式化文件系統
具體指令如下:
hdfs namenode -format
執行格式化指令後,必須出現有“successfully formatted”信息才表示格式化成功,如下圖所示:
若是未出現 “successfully formatted” 信息,就需要查看指令是否正確,或者之前 HDFS 集羣的安裝和配置是否正確,若是正確,則需要刪除所有主機的 “/root/hadoopData” 文件夾,重新執行格式化命令,對 HDFS 集羣進行格式化。
另外需要特別注意的是,上述格式化指令只需要在 HDFS 集羣初次啓動前執行即可,後續重複啓動就不再需要執行格式化了。
5.2 啓動和關閉 HDFS 集羣
針對 HDFS 集羣的啓動,啓動方式有兩種,一種是單節點逐個啓動;另一種是使用腳本一鍵啓動。
1. 單節點逐個啓動和關閉
單節點逐個啓動的方式,需要參照以下方式逐個啓動 HDFS 集羣服務需要的相關服務進程,具體步驟如下:
(1)在本機上使用以下指令啓動 NameNode 進程:
hadoop-daemon.sh start namenode
啓動完成之後,使用 jps
指令查看 NameNode 進程的啓動情況
解析:
- jps 命令:(全稱:Java Virtual Machine Process Status Tool)。安裝 JDK 後在 % JAVA_HOME %/bin 目錄下面自帶的一個 Java 工具。能夠顯示系統當前運行的 Java 程序及其進程號。
- 其中 424 和 350 是進程的 PID,也就是進程號。
(2)在本機上使用以下指令啓動 DataNode 進程:
hadoop-daemon.sh start datanode
(3)在本機上使用以下指令啓動 SecondaryNameNode 進程:
hadoop-daemon.sh start secondarynamenode
另外,當需要停止相關服務進程時,只需要將上述指令中的start
更改爲stop
即可。
2. 腳本一鍵啓動和關閉
啓動集羣最常使用的方式是使用腳本一鍵啓動,前提是需要配置 SSH 免密登錄。
- 在本機上使用如下方式一鍵啓動 HDFS 集羣:
start-dfs.sh
- 效果圖如下所示:
打印信息:
-
在本機上啓動了 NameNode 守護進程
-
在本機上啓動了 DataNode 守護進程
-
在配置的一個特定節點 0.0.0.0(本機)上啓動 SecondaryNameNode 守護進程
我們可以一鍵啓動 HDFS 集羣,同樣也可以一鍵關閉 HDFS 集羣,只需要將 start
改爲 stop
即可,即stop-dfs.sh
。
5.3 查看進程啓動情況
在本機執行 jps
命令,在打印結果中會看到 4 個進程,分別是 NameNode、SecondaryNameNode、Jps、和 DataNode,如果出現了這 4 個進程表示進程啓動成功。
5.4 通過 UI 查看 HDFS 運行狀態
HDFS 集羣正常啓動後,它默認開放了50070端口,用於監控 HDFS 集羣。通過 UI 可以方便地進行集羣的管理和查看,只需要在本地操作系統的瀏覽器輸入集羣服務的 IP 和對應的端口號即可訪問。
通過本機的瀏覽器訪問http://localhost:50070或http://本機IP 地址:50070 查看 HDFS 集羣狀態,效果如下圖所示:
從上圖可以看出,通過 UI 可以正常訪問 Hadoop 集羣的 HDFS 界面,並且頁面顯示正常,同時通過 UI 可以更方便地進行狀態管理和查看。
HDFS最全搭建教程奉上,希望大家認真瀏覽,還有兩篇僞分佈式集羣就搭建完成了2.3 YARN 僞分佈式集羣搭建,2.4 Hadoop僞分佈式集羣初體驗,預計6.15日左右更新,如果搭建中存在任何問題,歡迎評論區留言諮詢,或者前往主頁添加我的私人QQ。
注:希望每一個人都能親自動手體驗
@Author:HaoXuan