1、環境說明
- 基于Apache Hadoop 3.1.3 版本
- 依賴JDK環境
- Hadoop3.1.3下載地址
2、Hadoop架構
- 狹義上的hadoop主要包括三大組件
分布式存盤HDFS、分布式計算MapReduce、分布式資源管理和調度YARN
2.1 HDFS架構
-
主要負責資料的存盤

-
NameNode: 管理命名空間、存盤資料塊映射資訊(元資料)、 負責處理客戶端對HDFS的訪問. -
SecondaryNameNode: NameNode 的熱備, 會定期合并命名空間鏡像 fsimage和命名空間鏡像的編輯日志fsedits, 在主NameNode發生故障時, 可以 快速切換為新的 Active NameNode -
DataNode: 負責實際檔案資料的存盤、檔案會被拆分成多個塊, 以多副本方式存盤在不同的DataNode
2.2 Yarn 架構
- 主要負責作業的調度 和 資源的管理

ResourceManager(RM):- 處理提交的作業請求, 資源申請請求.
- 監控NodeManager的狀態
- 啟動和監控ApplicationMaster
NodeManager(NM):- 管理每個節點上運行的資源
- 定時向 RM 匯報本節點上的資源使用情況和各個 Container 的運行狀態
- 處理來自AM 對 各個Container 啟動/停止等請求
Container:- 即是任務運行的容器又是Yarn對資源的抽象, 封裝了某個節點上的多維度資源,如記憶體、CPU、磁盤、網路等. RM 為 AM 回傳的資源便是用 Container 表示的, YARN 會為每個任務分配一個 Container 且該任務只能使用該 Container 中描述的資源
ApplicationMaster(AM):- 每個作業會在NM中啟動一個AM, 然后由AM去負責發送MapTask、ReduceTask任務的啟動請求給NM, 以及向RM申請任務執行所需要的資源
- 與RM互動去申請資源Container(比如作業執行的資源, 任務執行的資源)
- 負責啟動、停止任務, 并且監控所有任務的運行狀態,當任務Task有失敗時,重新為任務申請資源并重啟任務
3、集群規劃
如無特別說明,每臺服務器要保持一樣的配置
| Hadoop300 | Hadoop301 | Hadoop302 | |
|---|---|---|---|
| NameNode | V | ||
| DataNode | V | V | V |
| SecondaryNameNode | V | ||
| ResourceManger | V | ||
| NodeManger | V | V | V |
4、下載解壓
4.1 安裝包放置
- 將下載的
hadoop3.1.3解壓并創建快捷方式到~/app目錄下, hadoop301,hadoop302同理
[hadoop@hadoop300 app]$ pwd
/home/hadoop/app
[hadoop@hadoop300 app]$ ll
lrwxrwxrwx 1 hadoop hadoop 47 2月 21 12:33 hadoop -> /home/hadoop/app/manager/hadoop_mg/hadoop-3.1.3
4.2 配置Hadoop環境變數
vim ~/.bash_profile
# ============ java =========================
export JAVA_HOME=/home/hadoop/app/jdk
export PATH=$PATH:$JAVA_HOME/bin
# ======================= Hadoop ============================
export HADOOP_HOME=/home/hadoop/app/hadoop
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
5、hadoop配置
5.1 env檔案
- 修改
${HADOOP_HOME}/etc/hadoop下的hadoop-env.sh, mapred-env.sh、yarn-env.sh這三個檔案都添加JDK的環境變數
export JAVA_HOME=/home/hadoop/app/jdk
5.2 core-site.xml
- 修改
${HADOOP_HOME}/etc/hadoop/core-site.xml檔案 - 關于代理用戶的配置見官網 Proxy User
<!-- 指定HDFS中NameNode的地址, -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop300:8020</value>
</property>
<!-- 指定Hdfs的NameNode、DataNode資料存盤路徑, 默認在/tmp/hadoop-${user.name}下 -->
<!--
<property>
<name>hadoop.tmp.dir</name>
<value>/tmp/hadoop-${user.name}</value>
</property>
-->
<!-- 配置HDFS管理頁面登陸的靜態用戶為 hadoop -->
<property>
<name>hadoop.http.staticuser.user</name>
<value>hadoop</value>
</property>
<!-- 配置該hadoop用戶允許通過代理訪問的主機節點-->
<property>
<name>hadoop.proxyuser.hadoop.hosts</name>
<value>*</value>
</property>
<!-- 配置該hadoop用戶允許代理的用戶所屬組-->
<property>
<name>hadoop.proxyuser.hadoop.groups</name>
<value>*</value>
</property>
<!-- 配置該hadoop用戶允許代理的用戶, *代表所有-->
<property>
<name>hadoop.proxyuser.hadoop.users</name>
<value>*</value>
</property>
5.3 hdfs-site.xml 檔案 (hdfs配置)
- 配置HDFS相關屬性
<!-- 指定HDFS副本的數量-->
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<!-- SecondaryNameNode啟動地址 -->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop302:9868</value>
</property>
5.4 yarn-site.xml (yarn配置)
- 配置yarn相關屬性
<!-- Reducer獲取資料的方式, 使用shuffle -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定YARN的ResourceManager的主機地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop301</value>
</property>
<!-- 容器向RM的記憶體申請請求允許的最小值, 即最小分配為該記憶體大小-->
<property>
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>200</value>
</property>
<!-- 容器向RM的記憶體申請請求允許的最大值, 超出將會拋出 InvalidResourceRequestException例外-->
<property>
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>2048</value>
</property>
<!-- 設定Yarn可使用的記憶體大小, 即可分配給容器的物理記憶體量(以MB為單位),如果設定為-1并且yarn.nodemanager.resource.detect-hardware-capabilities為true,則會自動計算(在Windows和Linux中),在其他情況下,默認值為8192MB,-->
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>4096</value>
</property>
<!-- 關閉Yarn對物理記憶體和虛擬記憶體的限制檢查
因為記憶體計算方式不一樣, 可能會誤認為記憶體不夠然后把作業kill掉
-->
<property>
<name>yarn.nodemanager.pmem-check-enabled</name>
<value>false</value>
</property>
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
<!-- 配置任務歷史服務地址 -->
<property>
<name>yarn.log.server.url</name>
<value>http://hadoop300:19888/jobhistory/logs/</value>
</property>
<!-- 開啟日志聚集功能使能
日志聚集就是應用運行完成以后,將容器本地運行的日志資訊收集上傳到HDFS系統上,方便查看
-->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<!-- 日志保留時間設定7天 -->
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
5.5 mapred-site.xml (MapReduce配置)
- 配置MapReduce相關設定
<!-- 指定MR運行在YARN上, 默認運行在local本地 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<!-- 指定jobhistory地址 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoop300:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hadoop300:19888</value>
</property>
<!-- 指定hadoop環境變數 -->
<property>
<name>yarn.app.mapreduce.am.env</name>
<value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>
<property>
<name>mapreduce.map.env</name>
<value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>
<property>
<name>mapreduce.reduce.env</name>
<value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>
5.6 workers 檔案配置
- 修改
${HADOOP_HOME}/etc/hadoop/workers檔案, 設定Hadoop集群節點串列tip: 注意不要出現空行和空格
hadoop300
hadoop301
hadoop302
6、啟動測驗
6.1 格式化NameNode
- 在hadoop300執行
[hadoop@hadoop300 app]$ hdfs namenode -format
6.2 啟動Hdfs
- 在hadoop300啟動
[hadoop@hadoop300 ~]$ start-dfs.sh
Starting namenodes on [hadoop300]
Starting datanodes
Starting secondary namenodes [hadoop302]
6.3 啟動Yarn
- 在hadoop301啟動
[hadoop@hadoop301 ~]$ start-yarn.sh
Starting resourcemanager
Starting nodemanagers
6.4 啟動JobHistory
[hadoop@hadoop300 hadoop]$ mapred --daemon start historyserver
6.5 效果
- 啟動成功后jps查看行程
- 這時hdfs的nn、dn、sn都啟動起來了,
- 而yarn的RM、NM也啟動起來了
- mr的JobHistory也啟動起來了
[hadoop@hadoop300 hadoop]$ xcall jps
--------- hadoop300 ----------
16276 JobHistoryServer
30597 DataNode
19641 Jps
30378 NameNode
3242 NodeManager
--------- hadoop301 ----------
24596 DataNode
19976 Jps
27133 ResourceManager
27343 NodeManager
--------- hadoop302 ----------
24786 SecondaryNameNode
27160 NodeManager
24554 DataNode
19676 Jps
訪問HDFS的NameNode界面 在hadoop300:9870

訪問HDFS的SecondaryNameNode界面 在hadoop300:9868

訪問Yarn管理界面: 在hadoop301:8088

訪問JobHistory的界面, 在hadoop300:19888

7、hadoop集群統一啟動腳本
vim hadoop.sh
#!/bin/bash
case $1 in
"start"){
echo ---------- Hadoop 集群啟動 ------------
echo "啟動Hdfs"
ssh hadoop300 "source ~/.bash_profile;start-dfs.sh"
echo "啟動Yarn"
ssh hadoop300 "source ~/.bash_profile;mapred --daemon start historyserver"
echo "啟動JobHistory"
ssh hadoop301 "source ~/.bash_profile;start-yarn.sh"
};;
"stop"){
echo ---------- Hadoop 集群停止 ------------
echo "關閉Hdfs"
ssh hadoop300 "source ~/.bash_profile;stop-dfs.sh"
echo "關閉Yarn"
ssh hadoop300 "source ~/.bash_profile;mapred --daemon stop historyserver"
echo "關閉JobHistory"
ssh hadoop301 "source ~/.bash_profile;stop-yarn.sh"
};;
esac
10、打賞

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/262170.html
標籤:其他
