首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >配置单元: create database fail,错误为'database exists‘

配置单元: create database fail,错误为'database exists‘
EN

Stack Overflow用户
提问于 2018-12-19 06:36:31
回答 1查看 1K关注 0票数 2

我有一个测试套件,它运行几个spark单元测试。这些测试中的每一个都共享相同的底层spark上下文。在运行这些测试期间,我检查数据库是否存在,如果不存在,则创建它:

代码语言:javascript
复制
def dbExists(db: String) = spark.sql(s"show databases like '$db'").count > 0

if (!dbExists(db)) spark.sql(s"create database $db")

由于某些原因,其中一个测试失败了。调试时,我看到某个数据库的dbExists(db)返回false,创建命令失败,返回

代码语言:javascript
复制
ERROR RetryingHMSHandler:159 - AlreadyExistsException(message:Database db already exists)
at org.apache.hadoop.hive.metastore.HiveMetaStore$HMSHandler.create_database(HiveMetaStore.java:891)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

每次测试开始时,我都会为每个非缺省数据库清理运行drop database db cascade的环境。我能给出的唯一解释是,一些损坏的元数据在目录中,spark sql认为数据库存在,而它不再存在。

这个问题也发生在一个容器中,其中包含项目的新git克隆,这意味着它不是之前运行的应用程序可能会污染环境。

我在启用配置单元支持的情况下运行。

EN

回答 1

Stack Overflow用户

发布于 2019-12-19 23:16:38

试试这个:

你说的完全正确,在创建之前检查数据库的存在是很重要的。这应该会起作用,并且会更容易让蜂窝检查。

代码语言:javascript
复制
def dbExists(db: String) = spark.sql(s"show databases like '$db'").count > 0

spark.sql(s"create database if not exists $db")

这对你来说应该是可行的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53842136

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档