You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 06:05:22