1、
在搭建好hadoop,spark之后,提交第一次任務(wù)的時(shí)候就出現(xiàn)了錯(cuò)誤。
在任務(wù)提交并創(chuàng)建之后,從8088看,任務(wù)一直處于ACCEPTED狀態(tài),而在shell中一直重復(fù)如下信息:
17/04/03 16:43:24 INFO yarn.Client: Application report for application_1491208536792_0001 (state: ACCEPTED)
直到
17/04/03 16:43:25 INFO yarn.Client: Application report for application_1491208536792_0001 (state: FAILED)
出現(xiàn)之后,整個(gè)任務(wù)完全失敗。查詢log,發(fā)現(xiàn)有如下錯(cuò)誤信息:
Application application_1491211547264_0001 failed 2 times due to AM Container for appattempt_1491211547264_0001_000002 exited with exitCode: -103 due to: Container [pid=3122,containerID=container_1491211547264_0001_02_000001] is running beyond virtual memory limits. Current usage: 84.7 MB of 1 GB physical memory used; 2.2 GB of 2.1 GB virtual memory used. Killing container.
Dump of the process-tree for container_1491211547264_0001_02_000001 :
|- PID PPID PGRPID SESSID CMD_NAME USER_MODE_TIME(MILLIS) SYSTEM_TIME(MILLIS) VMEM_USAGE(BYTES) RSSMEM_USAGE(PAGES) FULL_CMD_LINE 。
上網(wǎng)看了一下,原來(lái)是對(duì)于yarn的內(nèi)存分配問(wèn)題。
所以在yarn-site.xml中增加了如下配置代碼
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>100000</value>
</property>
<property>
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>10000</value>
</property>
<property>
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>3000</value>
</property>
<property>
<name>mapreduce.reduce.memory.mb</name>
<value>2000</value>
</property>
但是結(jié)果并不如人意,沒(méi)有解決我的問(wèn)題。
于是我加上如下代碼,修改檢查虛擬內(nèi)存的屬性為false
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
沒(méi)錯(cuò),修改完這些之后,問(wèn)題就不再出現(xiàn)了,隨后便出現(xiàn)了其他問(wèn)題
2、
我們知道,spark有三種運(yùn)行方式,分別是local、standalone以及yarn模式,目前來(lái)說(shuō),這三種都會(huì)出現(xiàn)不同的問(wèn)題,其中l(wèi)ocal和stantalone模式會(huì)出現(xiàn):
node1/192.168.10.100 to node1:8020 failed on connection exception的異常。
修改了很多,無(wú)濟(jì)于事。
而yarn模式出現(xiàn)了exitCode15的退出碼錯(cuò)誤,任務(wù)一直處于Accepted,最后突然成功,然而沒(méi)有任何結(jié)果,同時(shí)會(huì)報(bào)出一個(gè)錯(cuò),exitCode15錯(cuò)誤碼。
無(wú)法解決,只能看看我的配置是不是有沒(méi)有問(wèn)題:
這時(shí)候我把spark-env.sh中的
export SPARK_YARN_USER_ENV="CLASSPATH=/usr/hadoop/hadoop2.5"
export SPARK_MASTER_IP=192.168.10.100
這兩句進(jìn)行了注釋,便沒(méi)有了exidCode15錯(cuò)誤。
3、
隨后,運(yùn)行任務(wù)到最后一步,web端已經(jīng)顯示成功,但是還是冒出了如下錯(cuò)誤
Exception in thread "main" java.lang.IllegalArgumentException: Log directory hdfs://node1:8020/sparkHistoryLogs does not exist.
仔細(xì)一想,之前在創(chuàng)建fs目錄的時(shí)候,由于教程中的hdfs端口是9000,而我的是8020,所以,那次創(chuàng)建目錄雖然沒(méi)有報(bào)錯(cuò),但是卻是失敗的。重新創(chuàng)建:
hadoop fs -mkdir hdfs://node1:8020/sparkHistoryLogs
之后再運(yùn)行測(cè)試任務(wù),便沒(méi)有了錯(cuò)誤,仔細(xì)一想,還是自己對(duì)于集群的各個(gè)參數(shù)沒(méi)有深入的了解導(dǎo)致的。
4、
目前來(lái)說(shuō),spark on Yarn運(yùn)行任務(wù)是沒(méi)有問(wèn)題了,但是其他兩種模式遇到的connection失敗問(wèn)題還是遲遲沒(méi)有解決,暫時(shí)先略過(guò),待對(duì)spark集群理解深入一些之后再來(lái)解決這個(gè)問(wèn)題。