关于spark通过idea提交任务到集群的操作,本地机器和远程的spark集群的网络不同的操作。

今天在将本地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的程序正常运行。

 

posted on 2018-12-13 20:05  gxg123  阅读(1139)  评论(0编辑  收藏  举报

导航