Spark1.x升级Spark2.x常见异常Kafka篇【TopicMetadataRequest】

一.原因分析

当Spark从1.x升级到2.x时,如果使用SparkStreaming加载Kafka的数据,即使Kafka版本没有变化【一般会有所升级】,对应的spark-streaming-kafka也必须升级到对应版本,访问方式也会有所变化。
此处是从Spark1.6.0升级到Spark2.4.3,Kafka略有升级【从2.1.0升级到2.2.1】,初始使用的是:

import org.apache.spark.streaming.kafka.KafkaUtils

val dframe = KafkaUtils.createDirectStream[String, String, StringDecoder, StringDecoder](ssc, kafkaParams, topic)

来加载数据的,当升级后,就算是更换对应的spark-streaming-kafka-0-10_2.11-2.4.3还是会报错,报错信息如下:

Spark Streaming: java.lang.NoClassDefFoundError:kafka/api/TopicMetadataRequest

或者是各种类找不到!

二.解决方案

此时就需要更换新的访问方式:

import org.apache.spark.streaming.kafka010.ConsumerStrategies.Subscribe
import org.apache.spark.streaming.kafka010.KafkaUtils
import org.apache.spark.streaming.kafka010.LocaltionStrategies.PreferConsistent

val dframe = KafkaUtils.createDirectStream[String, String](ssc, PreferConsistent, Subscribe[String, String](topic, kafkaParams))

三.注意事项

1.spark1.6.0使用方式:

