1、
在搭建好hadoop,spark之后,提交第一次任務(wù)的時候就出現(xiàn)了錯誤。
在任務(wù)提交并創(chuàng)建之后,從8088看,任務(wù)一直處于ACCEPTED狀態(tài),而在shell中一直重復如下信息:
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)之后,整個任務(wù)完全失敗。查詢log,發(fā)現(xiàn)有如下錯誤信息:
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)看了一下,原來是對于yarn的內(nèi)存分配問題。
所以在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é)果并不如人意,沒有解決我的問題。
于是我加上如下代碼,修改檢查虛擬內(nèi)存的屬性為false
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
沒錯,修改完這些之后,問題就不再出現(xiàn)了,隨后便出現(xiàn)了其他問題
2、
我們知道,spark有三種運行方式,分別是local、standalone以及yarn模式,目前來說,這三種都會出現(xiàn)不同的問題,其中l(wèi)ocal和stantalone模式會出現(xiàn):
node1/192.168.10.100 to node1:8020 failed on connection exception的異常。
修改了很多,無濟于事。
而yarn模式出現(xiàn)了exitCode15的退出碼錯誤,任務(wù)一直處于Accepted,最后突然成功,然而沒有任何結(jié)果,同時會報出一個錯,exitCode15錯誤碼。
無法解決,只能看看我的配置是不是有沒有問題:
這時候我把spark-env.sh中的
export SPARK_YARN_USER_ENV="CLASSPATH=/usr/hadoop/hadoop2.5"
export SPARK_MASTER_IP=192.168.10.100
這兩句進行了注釋,便沒有了exidCode15錯誤。
3、
隨后,運行任務(wù)到最后一步,web端已經(jīng)顯示成功,但是還是冒出了如下錯誤
Exception in thread "main" java.lang.IllegalArgumentException: Log directory hdfs://node1:8020/sparkHistoryLogs does not exist.
仔細一想,之前在創(chuàng)建fs目錄的時候,由于教程中的hdfs端口是9000,而我的是8020,所以,那次創(chuàng)建目錄雖然沒有報錯,但是卻是失敗的。重新創(chuàng)建:
hadoop fs -mkdir hdfs://node1:8020/sparkHistoryLogs
之后再運行測試任務(wù),便沒有了錯誤,仔細一想,還是自己對于集群的各個參數(shù)沒有深入的了解導致的。
4、
目前來說,spark on Yarn運行任務(wù)是沒有問題了,但是其他兩種模式遇到的connection失敗問題還是遲遲沒有解決,暫時先略過,待對spark集群理解深入一些之后再來解決這個問題。