Spark运行方式不同导致无法识别Hive数据库问题求助
问题:Spark Submit脚本无法显示所有Hive数据库
Spark的运行方式会影响Hive数据库的可见性,我执行了以下三个操作:
- 1. 直接使用Hive CLI
hive> show databases; OK default mydb sparkdb Time taken: 0.041 seconds, Fetched: 3 row(s)
- 2. 使用pyspark3 Shell
Using Python version 3.6.9 (default, Feb 28 2023 09:55:20) Spark context Web UI available at http://training.us-west4-b.c.ace-sight-379210.internal:4040 Spark context available as 'sc' (master = yarn, app id = application_1678451025755_0002). SparkSession available as 'spark'. >>> spark.sql(""" show databases; """) 23/03/10 12:24:55 WARN HiveConf: HiveConf of name hive.stats.jdbc.timeout does not exist 23/03/10 12:24:55 WARN HiveConf: HiveConf of name hive.stats.retries.wait does not exist +---------+ |namespace| +---------+ | default| | mydb| | sparkdb| +---------+
- 3. 使用spark3-submit提交脚本
脚本内容:
from pyspark.sql import SparkSession spark = SparkSession.builder.master("yarn").appName("Test").getOrCreate() print(spark.sql(""" show databases """))
执行命令:spark3-submit --master=yarn script.py
输出结果:
+---------+ |namespace| +---------+ | default| +---------+
疑问:第三种方法无法显示所有数据库,我已经将hive-site.xml复制到spark/conf目录,且第二种方法运行正常,请问问题出在哪里?
分析与解决办法
核心原因:pyspark Shell默认自动启用Hive支持,会自动加载Hive配置并关联Hive metastore;但通过spark-submit提交的脚本,默认构造的SparkSession不会主动启用Hive支持,导致只能访问默认的default数据库。
解决步骤:
- 显式启用Hive支持:修改脚本中的SparkSession构建代码,添加
enableHiveSupport()配置,同时注意用show()方法打印DataFrame内容(print只会输出对象信息,不会打印数据):from pyspark.sql import SparkSession spark = SparkSession.builder \ .master("yarn") \ .appName("Test") \ .enableHiveSupport() # 关键:启用Hive支持 .getOrCreate() spark.sql("show databases").show() - 集群配置检查:
- 确保YARN集群所有节点的spark/conf目录都存在
hive-site.xml,或者提交脚本时通过--files参数携带该文件:spark3-submit --master=yarn --files /path/to/hive-site.xml script.py - 验证提交脚本的用户权限,需与Hive CLI、pyspark Shell使用的用户权限一致,权限不足会导致无法访问非默认数据库。
- 确保YARN集群所有节点的spark/conf目录都存在
- 显式启用Hive支持:修改脚本中的SparkSession构建代码,添加
内容的提问来源于stack exchange,提问作者Gatto Nou
相关产品推荐
相关产品推荐

