一、报错信息
在Spark集群中的某台机器上执行spark-shell命令时,报错信息如下:
19/02/18 10:41:53 INFO retry.RetryInvocationHandler: Exception while invoking getClusterMetrics of class ApplicationClientProtocolPBClientImpl over rm2 after 1 fail over attempts. Trying to fail over after sleeping for 21745ms.
java.net.ConnectException: Call From rtiebc01/xx.xx.xx.xx to rtiebc02:23140 failed on connection exception: java.net.ConnectException: Connection refused; For more details see: http://wiki.apache.org/hadoop/ConnectionRefused
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at org.apache.hadoop.net.NetUtils.wrapWithMessage(NetUtils.java:791)
二、原因分析
1. Hadoop
Spark是基于Hadoop之上,首先检查Hadoop集群是否正常。
1) jps
Hadoop集群的各个节点执行上面命令,查看名称节点、数据节点是否启动正常
2)hdfs dfs -ls /
验证Hadoop集群是否能正常访问
2. Spark
通过第一步分析,Hadoop集群正常,那么就看下是不是Spark的问题了。
1)jps
查看Spark集群的各节点,Worker和Master进程是否正常启动;
2)启动Spark
cd $SPARK_HOME/sbin
./stop-all.sh
./start-all.sh
重新启动了Spark,检查Spark集群的其他节点时候,发现Worker进程并没有启动起来,这就是问题所在。
三、解决方案
1. 分析start-all.sh脚本执行过程
通过分析start-all.sh脚本执行过程,如上图,由于是其他节点的Worker进程没有启动,那么问题出在start-slaver.sh脚本执行时。
2. 分析start-slaver.sh脚本执行过程
slaves.sh用到了conf文件夹下的slaves文件,通过查看并没有发现这个文件。问题原因已锁定!
3. 创建slaves文件
cd $SPARK_HOME/conf
cp slaves.template slaves
4. 配置Worker节点
cd $SPARK_HOME/conf
vim slaves
# 将Worker节点的机器名按照一行一个输入
:x
5. 重新启动Spark集群
cd $SPARK_HOME/sbin
./stop-all.sh
./start-all.sh
再执行spark-shell命令,就一切正常了,enjoy IT!!!