栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

解决Spark读取Hive的数据库,只能读取到default

解决Spark读取Hive的数据库,只能读取到default

​ 问题原因:按照网上的诸多博客等想使用Spark直接读取Hive,但不使用Hivejdbc的方式,在导入两个xml之后只能读取到default这个数据库,按照诸多网上的教程,修改xml还是未能起到作用(hive不能称为一个数据库,只是习惯了,下次一定改)

01.文件拷贝

​ 上传core-site.xml,hive-site.xml到spark/conf目录下,core-site.xml在Hadoop种,hive-site.xml在hive中

(base) [root@192 conf]# ls -al
总用量 304
drwxr-xr-x.  2 zzjz zzjz   4096 3月  25 08:25 .
drwxr-xr-x. 13 zzjz zzjz    211 2月   3 2020 ..
-rw-r--r--.  1 root root   1529 3月  25 08:24 core-site.xml
-rw-r--r--.  1 zzjz zzjz    996 2月   3 2020 docker.properties.template
-rw-r--r--.  1 zzjz zzjz   1105 2月   3 2020 fairscheduler.xml.template
-rw-r--r--.  1 root root 257572 3月  25 08:25 hive-site.xml
-rw-r--r--.  1 zzjz zzjz   2025 2月   3 2020 log4j.properties.template
-rw-r--r--.  1 zzjz zzjz   7801 2月   3 2020 metrics.properties.template
-rw-r--r--.  1 zzjz zzjz    865 2月   3 2020 slaves.template
-rw-r--r--.  1 zzjz zzjz   1292 2月   3 2020 spark-defaults.conf.template
-rwxr-xr-x.  1 root root   4406 1月  25 19:40 spark-env.sh
-rwxr-xr-x.  1 zzjz zzjz   4221 2月   3 2020 spark-env.sh.template
02.pyspark测试

​ 使用pyspark读取hive数据库

from pyspark.sql import SparkSession
spark = SparkSession.builder.config("spark.driver.host","192.168.1.10")
    .config("spark.ui.showConsoleProgress","false")
    .appName("ReadHive").master("local[*]").getOrCreate()
spark.sql("show databases").show()

​ 输出:结果只显示default这个数据库

​ 实际上hive数据库不只是default

03.尝试解决 3.1.在hive-site.xml中关闭版本验证(失败)

	hive.metastore.schema.verification
	false

​ 结果:并未起到作用

3.2.配置元数据库信息(失败)

​ 登陆mysql,我是将部署在docker容器中的mysql数据库作为hive的元数据库

​ 修改hive metastore版本(下面为原始情况,尝试过很多改动,都无济于事):


    hive.metastore.uris
    
    Thrift URI for the remote metastore. Used by metastore client to connect to remote metastore.
  

​ 结果还是解决不了,还会报错

3.3.交互式环境测试(正常)

​ 使用交互式终端试试能不能查找到其他的数据库

scala> sc.setLogLevel("ERROR")

scala> spark.sql("show databases").show()
22/03/25 11:21:36 ERROR ObjectStore: Version information found in metastore differs 2.3.0 from expected schema version 1.2.0. Schema verififcation is disabled hive.metastore.schema.verification so setting version.
+-------------+
| databaseName|
+-------------+
|      default|
|hive_test_one|
|hive_test_two|
+-------------+


scala>

​ 结果:明显是可以的,那么问题就一定出现在自己的代码上

3.4.最终解决方案(成功)

​ 通过查看SparkSession的Builder类,找到一个一眼看上去就是的方法enableHiveSupport()

​ 看一下源码中的描述:

def enableHiveSupport(self):
	"""Enables Hive support, including connectivity to a persistent Hive metastore, support for Hive SerDes, 		and Hive user-defined functions.
    """
	return self.config("spark.sql.catalogImplementation", "hive")

​ 我们加上这个再次在pyspark中进行测试:

from pyspark.sql import SparkSession
spark = SparkSession.builder.config("spark.driver.host","192.168.1.10")
    .config("spark.ui.showConsoleProgress","false")
    .appName("ReadHive").master("local[*]").enableHiveSupport().getOrCreate()
spark.sql("show databases").show()

​ 结果:成功加载了其他的数据库

​ 但是前面很多HiveConf的警告,使用sc设置日志级别

spark.sparkContext.setLogLevel("Error")
04.在idea上配置 4.1.文件放置

​ 首先就需要将之前的core-site.xml和hive-site.xml放置在resource目录下,由于这边log4j.properties有之前配的日志级别等,所以就不会像pycharm那样生成很多HiveConf的运行日志了

4.2.代码测试

​ 同样加上enableHiveSupport()去Builder一个SparkSession对象

​ 下面使用Scala语言进行测试非default的hive_test_one表

package GadaiteGroupID.HiveSQLT

import org.apache.spark.sql.SparkSession

object ReadHive extends App {
  val spark = SparkSession.builder().config("spark,driver.host","192.168.1.10")
    .config("spark.ui.showConsoleProgress","false").master("local[*]")
    .appName("readhive").enableHiveSupport().getOrCreate()
  val HDF = spark.sql("select * from `hive_test_one`.`seeds_dataset`")
  HDF.show()
  HDF.printSchema()
}

​ 结果:能够输出

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/784877.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号