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)存储的。

热门文章

暂无图片
编程学习 ·

STM32开放式开发环境:释放创造力

市场上涌现各种价格亲民的经济型微控制器,助力新一代开发者创造令人兴奋的新型嵌入式应用。如今的开发工具非常好用,软硬件均呈现模块化趋势,插接安装简单容易,使得产品设计评估和原型开发周期大幅缩短。STM32开放式开发环境是业内独一无二的软硬件开发平台,堆叠式插接电路…
暂无图片
编程学习 ·

算法复杂度评价指标(大o表示法)

大O表示法(1)常见的大o数量级函数(2)其他算法复杂度表示法 基本操作数量函数T(n)的精确值并不是特别重要,重要的是Tn(n)中起决定性因素的主导部分。用动态的眼光看,就是当问题规模增大的时候,T(n)中的一些部分会盖过其他部分的贡献。 数量级函数描述了T(n)中随着n增加而…
暂无图片
编程学习 ·

python编程练习(小甲鱼)第6-10课

1.python中有两种除法运算,一种是真除,一种是floor除法,/ 是真除,保留浮点数,//是floor除法,去除浮点数保留整数 a = 30/4 #7.5 b = 30//4 #72.请写一个程序打印出 0~100 所有的奇数 for i in range(101):if i % 2==1:print(i)3.爱因斯坦曾出过这样一道有趣的数学题:有一…
暂无图片
编程学习 ·

CSS滚动指示器

一、CSS滚动指示器 滚动指示器指的是页面的顶端会有一个进度条,指示滚动的进度。效果如下GIF所示(点击播放):CSS滚动指示器指的是不借助JavaScript,纯CSS实现滚动进度效果。 二、传统的实现方法 传统CSS实现方法由一个名叫 Mike的人首先提出,时间应该是16年,这个CodePen…
暂无图片
编程学习 ·

SpringBoot问题集锦

问题一: SpringBoot应用部署在外置Tomcat中没有启动,无任何反应 解决办法:启动类继承SpringBootServletInitializer并实现configure方法;@SpringBootApplication public class PaysApplication extends SpringBootServletInitializer {@Overrideprotected SpringApplicatio…
暂无图片
编程学习 ·

基于stm32单片机温度报警器LCD1602液晶电子制作智能测量

演示视频:https://v.youku.com/v_show/id_XNDU3OTU0MDcwOA==.html 将链接复制至IE浏览器打开!!! 功能说明: 上电后,会一直显示测量出来的温度值,没有按键按下情况下一直会显示。 当温度超过高限或者低于下限会报警。 按下设置键后可以对高限底限进行设置。
暂无图片
编程学习 ·

Vue——09——v-for和key指令

遍历普通数组 <!DOCTYPE html> <html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><scri…
暂无图片
编程学习 ·

Python代码

hello world!!! import numpy as npfrom sklearn import linear_modelfrom mpl_toolkits.mplot3d import Axes3D import matplotlib.pyplot as pltxx, yy = np.meshgrid(np.linspace(0,10,10), np.linspace(0,100,10)) zz = 1.0 * xx + 3.5 * yy + np.random.randint(0,100,…
暂无图片
编程学习 ·

将现有Vue项目改为electron桌面端

零、前言之前看了看electron-vue,感觉还是存在一些问题的,比如electon的版本特别特别低,不能忍受。且如果你是用vue搭建的项目,最后希望能够打包成桌面端,其实很简单。一、基本步骤(1)创建vue项目、并进行开发vue create vueDemo(2)突然一天我想打包成桌面程序了// 进…
暂无图片
编程学习 ·

JavaOOP---异常

异常 简单来说异常就是程序中的一些错误或者说是不正常的存在。 首先异常分为两大类:Error:这种异常更该说是错误,是比较严重的一类错误。说严重,其实是因为这些错误是JVM监管范围外的,可以捕获它,但是JVM无法解决掉。比如,网线断了,或者计算机硬件之类的问题。 Except…
暂无图片
编程学习 ·

MyBatis中#{}和${}的区别详解 区别

区别1.#将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。如:order by #user_id#,如果传入的值是111,那么解析成sql时的值为order by "111", 如果传入的值是id,则解析成的sql为order by "id".2.将传入的数据直接显示生成在sql中。如:or…
暂无图片
编程学习 ·

葡萄酒分类

#加载数据 df = pd.read_csv("winequality-red.csv") df.head() #空值 df.isnull().any() df.describe()# 简单的数据统计 # 总酸度,把固定酸,挥发酸,柠檬酸三项合起来定义一个新的特征总酸量。 df[total acid] = df[fixed acidity] + df[volatile acidity] + df[…
暂无图片
编程学习 ·

GitHub Git bash 常用命令

这里写自定义目录标题1. 下载安装2. 设置GitHub用户信息3. 进入文件夹4. 仓库连接4.1 初始化本地仓库4.2 GitHub上新建一个仓库4.3 配置SSH Key4.3.1 没有的话4.3.2 有的话4.3.3 测试一下4.3 建立连接4.4 文件上传4.5 查看提交记录4.6 pull操作 1. 下载安装 点击下载windows版本…
暂无图片
编程学习 ·

Autosar4.4:通用架构模板 - 元建模模式与模型转换(2/3)

元模型化模式是参数化的结构,当将其应用于实际参数时,会产生规则的,非参数化的结构。 结构只是由关联和聚合关联的元类的集合。 模式的好处在于,它们允许重复使用重复结构,而无需重复其定义。 本章介绍元建模模式的概念,以及它们在AUTOSAR元模型中的使用和表示法。 另一个…