当底层hdfs集群不再存在时,如何从配置单元元存储中删除数据库

bvn4nwqk  于 2021-06-27  发布在  Hive
关注(0)|答案(2)|浏览(399)

我正在使用临时的gcpdataproc集群(apachespark2.2.1、apachehadoop2.8.4和apachehive2.1.1)。这些集群都指向同一个配置单元元存储(托管在googlecloudsql示例上)。
我在这样一个集群上创建了一个数据库,并将其位置设置为“hdfs:///database\u name”,如下所示:

$ gcloud dataproc jobs submit hive \
    -e "create database db_name LOCATION 'hdfs:///db_name'" \
    --cluster=my-first-ephemeral-cluster --region=europe-west1
``` `my-first-ephemeral-cluster` 然后删除了相关的hdfs。
在随后的所有集群上,出现了以下错误:

u'java.net.UnknownHostException: my-first-ephemeral-cluster-m'

这可能是因为配置单元元存储现在有一个不存在的位置条目。尝试删除损坏的数据库也是不可能的:

$ gcloud dataproc jobs submit hive
-e 'drop database db_name'
--cluster=my-second-ephemeral-cluster --region=europe-west1

Job [4462cb1d-88f2-4e2b-8a86-c342c0ce46ee] submitted.
Waiting for job output...
Connecting to jdbc:hive2://my-second-ephemeral-cluster-m:10000
Connected to: Apache Hive (version 2.1.1)
Driver: Hive JDBC (version 2.1.1)
18/11/03 13:40:04 [main]: WARN jdbc.HiveConnection: Request to set autoCommit to false; Hive does not support autoCommit=false.
Transaction isolation: TRANSACTION_REPEATABLE_READ
Error: Error while processing statement: FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. MetaException(message:java.lang.IllegalArgumentException: java.net.UnknownHostException: my-first-ephemeral-cluster-m) (state=08S01,code=1)
Closing: 0: jdbc:hive2://my-second-ephemeral-cluster-m:10000

原因是主人 `my-first-ephemeral-cluster-m` 不再有效。因为更改数据库的位置在我使用的配置单元版本中不是一个选项,所以我需要一个不同的解决方法来删除这个数据库。
hgb9j2n6

hgb9j2n61#

从我的观点来看,删除导致错误的配置单元元存储项的正确方法是在删除群集之前删除数据库我的第一个临时群集,例如,具有以下序列的脚本:

gcloud dataproc jobs submit hive -e 'drop database db_name' --cluster=my-first-ephemeral-cluster --region=europe-west1
gcloud dataproc clusters delete my-first-ephemeral-cluster

但是,我找到了cloud sql proxy的说明,它使用云存储(而不是在本地hdfs中创建配置单元仓库的位置'hdfs:///db\u name')在不同的dataproc集群之间设置一个共享配置单元仓库,这可能会给您提供一个类似您正在寻找的行为。

falq053o

falq053o2#

https://cwiki.apache.org/confluence/display/hive/hive+metatool
hivemetatool使管理员能够对metastore(…)中数据库、表和分区记录中的位置字段进行批量更新
示例(…) ./hive --service metatool -updateLocation hdfs://localhost:9000 hdfs://namenode2:8020 但首先,您需要知道伪hdfs路径是如何以“规范”形式保存在元存储中的。 hdfs://my-first-ephemeral-cluster-m/db_name (如果谷歌在某种程度上遵循hadoop标准)

相关问题