Hadoop 運行模式包括:本地模式、僞分佈式模式以及完全分佈式模式。
本地(獨立)模式:無需運行任何守護進程,所有程序都在同一個JVM上執行,在獨立模式下測試和調試MapReduce都非常方便,因此該模式在開發階段比較適合。
僞分佈式模式:Hadoop守護進程運行在本地機器上,模擬一個小規模的集羣。
完全分佈式:Hadoop守護進程運行在一個集羣上。
本地運行模式
1. 官方Grep案例
1. 創建在hadoop-3.2.0文件下面創建一個input文件夾
dreamgeng at dreamgeng-ubuntu in /opt/jvm/hadoop-3.2.0
$ mkdir input
2. 將Hadoop的xml配置文件複製到input
dreamgeng at dreamgeng-ubuntu in /opt/jvm/hadoop-3.2.0
$ cp etc/hadoop/*xml input
3. 執行share目錄下的MapReduce程序
# 後面用了一個正則表達式來匹配需要的輸出,同時指定輸入和輸出目錄
dreamgeng at dreamgeng-ubuntu in /opt/jvm/hadoop-3.2.0
$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.0.jar grep input output 'dfs[a-z.]+'
4. 查看輸出結果
dreamgeng at dreamgeng-ubuntu in /opt/jvm/hadoop-3.2.0
$ cat output/*
2. 官方WordCount案例
1. 創建在hadoop-3.2.0文件下面創建一個wcinput文件夾
dreamgeng at dreamgeng-ubuntu in /opt/jvm/hadoop-3.2.0
$ mkdir wcinput
2. 在wcinput文件下創建一個wc.input文件
dreamgeng at dreamgeng-ubuntu in /opt/jvm/hadoop-3.2.0
$ cd wcinput
dreamgeng at dreamgeng-ubuntu in /opt/jvm/hadoop-3.2.0/input
$ touch wc.input
3. 編輯wc.input文件
dreamgeng at dreamgeng-ubuntu in /opt/jvm/hadoop-3.2.0/input
$ vi wc.input
輸入如下內容:
hadoop map reduce
mapreduce yarn
hadoop
保存退出
4. 回到hadoop-3.2.0目錄執行程序
dreamgeng at dreamgeng-ubuntu in /opt/jvm/hadoop-3.2.0
$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.0.jar wordcount wcinput/ wcoutput
5. 查看結果
dreamgeng at dreamgeng-ubuntu in /opt/jvm/hadoop-3.2.0
$ cat wcoutput/part-r-00000
本地模式較簡單。
僞分佈式運行模式
1. 啓動HDFS並運行MapReduce程序
準備內容:配置集羣,啓動、測試集羣的增刪查、執行WordCount案例
執行步驟
配置集羣
- 配置etc/hadoop/hadoop-env.sh
首先獲取jdk安裝路徑
dreamgeng at dreamgeng-ubuntu in /opt/jvm/hadoop-3.2.0
$ echo $JAVA_HOME
/opt/jvm/jdk1.8.0_211
配置環境變量,在etc/hadoop/hadoop-env.sh中:
export JAVA_HOME=/opt/jvm/jdk1.8.0_211
- 配置etc/hadoop/core-site.xml(在configration標籤中加入下面內容)
<!-- 指定 HDFS 中 NameNode 的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value> # localhost是當前主機名
</property>
<!-- 指定 Hadoop 運行時產生文件的存儲目錄 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/jvm/hadoop-3.2.0/data/tmp</value>
</property>
- 配置etc/hadoop/hdfs-site.xml
<!-- 指定 HDFS 副本的數量 -->
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
啓動集羣
# 格式化NameNode(第一次啓動時格式化,以後不能總格式化)
dreamgeng at dreamgeng-ubuntu in /opt/jvm/hadoop-3.2.0
$ bin/hdfs namenode -format
# 啓動namenode
dreamgeng at dreamgeng-ubuntu in /opt/jvm/hadoop-3.2.0
$ sbin/hadoop-daemon.sh start namenode
# 啓動datanode
dreamgeng at dreamgeng-ubuntu in /opt/jvm/hadoop-3.2.0
$ sbin/hadoop-daemon.sh start datanode
dreamgeng at dreamgeng-ubuntu in /opt/jvm/hadoop-3.2.0
# jps命令查看已經啓動的項目,需要注意的是jps是jdk中的命令,不是linux中的命令,不安裝jdk不能使用
$ jps
15105 Jps
32056 JobHistoryServer
27371 NameNode
31852 NodeManager
31565 ResourceManager
27518 DataNode
web端查看HDFS文件系統
http://localhost:9870/
端口號是9870
查看產生的log日誌
切換到所在目錄:/opt/jvmhadoop-3.2.0/logs
用cat命令打印日誌查看。
操作集羣
# 在 HDFS 文件系統上創建一個 input 文件夾
dreamgeng at dreamgeng-ubuntu in /opt/jvm/hadoop-3.2.0
$ bin/hdfs dfs -mkdir -p /user/gengqing/input
# 使用put命令,將測試文件內容上傳到文件系統上
dreamgeng at dreamgeng-ubuntu in /opt/jvm/hadoop-3.2.0
$ bin/hdfs dfs -put wcinput/wc.input /user/gengqing/input
# 運行 MapReduce 程序
dreamgeng at dreamgeng-ubuntu in /opt/jvm/hadoop-3.2.0
$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.0.jar wordcount /user/gengqing/input /user/gengqing/output
# 最後還可以使用cat命令查看輸出結果
dreamgeng at dreamgeng-ubuntu in /opt/jvm/hadoop-3.2.0
$ bin/hdfs dfs -cat /user/gengqing/output/p*
# 還可以將文件下載到本地
dreamgeng at dreamgeng-ubuntu in /opt/jvm/hadoop-3.2.0
$ hdfs dfs -get /user/gengqing/output/part-r-0000 ./wcoutput/
# 刪除輸出結果
dreamgeng at dreamgeng-ubuntu in /opt/jvm/hadoop-3.2.0
$ bin/hdfs dfs -rm -r /user/gengqing/output
2. 啓動YARN並運行MapReduce程序
準備內容:配置集羣在YARN上運行MR、啓動和測試集羣增刪查、在YARN上執行WordCount案例
執行步驟
- 配置etc/hadoop/yarn-env.sh
首先獲取jdk安裝路徑
dreamgeng at dreamgeng-ubuntu in /opt/jvm/hadoop-3.2.0
$ echo $JAVA_HOME
/opt/jvm/jdk1.8.0_211
配置環境變量,在etc/hadoop/yarn-env.sh中:
## JAVA_HOME
export JAVA_HOME=/opt/jvm/jdk1.8.0_211
if ["$JAVA_HOME" != ""]; then
JAVA_HOME=$JAVA_HOME
fi
- 配置etc/hadoop/yarn-site.xml
<!-- Reducer 獲取數據的方式 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定 YARN 的 ResourceManager 的地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop101</value>
</property>
# 需要加上對yarn.application.classpath的配置,否則會報錯
</property>
<property>
<name>yarn.application.classpath</name>
<value>
/opt/jvm/hadoop-3.2.0/etc/hadoop,
/opt/jvm/hadoop-3.2.0/share/hadoop/common/*,
/opt/jvm/hadoop-3.2.0/share/hadoop/common/lib/*,
/opt/jvm/hadoop-3.2.0/share/hadoop/hdfs/*,
/opt/jvm/hadoop-3.2.0/share/hadoop/hdfs/lib/*,
/opt/jvm/hadoop-3.2.0/share/hadoop/mapreduce/*,
/opt/jvm/hadoop-3.2.0/share/hadoop/mapreduce/lib/*,
/opt/jvm/hadoop-3.2.0/share/hadoop/yarn/*,
/opt/jvm/hadoop-3.2.0/share/hadoop/yarn/lib/*
</value>
</property>
- 配置etc/hadoop/mapred-env.sh
配置環境變量,在etc/hadoop/yarn-env.sh中:
## JAVA_HOME
export JAVA_HOME=/opt/jvm/jdk1.8.0_211
- 配置etc/hadoop/mapred-site.xml
<!-- 指定 MR 運行在 YARN 上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
啓動集羣
# 啓動前必須保證 NameNode 和 DataNode 已經啓動
# 啓動resurcemanager
dreamgeng at dreamgeng-ubuntu in /opt/jvm/hadoop-3.2.0
$ sbin/yarn-daemon.sh start resurcemanager
# 啓動nodemanager
dreamgeng at dreamgeng-ubuntu in /opt/jvm/hadoop-3.2.0
$ sbin/yarn-daemon.sh start nodemanager
集羣操作
http://localhost:8088/cluster
端口號:8088
3. 配置歷史服務器(使得可以在web端查看history)
- 配置etc/hadoop/mapred-site.xml
<!-- 歷史服務器端地址 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>localhost:10020</value>
</property>
<!-- 歷史服務器 web 端地址 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>localhost:19888</value>
</property>
- 啓動歷史服務器
dreamgeng at dreamgeng-ubuntu in /opt/jvm/hadoop-3.2.0
$ sbin/mr-jobhistory-daemon.sh start historyserver
- 查看JobHistory
http://hadoop101:19888/jobhistory
3. 配置日誌的聚集(使得可以在web端查看日誌)
日誌聚集概念:應用運行完成以後,將程序運行日誌信息上傳到 HDFS 系統上。
日誌聚集功能好處: 可以方便的查看到程序運行詳情,方便開發調試。
注意:開啓日誌聚集功能 , 需要重新啓動 NodeManager 、 ResourceManager 和HistoryManager。
- 配置etc/hadoop/yarn-site.xml
<!-- 日誌聚集功能使能 -->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<!-- 日誌保留時間設置 7 天 -->
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
- 關閉 NodeManager 、 ResourceManager 和 HistoryManager
- 重啓 NodeManager 、 ResourceManager 和 HistoryManager
- 刪除 HDFS 上已經存在的輸出文件
- 執行 WordCount 程序
- 查看日誌