我的spark部署模式是standalone-cluster,IP分别为:129,130,131,129为Master, 本文主要是将相关配置的注意事项进行记录,相关配置 文件如下:

1、spark-env.sh

spark邮箱验证失败 spark无法登录163邮箱_spark邮箱验证失败

2、spark-default.conf(之前报错,配置过,然后又注销掉了)

spark邮箱验证失败 spark无法登录163邮箱_spark_02

 

之前使用spark-shell、spark-submit碰到的异常有以下:

1、driver端绑定不了端口,尝试16次后失败('Service 'sparkDriver' can't bind onport after retry 16 times

2、can't not find Main Class,找到不提交的程序的主类入口; 

网上找的资料,解决方试尝试过几种 :

1、修改spark-default.conf,指定driver端口,发现然并卵,还是报错,所以我又注销掉了;

2、修改spark-env.sh ,设置 SPARK_LOCAL_IP=127.0.0.1,发现然并卵,还是报错;

最后怀疑是不是程序写的有问题,修改了程序写法,手动指定spark.driver.port等等 参数,错误依旧。

所以为了查找问题,首先重新写了一下程序,删除原有项目,将代码目录进行了调整按照 com.myapp.test1 目录建包,把src目录设置为源代码文件,其实代码很简单,如下:

spark邮箱验证失败 spark无法登录163邮箱_jar包_03

然后打包,打包的时候之前没有注意几个选项, 这次特别留意了,如下图:

spark邮箱验证失败 spark无法登录163邮箱_jar包_04

 

这里要注意看 Main.Class这里的类名称,spark-submit要用的,scala、spark的jar包不用打包,服务器上己经有了。这样打好包,我的jar文件名是sparks.jar,上传到hdfs中(后面会说为什么上传)。 

针对之前spark-driver无法绑定的问题,我又百度修改了一下/etc/sysconfig/network这个文件,增加了一行:

HOSTSNAME  hserver1(我是用的这个名称) 

submit语句:

./spark-submit --master spark://10.10.10.129:7077 --class test1.MyCount  hdfs://10.10.10.129:9000/data/input/sparks.jar

 这里要注意一个问题:一定要先把jar包上传到集群,像我刚接触不是太懂的时候,上百度查,很多人的jar包路径直接是写的本地服务器路径(例如:/var/ftp/pub/这种),这个其实应该是跟spark的集群模式有关,如果是local模式,spark所有节点才可以从本地访问路径,如果是分开在网络中的集群,必须要确保所有节点能访问,否则会报找不到jar包文件的异常,我刚开始不理解,试了几次才明白。

按以上submit 语句执行后,在webui查看,成功执行了,再也没有任何异常。 

总结及原因分析:

1、最大的问题首先是在IDea中打 jar 包的时候就错了,要注意包路径名及jar包依赖,只把程序文件打出来即可;

2、对/etc/sysconfig/network可能也起了一定作用,因为我把spark-env.sh 、 spark-default.conf文件全部还原配置后,还是可以的,说明不是配置文件的问题。

HOSTSNAME  hserver1(我是用的这个名称)

额外:看官网说明 spark-submit 还有一个--deploy-mode参数  由于各种报错,之前没有办法尝试,本次尝试以后才理解了一点。其实官网己经有过说明了。

spark邮箱验证失败 spark无法登录163邮箱_spark邮箱验证失败_05

 

standalone-client  standalone-cluster ,如果是client端便于与work节点间网络通信的,就用client模式,如果是距离的传输,就使用cluster模式,从集群中安排driver,这样client在提交完程序以后就可以了。