继上一篇文章中简单介绍了如何在本地调试SparkSQL,详细地址,接下来我们测试如何将该功能在集群上实现,毕竟我们生产生活中数据量是很大,需要借助集群来进行相关的功能
编译
首先,我们需要将代码中设置的测试参数注释掉,这里推荐在本地测试的时候设置AppName
以及Master
,而如果是想要在集群上运行,我们将对应的地方注释
//在测试或者生产中 AppName以及Master我们是通过脚本进行指定的(推荐)
//sparkConf.setAppName("SQLContextApp").setMaster("local[*]")
val sc = new SparkContext(sparkConf)
val sqlContext = new SQLContext(sc)
接下来我们进入项目所在的路径
cd /home/hadoop/Documents/IdeaProjects/XXXProject
然后输入
mvn clean package -DskipTests
这个过程可能会下载一些Jar包,耐心等待即可
OK,没什么问题
可以看到其中有一句
Building jar: /home/hadoop/Documents/IdeaProjects/XXXProject/target/sql-1.0.jar
那么编译的jar包就在这个路径,那么我们接下来要做的就是将这个jar包传到服务器进行测试,因为我这里是在本机搭建的服务器,所以就直接使用本机进行测试,如果你连接的是远程的服务器,你可以使用scp
命令进行上传
比如我现在要传到服务器根目录的/lib
目录下
首先我们在home
目录创建这个文件夹mkdir lib
然后进入jar
包所在目录上传scp sql-1.0.jar hadoop@slave02:/home/hadoop/lib
提交运行
这里使用spark-submit
提交运行具体的参数命令:
spark-submit \
--class path.to.your.main.class \
--master local[2] \
/home/hadoop/lib/sql-1.0.jar \
/usr/local/spark/examples/src/main/resources/people.json
这里我运行出了问题
查看日志,发现无法连接到主机,应该是集群的问题,我想起来我这台电脑之前配置的集群是一个子节点,不是主节点,于是通过ssh
登录到远程服务器,并将本地的jar包上传到服务器的/data/driverLib
目录下
然后在服务器上重新运行,又出现了以下错误:
这时候仔细看输出应该是读取的输入路径不正确,原来指定的参数默认在服务器上是到**HDFS**
文件系统中读取文件,OK,简单,我直接把文件上传到HDFS
上应该就可以了
hadoop fs -put /usr/local/spark-2.2.1/examples/src/main/resources/people.json hdfs://your/hdfs/path
这里涉及到HDFS
相关命令的使用
所有的问题应该都解决了,好,开始运行
完美 输出!!!!!
参考:
https://spark.apache.org/docs/2.0.0/submitting-applications.html