在執(zhí)行wordcount時抹锄,初期使用簡單的單詞跑通程序后,嘗試使用腳本語言枢希,創(chuàng)建較大文件
首先創(chuàng)建一個腳本a.sh
vi a.sh
#!/bin/bash
for((i=0;i<100;i++))
do
cat input2.txt >> input1.txt
done
cat input2.txt >> input1.txt:將input2.txt 寫入input1.txt中
根據(jù)for循環(huán)可以看出該語句執(zhí)行了100遍
保存并退出
執(zhí)行該腳本
bash a.sh
創(chuàng)建好較大文件后瑞侮,即可按照常規(guī)步驟進行鞋既。
在執(zhí)行wordcount這一步時,出現(xiàn)如下報錯
從圖中可以看出當map任務執(zhí)行到50%時出現(xiàn)如下報錯信息
Container [pid-15709,containerI-container 1681734956168 _0001_01_00002] is running 534678016B beyond the 'VIRTUAL' memory limit. Current usage: 406.0 MB of 1 GB physical memory used: 26 GB of 21 GB virtual memory used. Killing container
正在運行超出“虛擬”內(nèi)存限制的 534678016B谍倦。當前使用情況:已用 406.0 MB 1 GB 物理內(nèi)存:已使用 26 B 的 21 GB 虛擬內(nèi)存塞赂。
參數(shù)分析
406.0MB:任務所占用的物理內(nèi)存
1GB:是mapreduce.map.memory.mb 設置的
26GB: 是程序占用的虛擬內(nèi)存
21GB: 是mapreduce.map.memory.db 乘以 yarn.nodemanager.vmem-pmem-ratio 得到的,其中yarn.nodemanager.vmem-pmem-ratio 是 虛擬內(nèi)存和物理內(nèi)存比例
報錯分析
按照配置來說32GB16core完全夠跑不足1GB的文件
通過分析可知container占用了26GB的虛擬內(nèi)存昼蛀,但是分配給container的卻只有21GB宴猾。所以kill掉了這個container圆存。
改正方法
在修改以下兩個配置后程序可以正常運行
在yarn-site.xml中添加
<property>
<name>mapreduce.map.memory.mb</name>
<value>2048</value>
</property>
<property>
<name>yarn.nodemanager.vmem-peme-ratio</name>
<value>3.0</value>
</property>
保存后,發(fā)送給其余從節(jié)點仇哆,重新啟動沦辙,即可正常運行!6锾蕖油讯!