dframe.foreachRDD(rdd =>{
	rdd.foreachPartition(partition =>{
		partition.foreach(record => {
			val key = record._1
			val value = record._2 
		}
	}
}

2.spark2.4.x使用方式:

dframe.foreachRDD(rdd =>{
	rdd.foreachPartition(partition =>{
		partition.foreach(record => {
			val key = record.key()
			val value = record.value() 
		}
	}
}

备注:kafka里面的每条数据都是按照(key, value)存储的。

热门文章

暂无图片
编程学习 ·

【面试】如果你这样回答“什么是线程安全”,面试官都会对你刮目相看

不是线程的安全 面试官问:“什么是线程安全”,如果你不能很好的回答,那就请往下看吧。 论语中有句话叫“学而优则仕”,相信很多人都觉得是“学习好了可以做官”。然而,这样理解却是错的。切记望文生义。 同理,“线程安全”也不是指线程的安全,而是指内存的安全。为什么如…
暂无图片
编程学习 ·

HBase环境搭建

前提 Hadoop环境 Zookeeper集群上传解压HBase压缩包 #解压hbase tar -zxvf hbase-0.98.12.1-hadoop2-bin.tar.gz#重命名 mv hbase-0.98.12.1-hadoop2 hbase-0.98#移动至/opt/spurce/目录下 mv hbase-0.98 /opt/source/修改配置文件 配置RegionServer,把集群节点添加到regionse…
暂无图片
编程学习 ·

Docker学习(一)

一、docker安装环境Ubuntu16.04 x64二、docker安装安装过程需要获取外网资源包,因此首先需要配置本地服务器DNS追加这两个DNS nameserver 8.8.8.8 nameserver 8.8.4.4Ubuntu配置DNS参考: https://blog.csdn.net/deep_kang/article/details/79599796 https://blog.csdn.net/wa…
暂无图片
编程学习 ·

Video Summarization with Long Short-Term Memory论文翻译

基于长短期记忆网络的视频摘要 文章目录基于长短期记忆网络的视频摘要Abstract1 introduction2 Related Work3 Approach3.1 Problem Statement3.2 Long Short-Term Memory (LSTM)3.3 vsLSTM for Video Summarization3.4 Enhancing vsLSTM by Modeling Pairwise Repulsiveness3…
暂无图片
编程学习 ·

Flink Table API运用与UDF实现

本文使用Table Api实现word count,自定义UDF实现单词切割。 object TestUDFByWordCount {def main(args: Array[String]): Unit = {val env = StreamExecutionEnvironment.getExecutionEnvironmentval settings = EnvironmentSettings.newInstance().useBlinkPlanner().inStrea…
暂无图片
编程学习 ·

idea+maven配置log4j详解

实现log4j打印日志依赖的jar包共3个,在pom.xml中加入相关依赖: <!-- 添加log4j日志相关jar包:共3个jar--><!-- https://mvnrepository.com/artifact/log4j/log4j --><dependency><groupId>log4j</groupId><artifactId>log4j</artifac…
暂无图片
编程学习 ·

LeetCode刷题之动态规划的解题方法及相关练习

从集合的角度来考虑DP问题,用某一个数来代表一类数线性DP: 快乐的LeetCode — 53.最大子序和快乐的LeetCode — 120. 三角形最小路径和多口味LeetCode — 63. 不同路径 II多味的LeetCode — 91. 解码方法区间DP问题 多味的LeetCode — 198. 打家劫舍多味的LeetCode — 300. 最…
暂无图片
编程学习 ·

Java四种访问权限从大大小排列

public:可以被所有其他类所访问 protected:自身、子类及同一个包中类可以访问 default:同一包中的类可以访问,声明时没有加修饰符,认为是friendly private:只能被自己访问和修改。 public: 具有最大的访问权限,可以访问任何一个在classpath下的类、接口、异常等。它往往…
暂无图片
编程学习 ·

屏蔽系统更新

win+r services.msc 改为禁用 恢复 -> 全改为无操作win + r gpedit.msc 找到windows 更新 中的 配置自动更新禁用掉注: 家庭版无法打开gpedit.msc 新建一个文本文档,名字随便取,编辑以下批处理内容,保存后将后缀名改为.bat ,右键使用管理员权限执行: @echo of…
暂无图片
编程学习 ·

软件测试(软件测试生命周期,描述一个bug,定义bug级别,bug生命周期,如何开始第一次测试,测试执行和bug管理,测试工作中的人际关系处理)

一、软件测试的生命周期 对比软件的生命周期和bug的生命周期 软件的生命周期:需求分析——计划——设计——编码——测试——运行维护 软件测试的生命周期:需求分析——测试计划——测试设计、测试开发——测试执行——测试评估 bug的生命周期: 软件测试&软件开发生…
暂无图片
编程学习 ·

URI URL URN 的区别

URIUniform Resource Identifier,是一个紧凑的字符串用来标示抽象或物理资源。 包括URL与URNURLUniform Resource Locator,是URI的子集,除了确定一个资源,还提供一种定位该资源的主要访问机制(如其网络“位置”)。 eg: http://www.ietf.org/rfc/rfc2396.txt 让URI能成为URL的…
暂无图片
编程学习 ·

JAVA笔记[2]20200701

JAVA笔记【2】对象与类继承 对象与类LocalDate类;static LocalTime now() 构造一个表示当前日期的对象 static LocalTime of(int year,int month,int day) 构造一个表示给定日期的对象 int getYear() int getMonthValue() int getDayOfMonth() 得到当前日期的年、月和日 DayOf…
暂无图片
编程学习 ·

机器学习 | 优秀Tensorflow开源项目汇总(上)

1、Open_model_zoo预先训练的深度学习模型和样本(高质量且快速)https://github.com/opencv/open_model_zoo2、Deep Learning In Productionhttps://github.com/ahkarami/Deep-Learning-in-Production3、AndroidtensorflowmachinelearningexampleAndroid TensorFlow机器学习示…
暂无图片
编程学习 ·

框架的一些常见问题

1,SpringMVC1,工作流程(客户端发送一个请求,到服务器响应信息回到客户端)DispatcherServlet,会随着容器的启动而启动2,SpringMVC+Spring这种开发模式的时候,会有两个容器两个容器,SpringMVC容器,Spring容器SpringMVC容器管理,controller,Handlermapping,ViewResol…
暂无图片
编程学习 ·

每日一题Day11 链式创建

基于链式存储结构的图书信息表的创建和输出 题目描述 定义一个包含图书信息(书号、书名、价格)的链表,读入相应的图书数据来完成图书信息 表的创建,然后统计图书表中的图书个数,同时逐行输出每本图书的信息。 输入描述 输入n+1 行,其中前 n 行是 n 本图书的信息(书号、书…
暂无图片
编程学习 ·

【北航操作系统笔记(完整版)】

文章目录简介启动过程boot存储管理1-2储存管理3-5进程与线程1进程三种基本状态:就绪状态、执行状态、阻塞状态(、挂起状态、挂起阻塞状态)同步和互斥2-4IO系统磁盘系统文件系统 简介 操作系统是一组管理计算机硬件资源的软件集合,它向计算机程序提供共性的服务。即是使用者…