sparking Streaming version 2.3.2+kafka接收实时流数据找不到hive创建的数据库问题

本文介绍了在使用Spark Streaming version 2.3.2结合Kafka接收实时流数据时,遇到无法找到由Hive创建的数据库的问题。关键在于Spark多次创建SparkContext导致与Hive的整合失败。解决方案是确保先初始化SparkSession,并用其创建的变量来构建StreamingContext,以确保SparkContext支持Hive,从而能够正确查询和操作Hive数据库。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关于sparking Streaming version 2.3.2+kafka接收实时流数据找不到hive创建的数据库问题 。

当程序报错遇到bug 的时候 而你又求助于论坛的时候 不能着急!!!查看log或者把别人的文章认真看完 说不定你遭遇的问题别人也曾经入过坑并解决过
这是spark Streaming 2.3.2版本的官方demo
在这里插入图片描述
这个里 spark streamingContext的坑是
在这里插入图片描述
这里会创建一个SparkContext
这个StreamingContext()是spark Streaming的入口 当你想要把接收kafka后的数据进行hive存储到HDFS就需要在官方demo上加上enableHiveSupport()
在这里插入图片描述
也就是
spark 要整合hive 一般要这样写:

 val warehouseLocation = new File("spark-warehouse").getAbsolutePath
    val spark = SparkSession.builder().appName("youappName").
      config("spark.sql.warehouse.dir", warehouseLocation).enableHiveSupport().getOrCreate()

问题就出在这里 SparkSession.builder()又会创建一个sparkContext() 上面new sparkConf()—> StreamingContext()就已经创建了一个sparkContext 但是spark 只能使用一个SparkContext 这时spark默认使用先创建的sparkContext也就是new sparkConf()创建的这个sparkContext当你要使用spark整合hive进行大数据存储的时候sparkContext是不加入hive的支持的 所以不管你怎么查询创建新的数据库show databases的时候显示default
关于warehouseLocation 自己去度娘
解决办法:
程序的先初始化 SparkSession.builder()、在根据SparkSession.builder()创建的变量传入new StreamingContext() 来获取StreamingContext()
代码:

val warehouseLocation = new File("spark-warehouse").getAbsolutePath
val spark = SparkSession.builder().appName("kafkaConsumers").
  config("spark.sql.warehouse.dir", warehouseLocation).enableHiveSupport().getOrCreate()
val ssc = new StreamingContext(spark.sparkContext, Seconds(10))

这样的sparkContext就带有了hive的支持

这时候就的spark.sql(“show databases”)可以查询到了hive里的数据库 就可对数据库进操作了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值