今天在将本地idea当中的代码提交到远程的spark集群的时候,出现了下面的错误
看到这个错的第一反应就是集群本地和spark的通讯是不是正常的,因为我们通过本地提交任务的时候启动了spark_ui界面这个相当于在本地进行操作的,相当于spark的client。但是真正的执行者又是在集群当中。所以两者之间的
话的通讯是必须保持畅通的。
(本地提交到spark集群的代码的运行方式大致是这样的,其实他和submit的运行方式是一样的,只是在本地的idea当中运行了而已,他也是通过加载jar包的形式提交到远程的集群当中大致的代码如下;
SparkConf conf = new SparkConf().setAppName("programdept").setMaster("spark://10.100.200.11:7077") --这里是一standlone的模式进行运行的 .set("spark.submit.deployMode", "client") --这设置的以client的方式进行运行的。 .set("spark.executor.cores","2") --这里设置的是spark运行的核心数,但是这里不要操作集群当中的单台机器的核心数。否则就会包内存不足的情况 .set("spark.executor.memory","1024M") --这里设置的单个work上面的内存的分配情况 .setJars(new String[]{"E:\datahouse\sparkonstandlone.jar"}); --这个就是能在本地运行的核心所在,这个jar包其实也是可以通过submit的方式进行提交到集群上面进行运行的。这里只是把他设置为参数上传上去而已。
)
最后的解决方式如下(这是我自己的解决方法,可以自己的情况而定):
(1)在Linux服务器上面先ping一下Linux服务器是不是和本地的服务器是否可以ping通。
(2)然后在本地ping一下本地和远程的机器上面的地址能不能ping的通。
---------说到这里,我两边都ping过了,两边都是通的,这里两边都关闭防火墙了。但是测试还是不通的,于是我就想是不是网络两边还是不通啊。
然后那我将就使用telnet的命令,看远端和本地Windows上面的端口号是不是通的。
Linux服务器上的telnet命令安装
yum list telnet* 列出telnet相关的安装包
yum install telnet-server 安装telnet服务
yum install telnet.* 安装telnet客户端
windows上面的直接百度解决。
然后这里命令都装上我就启动程序,效果如下;
在这里我们看到两边的地址和端口是不通的。这时候我判断肯定是网路不同的导致,问了一下运维果不其然,所有的端口默认关闭的肯定连不上。端口打开之后,我们在来看效果:
至此通过window远程提交任务打集群当中,spark的程序正常运行。