視頻課程地址:https://www.bilibili.com/video/BV1WY4y197g7
課程資料鏈接:https://pan.baidu.com/s/15KpnWeKpvExpKmOC8xjmtQ?pwd=5ay8
Hadoop入門學習筆記(匯總)
四、MapReduce的框架配置和YARN的部署
本次YARN的部署結構如下圖所示:
當前,共有三臺服務器(虛擬機)構成集群,集群規(guī)劃如下所示:
主機 | 部署的服務 |
---|---|
node1 | ResourceManager、NodeManager、ProxyServer、JobHistoryServer |
node2 | NodeManager |
node3 | NodeManager |
MapReduce是運行在YARN上的,所以MapReduce只需要配置,YARN需要部署并啟動。
4.1. 配置MapReduce和YARN
1、在node1節(jié)點,修改mapred-env.sh
文件:
# 進入hadoop配置文件目錄
cd /export/server/hadoop-3.3.4/etc/hadoop/
# 打開mapred-env.sh文件
vim mapred-env.sh
打開后,在文件中加入以下內容:
# 設置JDK路徑
export JAVA_HOME=/export/server/jdk
# 設置JobHistoryServer進程的內存為1G
export HADOOP_JOB_HISTORYSERVER_HEAPSIZE=1000
# 設置日志級別為INFO
export HADOOP_MAPRED_ROOT_LOGGER=INFO,RFA
2、再修改同目錄下的mapred-site.xml
配置文件,在其configuration標簽內增加以下內容:
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
<description></description>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>node1:10020</value>
<description></description>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>node1:19888</value>
<description></description>
</property>
<property>
<name>mapreduce.jobhistory.intermediate-done-dir</name>
<value>/data/mr-history/tmp</value>
<description></description>
</property>
<property>
<name>mapreduce.jobhistory.done-dir</name>
<value>/data/mr-history/done</value>
<description></description>
</property>
<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>
其中,
mapreduce.framework.name 表示MapReduce的運行框架,這里設置為Yarn;
mapreduce.jobhistory.address 表示歷史服務器通訊地址和端口號,這里為node1:10020;
mapreduce.jobhistory.webapp.address 表示歷史服務器Web端地址和端口號,這里為node1:19888;
mapreduce.jobhistory.intermediate-done-dir 表示歷史信息在HDFS的記錄臨時路徑,這里是/data/mr-history/tmp;
mapreduce.jobhistory.done-dir 表示歷史信息在HDFS的記錄路徑,這里是/data/mr-history/done;
yarn.app.mapreduce.am.env 表示MapReduce HOME的路徑,這里設置為HADOOP_HOME相同路徑;
mapreduce.map.env 表示Map HOME的路徑,這里設置為HADOOP_HOME相同路徑;
mapreduce.reduce.env 表示Reduce HOME的路徑,這里設置為HADOOP_HOME相同路徑;
至此,MapReduce的配置完成。
3、接下來,配置YARN。在node1節(jié)點,修改yarn-env.sh
文件:
# 進入hadoop配置文件目錄
cd /export/server/hadoop-3.3.4/etc/hadoop/
# 打開yarn-env.sh文件
vim yarn-env.sh
在文件中添加以下內容:
# 設置JDK路徑的環(huán)境變量
export JAVA_HOME=/export/server/jdk
# 設置HADOOP_HOME的環(huán)境變量
export HADOOP_HOME=/export/server/hadoop
# 設置配置文件路徑的環(huán)境變量
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
# 設置日志文件路徑的環(huán)境變量
export HADOOP_LOG_DIR=$HADOOP_HOME/logs
4、修改同目錄下的yarn-site.xml
配置文件,在其configuration節(jié)點中添加以下內容:
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.log.server.url</name>
<value>http://node1:19888/jobhistory/logs</value>
<description></description>
</property>
<property>
<name>yarn.web-proxy.address</name>
<value>node1:8089</value>
<description>proxy server hostname and port</description>
</property>
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
<description>Configuration to enable or disable log aggregation</description>
</property>
<property>
<name>yarn.nodemanager.remote-app-log-dir</name>
<value>/tmp/logs</value>
<description>Configuration to enable or disable log aggregation</description>
</property>
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>node1</value>
<description></description>
</property>
<property>
<name>yarn.resourcemanager.scheduler.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler</value>
<description></description>
</property>
<property>
<name>yarn.nodemanager.local-dirs</name>
<value>/data/nm-local</value>
<description>Comma-separated list of paths on the local filesystem where intermediate data is written.</description>
</property>
<property>
<name>yarn.nodemanager.log-dirs</name>
<value>/data/nm-log</value>
<description>Comma-separated list of paths on the local filesystem where logs are written.</description>
</property>
<property>
<name>yarn.nodemanager.log.retain-seconds</name>
<value>10800</value>
<description>Default time (in seconds) to retain log files on the NodeManager Only applicable if log-aggregation is disabled.</description>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
<description>Shuffle service that needs to be set for Map Reduce applications.</description>
</property>
其中,核心配置如下:
yarn.resourcemanager.hostname 表示ResourceManager設置在哪個節(jié)點,這里是node1節(jié)點;
yarn.nodemanager.local-dirs 表示NodeManager中間數據Linux系統(tǒng)本地存儲的路徑;
yarn.nodemanager.log-dirs 表示NodeManager數據Linux系統(tǒng)日志本地存儲的路徑;
yarn.nodemanager.aux-services 表示為MapReduce程序開啟Shuffle服務;
額外配置如下:
yarn.log.server.url 表示歷史服務器的URL;
yarn.web-proxy.address 表示代理服務器的主機和端口號;
yarn.log-aggregation-enable 表示是否開啟日志聚合;
yarn.nodemanager.remote-app-log-dir 表示程序日志在HDFS中的存放路徑;
yarn.resourcemanager.scheduler.class 表示選擇Yarn使用的調度器,這里選的是公平調度器;
5、完成上述配置后,需要將MapReduce和YARN的配置文件分發(fā)到node2和node3服務器相同位置中,使用hadoop用戶身份執(zhí)行以下命令
# 將mapred-env.sh、mapred-site.xml、yarn-env.sh、yarn-site.xml四個配置文件,復制到node2的相同路徑下
scp mapred-env.sh mapred-site.xml yarn-env.sh yarn-site.xml node2:`pwd`/
# 將mapred-env.sh、mapred-site.xml、yarn-env.sh、yarn-site.xml四個配置文件,復制到node3的相同路徑下
scp mapred-env.sh mapred-site.xml yarn-env.sh yarn-site.xml node2:`pwd`/
4.2. YARN集群啟停腳本
在啟動YARN集群前,需要確保HDFS集群已經啟動。同樣,啟停YARN集群也必須使用hadoop用戶身份。
4.2.1. 一鍵啟停腳本
-
$HADOOP_HOME/sbin/start-yarn.sh
或start-yarn.sh
一鍵啟動YARN集群
- 會基于yarn-site.xml中配置的yarn.resourcemanager.hostname來決定在哪臺機器上啟動resourcemanager;
- 會基于workers文件配置的主機啟動NodeManager;
- 在當前機器啟動ProxyServer(代理服務器)。
命令執(zhí)行效果如下圖所示:
此時通過jps
命令查看進程,可以看到如下效果:
此時,可以看到ResourceManager、NodeManager和WebAppProxyServer都已經啟動,還需要啟動HistoryServer,可以通過后續(xù)章節(jié)介紹的mapred --daemon start historyserver
命令啟動。
至此,整個YARN集群啟動完成。
此時,可以通過訪問http://node1:8088/ 即可看到YARN集群的監(jiān)控頁面(即ResourceManager的WebUI)
-
$HADOOP_HOME/sbin/stop-yarn.sh
或stop-yarn.sh
一鍵關閉YARN集群。 - 配置部署好YARN集群后,可以關閉YARN集群、關閉JobHistoryServer、關閉HDFS集群、關閉虛擬機之后,對虛擬機創(chuàng)建快照,保存好當前環(huán)境。
4.2.2. 單獨進程啟停
- 在每一臺機器,單獨啟動或停止進程,可以通過如下命令執(zhí)行:
$HADOOP_HOME/bin/yarn --daemon start|stop resourcemanager|nodemanager|proxyserver
start和stop決定啟動和停止;
可控制resourcemanager、nodemanager、webappproxyserver三種進程。
例如:
# 在node1啟動ResourceManager
yarn --daemon start resourcemanager
# 在node1、node2、node3分別啟動NodeManager
yarn --daemon start nodemanager
# 在node1啟動WebProxyServer
yarn --daemon start proxyserver
- 歷史服務器(JobHistoryServer)的啟動和停止
$HADOOP_HOME/bin/mapred --daemon start|stop historyserver
用法:
# 啟動JobHistoryServer
mapred --daemon start historyserver
# 停止JobHistoryServer
mapred --daemon stop historyserver
4.3. 提交MapReduce示例程序到YARN運行
YARN作為資源調度管控框架,其本身提供資供許多程序運行,常見的有:
- MapReduce程序
- Spark程序
- Flink程序
Hadoop官方提供了一些預置的MapReduce程序代碼,存放于$HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.1.jar
文件內。
上述程序可使用hadoop har
命令提交至YARN運行,其命令語法為:
hadoop jar 程序文件 java類名 [程序參數] ... [程序參數]
4.3.1. 提交wordcount(單詞統(tǒng)計)示例程序
1、程序內容
- 給定數據輸入的路徑(HDFS)、給定結果輸出的路徑(HDFS)
- 將輸入路徑內的數據中的單詞進行計數,將結果寫到輸出路徑
2、準備一份待統(tǒng)計的數據文件并上傳至HDFS中
使用vim words.txt
命令,在Linux本地創(chuàng)建words.txt文件,其內容如下:
itheima itcast itheima itcast
hadoop hdfs hadoop hdfs
hadoop mapreduce hadoop yarn
itheima hadoop itcast hadoop
itheima itcast hadoop yarn mapreduce
使用命令hdfs dfs -mkdir -p /input
在HDFS根目錄創(chuàng)建input文件夾(用于存儲待統(tǒng)計的文件),使用hdfs dfs -mkdir -p /output
命令在HDFS根目錄創(chuàng)建output文件夾(用于存儲統(tǒng)計結果),使用hdfs dfs -put words.txt /input
命令將本地的words.txt文件上傳至HDFS系統(tǒng)中。
3、提交MapReduce程序
使用如下命令:
hadoop jar /export/server/hadoop-3.3.4/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.4.jar wordcount hdfs://node1:8020/input/ hdfs://node1:8020/output/wc
其中,
hadoop jar 表示向YARN提交一個Java程序;
/export/server/hadoop-3.3.4/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.4.jar 表示所要提交的程序路徑;
wordcount 表示要運行的java類名;
hdfs://node1:8020/input/ 表示參數1,在本程序中是待統(tǒng)計的文件夾,這里寫了hdfs協(xié)議頭,指明了是HDFS文件系統(tǒng)的路徑(經測試,不寫也可以,默認讀取HDFS文件系統(tǒng)路徑);
hdfs://8020/output/wc 表示參數2,在本程序中是統(tǒng)計結果輸出的文件夾,這里寫明了hdfs協(xié)議頭,指明了是HDFS文件系統(tǒng)的路徑(經測試,不寫也可以,默認讀取HDFS文件系統(tǒng)路徑),這里需要確保該文件夾不存在,否則會報錯。
運行日志如下所示:
[hadoop@node1 ~]$ hadoop jar /export/server/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.4.jar wordcount hdfs://node1:8020/input hdfs://node1:8020/output/wc
2023-12-14 15:31:53,988 INFO client.DefaultNoHARMFailoverProxyProvider: Connecting to ResourceManager at node1/192.168.88.101:8032
2023-12-14 15:31:55,818 INFO mapreduce.JobResourceUploader: Disabling Erasure Coding for path: /tmp/hadoop-yarn/staging/hadoop/.staging/job_1702538855741_0001
2023-12-14 15:31:56,752 INFO input.FileInputFormat: Total input files to process : 1
2023-12-14 15:31:57,040 INFO mapreduce.JobSubmitter: number of splits:1
2023-12-14 15:31:57,607 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_1702538855741_0001
2023-12-14 15:31:57,607 INFO mapreduce.JobSubmitter: Executing with tokens: []
2023-12-14 15:31:58,167 INFO conf.Configuration: resource-types.xml not found
2023-12-14 15:31:58,170 INFO resource.ResourceUtils: Unable to find 'resource-types.xml'.
2023-12-14 15:31:59,119 INFO impl.YarnClientImpl: Submitted application application_1702538855741_0001
2023-12-14 15:31:59,406 INFO mapreduce.Job: The url to track the job: http://node1:8089/proxy/application_1702538855741_0001/
2023-12-14 15:31:59,407 INFO mapreduce.Job: Running job: job_1702538855741_0001
2023-12-14 15:32:23,043 INFO mapreduce.Job: Job job_1702538855741_0001 running in uber mode : false
2023-12-14 15:32:23,045 INFO mapreduce.Job: map 0% reduce 0%
2023-12-14 15:32:37,767 INFO mapreduce.Job: map 100% reduce 0%
2023-12-14 15:32:50,191 INFO mapreduce.Job: map 100% reduce 100%
2023-12-14 15:32:51,220 INFO mapreduce.Job: Job job_1702538855741_0001 completed successfully
2023-12-14 15:32:51,431 INFO mapreduce.Job: Counters: 54
File System Counters
FILE: Number of bytes read=84
FILE: Number of bytes written=553527
FILE: Number of read operations=0
FILE: Number of large read operations=0
FILE: Number of write operations=0
HDFS: Number of bytes read=248
HDFS: Number of bytes written=54
HDFS: Number of read operations=8
HDFS: Number of large read operations=0
HDFS: Number of write operations=2
HDFS: Number of bytes read erasure-coded=0
Job Counters
Launched map tasks=1
Launched reduce tasks=1
Data-local map tasks=1
Total time spent by all maps in occupied slots (ms)=11593
Total time spent by all reduces in occupied slots (ms)=9650
Total time spent by all map tasks (ms)=11593
Total time spent by all reduce tasks (ms)=9650
Total vcore-milliseconds taken by all map tasks=11593
Total vcore-milliseconds taken by all reduce tasks=9650
Total megabyte-milliseconds taken by all map tasks=11871232
Total megabyte-milliseconds taken by all reduce tasks=9881600
Map-Reduce Framework
Map input records=6
Map output records=21
Map output bytes=233
Map output materialized bytes=84
Input split bytes=98
Combine input records=21
Combine output records=6
Reduce input groups=6
Reduce shuffle bytes=84
Reduce input records=6
Reduce output records=6
Spilled Records=12
Shuffled Maps =1
Failed Shuffles=0
Merged Map outputs=1
GC time elapsed (ms)=300
CPU time spent (ms)=2910
Physical memory (bytes) snapshot=353423360
Virtual memory (bytes) snapshot=5477199872
Total committed heap usage (bytes)=196218880
Peak Map Physical memory (bytes)=228843520
Peak Map Virtual memory (bytes)=2734153728
Peak Reduce Physical memory (bytes)=124579840
Peak Reduce Virtual memory (bytes)=2743046144
Shuffle Errors
BAD_ID=0
CONNECTION=0
IO_ERROR=0
WRONG_LENGTH=0
WRONG_MAP=0
WRONG_REDUCE=0
File Input Format Counters
Bytes Read=150
File Output Format Counters
Bytes Written=54
4、查看運行結果
運行完畢后,使用hadoop fs -ls /output/wc
可以看到運行結果輸出的文件
使用hadoop fs -cat /output/wc/part-r-00000
命令,可以看到程序運行的結果
除此之外,在YARN集群的監(jiān)控頁面http://node1:8088/ 點擊左側的Applications菜單,可以看到剛才運行過的任務
再點擊任務的ID,可以進入任務詳情頁面
再點擊某一個階段的Logs鏈接,可以看到對應階段的運行的客戶端日志(在配置yarn-site.xml
文件時,配置了開啟日志聚合),這個頁面本質上是JobHistoryServer提供的頁面(19888端口)
在任務詳情頁面點擊History鏈接,可以看到任務的歷史運行狀態(tài),在其中可以看到其Map任務和Reduce任務,也可以繼續(xù)點進Map和Reduce任務查看相關的日志等信息,對于程序出錯時的排查很有幫助。
4.3.2. 提交根據Monte Carlo蒙特卡羅算法求圓周率的示例程序
1、提交程序
hadoop jar /export/server/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.4.jar pi 3 1000
hadoop jar 表示向YARN提交一個Java程序;
/export/server/hadoop-3.3.4/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.4.jar 表示所要提交的程序路徑;
pi 表示運行的Java類名;
3 表示使用3個Map任務;
1000 表示樣本數為1000,樣本數越多,求得的圓周率越準確,但是程序運行時長越長。
運行日志如下所示:文章來源:http://www.zghlxwxcb.cn/news/detail-761760.html
[hadoop@node1 ~]$ hadoop jar /export/server/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.4.jar pi 3 1000
Number of Maps = 3
Samples per Map = 1000
Wrote input for Map #0
Wrote input for Map #1
Wrote input for Map #2
Starting Job
2023-12-14 16:06:12,042 INFO client.DefaultNoHARMFailoverProxyProvider: Connecting to ResourceManager at node1/192.168.88.101:8032
2023-12-14 16:06:13,550 INFO mapreduce.JobResourceUploader: Disabling Erasure Coding for path: /tmp/hadoop-yarn/staging/hadoop/.staging/job_1702538855741_0002
2023-12-14 16:06:13,888 INFO input.FileInputFormat: Total input files to process : 3
2023-12-14 16:06:14,149 INFO mapreduce.JobSubmitter: number of splits:3
2023-12-14 16:06:14,658 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_1702538855741_0002
2023-12-14 16:06:14,659 INFO mapreduce.JobSubmitter: Executing with tokens: []
2023-12-14 16:06:15,065 INFO conf.Configuration: resource-types.xml not found
2023-12-14 16:06:15,065 INFO resource.ResourceUtils: Unable to find 'resource-types.xml'.
2023-12-14 16:06:15,256 INFO impl.YarnClientImpl: Submitted application application_1702538855741_0002
2023-12-14 16:06:15,403 INFO mapreduce.Job: The url to track the job: http://node1:8089/proxy/application_1702538855741_0002/
2023-12-14 16:06:15,404 INFO mapreduce.Job: Running job: job_1702538855741_0002
2023-12-14 16:06:32,155 INFO mapreduce.Job: Job job_1702538855741_0002 running in uber mode : false
2023-12-14 16:06:32,156 INFO mapreduce.Job: map 0% reduce 0%
2023-12-14 16:06:47,156 INFO mapreduce.Job: map 67% reduce 0%
2023-12-14 16:06:50,188 INFO mapreduce.Job: map 100% reduce 0%
2023-12-14 16:06:57,275 INFO mapreduce.Job: map 100% reduce 100%
2023-12-14 16:06:58,328 INFO mapreduce.Job: Job job_1702538855741_0002 completed successfully
2023-12-14 16:06:58,589 INFO mapreduce.Job: Counters: 54
File System Counters
FILE: Number of bytes read=72
FILE: Number of bytes written=1108329
FILE: Number of read operations=0
FILE: Number of large read operations=0
FILE: Number of write operations=0
HDFS: Number of bytes read=786
HDFS: Number of bytes written=215
HDFS: Number of read operations=17
HDFS: Number of large read operations=0
HDFS: Number of write operations=3
HDFS: Number of bytes read erasure-coded=0
Job Counters
Launched map tasks=3
Launched reduce tasks=1
Data-local map tasks=3
Total time spent by all maps in occupied slots (ms)=39354
Total time spent by all reduces in occupied slots (ms)=7761
Total time spent by all map tasks (ms)=39354
Total time spent by all reduce tasks (ms)=7761
Total vcore-milliseconds taken by all map tasks=39354
Total vcore-milliseconds taken by all reduce tasks=7761
Total megabyte-milliseconds taken by all map tasks=40298496
Total megabyte-milliseconds taken by all reduce tasks=7947264
Map-Reduce Framework
Map input records=3
Map output records=6
Map output bytes=54
Map output materialized bytes=84
Input split bytes=432
Combine input records=0
Combine output records=0
Reduce input groups=2
Reduce shuffle bytes=84
Reduce input records=6
Reduce output records=0
Spilled Records=12
Shuffled Maps =3
Failed Shuffles=0
Merged Map outputs=3
GC time elapsed (ms)=699
CPU time spent (ms)=11980
Physical memory (bytes) snapshot=775233536
Virtual memory (bytes) snapshot=10945183744
Total committed heap usage (bytes)=466890752
Peak Map Physical memory (bytes)=227717120
Peak Map Virtual memory (bytes)=2734153728
Peak Reduce Physical memory (bytes)=113000448
Peak Reduce Virtual memory (bytes)=2742722560
Shuffle Errors
BAD_ID=0
CONNECTION=0
IO_ERROR=0
WRONG_LENGTH=0
WRONG_MAP=0
WRONG_REDUCE=0
File Input Format Counters
Bytes Read=354
File Output Format Counters
Bytes Written=97
Job Finished in 46.895 seconds
Estimated value of Pi is 3.14133333333333333333
2、查看運行情況
在在YARN集群的監(jiān)控頁面,可以查看對應任務的History信息,可以看到當前任務使用了3個Map任務和1個Reduce任務,同時,也可以查看相應的運行日志信息。文章來源地址http://www.zghlxwxcb.cn/news/detail-761760.html
到了這里,關于Hadoop入門學習筆記——四、MapReduce的框架配置和YARN的部署的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!