spark消费kafka问题记录(cdh5.16.2)

4 篇文章 0 订阅
2 篇文章 0 订阅

 

版本如下

kafka和spark都安装完成后,执行spark2-shell竟然报错

Error: A JNI error has occurred, please check your installation and try again

网上搜大概是jdk版本的问题,添加环境变量可以解决

export SPARK_DIST_CLASSPATH=$(hadoop classpath)

命令行临时添加,试了试发现确实可以

 

7180改了spark配置,然后部署客户端配置,发现除了spark,别的服务都没问题

仅完成 0/3 个步骤。首个失败:主机 hadoop57 (id=5) 上的客户端配置 (id=46) 已使用 1 退出,而预期值为 0。

然后看stdout和stderr

也就是说spark没找到java,java明明配了环境变量

网上搜需要将jdk软链接到/usr/java/default(所有spark gateway节点执行)

ln -s /home/cdh/java/jdk1.8.0_221 /usr/java/default

看来spark只在固定路径去找jdk

再次部署客户端,发现没有问题

然后无需export SPARK_DIST_CLASSPATH=$(hadoop classpath)导入环境变量

发现spark2-shell也没报错

 

再说spark消费kafka的问题

我的依赖是这样的

<dependency>
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-core_2.11</artifactId>
    <version>2.3.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.spark/spark-streaming-kafka-0-10 -->
<dependency>
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-streaming-kafka-0-10_2.11</artifactId>
    <version>2.3.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.spark/spark-streaming -->
<dependency>
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-streaming_2.11</artifactId>
    <version>2.3.0</version>
</dependency>

bulid是这样的

<build>
    <sourceDirectory>src/main/java</sourceDirectory>
    <testSourceDirectory>src/test/java</testSourceDirectory>
    <plugins>
        <plugin>
            <groupId>org.scala-tools</groupId>
            <artifactId>maven-scala-plugin</artifactId>
            <executions>
                <execution>
                    <goals>
                        <goal>compile</goal>
                        <goal>testCompile</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <scalaVersion>2.11.3</scalaVersion>
                <args>
                    <arg>-target:jvm-1.8</arg>
                </args>
            </configuration>
        </plugin>
     </plugins>
</build>

然后打包,包只有几十k,提交集群

spark2-submit --master local --class com.spark.xxx  xxx.jar

发现缺包,然后缺什么把具体包放倒../java/jdk/jre/lib/ext/下最后发现缺

org/apache/spark/internal/Logging,这个问题是之前困扰我好久好久的问题

 

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/spark/streaming/kafka010/KafkaUtils$

 

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/spark/internal/Logging

 

当然这样处理本身是没什么问题的,比如maven项目有的包不是通过依赖管理的,而是手动添加到libraies,打包的时候是不会打到依赖包里的,手动放过去,也可以解决,比如数据库的驱动包,fastjson等

决定修改maven依赖把所有依赖包打成一个依赖包

在plugins添加2个plugin

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-assembly-plugin</artifactId>
    <version>2.4.1</version>
    <configuration>
        <!-- get all project dependencies -->
        <descriptorRefs>
            <descriptorRef>jar-with-dependencies</descriptorRef>
        </descriptorRefs>
        <!-- MainClass in mainfest make a executable jar -->
        <archive>
            <manifest>
                <!-- 这是我的主类-->
                <mainClass>com.spark.Kafka_Demo</mainClass>
            </manifest>
        </archive>
    </configuration>
    <executions>
        <execution>
            <id>make-assembly</id>
            <!-- bind to the packaging phase -->
            <phase>package</phase>
            <goals>
                <goal>single</goal>
            </goals>
        </execution>
    </executions>
</plugin>
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <configuration>
        <source>6</source>
        <target>6</target>
    </configuration>
</plugin>

然后再次打包,会打出来2个包

 

 

一个比较大的依赖包

然后再次提交

spark2-submit --master local --class com.spark.xxx --jars xxx-jar-with-dependencies.jar xxx.jar

又报错

Exception in thread "streaming-start" java.lang.NoSuchMethodError: org.apache.kafka.clients.consumer.KafkaConsumer.subscribe(Ljava/util/Collection;)V

网上搜说添加环境变量

export SPARK_KAFKA_VERSION=0.10

临时执行了下,发现确实可以,后来在7180把spark的配置改成0.10

部署客户端配置完,再次提交没问题了

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值