在本地将spark作业运行到远程集群

在本地IDE里直接运行spark程序操作远程集群

一般运行spark作业的方式有两种:

  • 本机调试,通过设置master为local模式运行spark作业,这种方式一般用于调试,不用连接远程集群。

  • 集群运行。一般本机调试通过后会将作业打成jar包通过spark-submit提交运行。生产环境一般使用这种方式。

本文介绍第3种方式:

  • 在本地将spark作业运行到远程集群中。这种方式比较少见,很多人认为不可行,包括我之前也是。经过试验发现是可行的,可以满足一些特定场景的需求。原理方面,可以参考这篇博客,
    http://blog.jasonding.top/2015/07/08/Spark/%E3%80%90Spark%E3%80%91Spark%E5%BA%94%E7%94%A8%E6%89%A7%E8%A1%8C%E6%9C%BA%E5%88%B6/,应该是将Driver运行在了本地,分布式计算则分发给各个节点。

操作方法

1.设置master

两种方式:

  • 在程序中设置
SparkConf conf = new SparkConf()
                .setAppName("helloworld")
                .setMaster("spark://192.168.130.15:7077");
  • 在run configuration中设置
VM options中添加:
-Dspark.master="spark://192.168.130.15:7077"

2.设置HDFS

在程序中使用HDFS路径,会出现文件系统不匹配hdfs,可以将集群中的hadoop配置中的core-site.xml和hdfs-site.xml拷贝到项目src/main/resources下

3.发送jar包

如果程序中使用了自定义的算子和依赖的jar包,需要将本项目jar包和依赖的jar包发送到集群中SPARK_HOME/jars目录下,可以用maven-assembly打成带依赖的jar包,spark的jars相当于mvn库。

注意集群中每个节点的jars目录下都要放自己的jar包。

可能遇到的问题

如果遇到了节点间通信问题,可能是jar包没有在所有节点放置好。

incompatible loaded等问题,是依赖的spark版本不匹配,修改dependency。

至此,就可以直接在IDE中运行了。

大家有兴趣的可以关注我的公众号《数据库漫游指南》,涉及分布式系统、大数据和个人成长分享,欢迎大家一起交流进步

在本地将spark作业运行到远程集群_第1张图片

你可能感兴趣的:(Spark)