spark在集群提交sparkStreaming程序

2020-07-21  本文已影响0人  早点起床晒太阳

参考资料
https://dongkelun.com/2018/06/19/sparkSubmitKafka/

前言

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.init(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包一点点的网上传。肯定有一种策略可以将所需要的打包。(这一块后续我在补充吧)。

上一篇下一篇

猜你喜欢

热点阅读