Hadoop系列-Hadoop 運行模式

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案例
執行步驟
配置集羣

  1. 配置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
  1. 配置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>
  1. 配置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案例
執行步驟

  1. 配置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
  1. 配置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>
  1. 配置etc/hadoop/mapred-env.sh
配置環境變量,在etc/hadoop/yarn-env.sh中:
## JAVA_HOME
export JAVA_HOME=/opt/jvm/jdk1.8.0_211
  1. 配置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)

  1. 配置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>
  1. 啓動歷史服務器
dreamgeng at dreamgeng-ubuntu in /opt/jvm/hadoop-3.2.0 
$ sbin/mr-jobhistory-daemon.sh start historyserver
  1. 查看JobHistory
    http://hadoop101:19888/jobhistory

3. 配置日誌的聚集(使得可以在web端查看日誌)

日誌聚集概念:應用運行完成以後,將程序運行日誌信息上傳到 HDFS 系統上。
日誌聚集功能好處: 可以方便的查看到程序運行詳情,方便開發調試。
注意:開啓日誌聚集功能 , 需要重新啓動 NodeManager 、 ResourceManager 和HistoryManager。

  1. 配置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>
  1. 關閉 NodeManager 、 ResourceManager 和 HistoryManager
  2. 重啓 NodeManager 、 ResourceManager 和 HistoryManager
  3. 刪除 HDFS 上已經存在的輸出文件
  4. 執行 WordCount 程序
  5. 查看日誌
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章