HDP2.6.5中PySpark创建的Hive数据库无法在Hive View2.0显示求助
HDP2.6.5中PySpark创建的Hive数据库无法在Ambari Hive View和Zeppelin中显示的解决方法
问题场景
在HDP2.6.5环境中执行以下PySpark代码创建Hive数据库testdb和表test3,代码执行无报错,Spark Shell中能正常查询到数据库和表,但Ambari的Hive View2.0中仅能看到default和foodmart数据库,切换用户、重启Hive服务后问题依旧,同时需要让该数据库在Zeppelin中也能正常使用。
执行的PySpark代码:
from pyspark import SparkContext,SparkConf from pyspark.sql import SQLContext, SparkSession, HiveContext conf = SparkConf().set("spark.jars.packages","org.mongodb.spark:mongo-spark-connector_2.11:2.3.2") spark = SparkSession.builder \ .appName("test") \ .getOrCreate() df = spark.read.option("multiline", "true").json("hdfs://sandbox-hdp.hortonworks.com:8020/user/maria_dev/output2.json") #Database on Hive spark.sql("create database testdb") print('Voici le Dataframe : ', df) df.write.mode("overwrite").saveAsTable("testdb.test3") spark.sql("SHOW DATABASES").show() df = spark.sql("SELECT * FROM testdb.test3") df.show()
Spark Shell中查询结果:
+---------+ |namespace| +---------+ | default| | testdb| +---------+
解决方法
1. 启用Spark Session的Hive支持
当前Spark Session未显式绑定Hive Metastore,默认使用Spark内置的元数据存储(Derby),而非Hive共享元数据。修改Spark Session初始化代码,添加.enableHiveSupport():
spark = SparkSession.builder \ .appName("test") \ .enableHiveSupport() \ # 新增该行,绑定Hive Metastore .getOrCreate()
重新执行代码创建数据库和表,确保元数据写入Hive的共享Metastore。
2. 检查Hive Metastore权限与配置
- 登录Ambari进入Hive服务的
Configs页面,确认hive-site.xml中的hive.metastore.uris配置,确保Spark使用的Metastore地址与Hive服务一致。 - 验证数据库权限:在Hive Shell或Ambari Hive View中执行以下命令,确保当前用户对
testdb有访问权限:
SHOW GRANT ON DATABASE testdb; -- 若权限不足,执行授权 GRANT ALL ON DATABASE testdb TO USER maria_dev;
3. 刷新元数据缓存
- 在Ambari Hive View中点击右上角刷新按钮,或执行SQL命令刷新数据库元数据:
REFRESH DATABASE testdb;
- 重启Spark Thrift Server服务(Ambari中Spark2服务操作),确保Zeppelin的Spark interpreter能获取最新元数据。
4. 配置Zeppelin的Spark Interpreter
- 进入Zeppelin的Spark interpreter设置,将
spark.sql.catalogImplementation配置值设为hive(默认可能为in-memory)。 - 重启Zeppelin interpreter后,执行
SHOW DATABASES;查询,确认testdb是否显示。
5. 验证HDFS仓库目录
Hive数据库默认存储在HDFS的/apps/hive/warehouse目录,检查testdb对应目录是否存在且权限正确:
hdfs dfs -ls /apps/hive/warehouse/testdb.db hdfs dfs -ls /apps/hive/warehouse/testdb.db/test3
若目录不存在,需确认Spark的spark.sql.warehouse.dir配置与Hive的hive.metastore.warehouse.dir一致。
内容的提问来源于stack exchange,提问作者Codew1213
相关产品推荐
相关产品推荐

