关于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里的数据库 就可对数据库进操作了