spark-submit碰到的坑(持续更新)

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

1、spark-env.sh

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

 

之前使用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目录设置为源代码文件,其实代码很简单,如下:

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

 

这里要注意看 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参数  由于各种报错,之前没有办法尝试,本次尝试以后才理解了一点。其实官网己经有过说明了。

 

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

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值