前言
sparkStreaming程序在本地IDEA 测试完以后,要到服务器上部署程序并运行,今天来测试下在服务器上提交以及遇到的问题
具体操作
具体思路
这边的具体思路是使用依赖包上传到hdfs上,使用spark的 --jars参数来添加依赖。然后maven打包只打包相关代码就可以,不需要添加依赖。
1、pom文件中的build
具体pom的bulid
<build>
<plugins>
<plugin>
<groupId>org.scala-tools</groupId>
<artifactId>maven-scala-plugin</artifactId>
<version>2.15.2</version>
<executions>
<execution>
<goals>
<goal>compile</goal>
<goal>testCompile</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.6</version>
</plugin>
</plugins>
</build>
2、提交参数
这里只是给出示例,和spark-submit提交普通程序的样式一样
/opt/beh/core/spark/bin/spark-submit --master yarn --class com.example.testspark.sparkstreaming.Demo --num-executors 2 --executor-memory 4g --executor-cores 2 --jars hdfs:///user/zgh/jars/spark-streaming-kafka-0-10_2.11-2.4.1.jar,hdfs:///user/zgh/jars/kafka-clients-2.5.0.jar /home/hadoop/zgh/testspark-0.0.1-SNAPSHOT.jar
遇到的问题
1、缺少依赖包
java.lang.NoClassDefFoundError: org/apache/kafka/common/serialization/StringDeserializer
org.apache.spark.internal.Logging.(Lorg/apache/spark/internal/Logging;)V
这种缺少依赖包的问题是因为maven打包没有添加依赖,所以要是用spark的--jars参数 来添加jar (最好使用hdfs路径,本地路径的话需要在每个节点的本地都有这么个路径,不太方便)
2、Lost task 0.0 in stage 0.0 (TID 0, hebing2.novalocal, executor 1): java.io.IOException: unexpected exception type
版本不一致,集群上scala的版本是2.11 .但是我使用的maven依赖的版本是2.12。所以我将maven依赖的spark相关的依赖的scala版本改为了2.11
后续遗留问题
这种方式我觉得不是一样好的方式,虽然可以打包,可以运行。
存在的隐患在于:因为依赖具有传递性,我们不可能每次都根据报错把需要的jar包一点点的网上传。肯定有一种策略可以将所需要的打包。(这一块后续我在补充吧)。
网友评论