Как удалить базу данных из хранилища метастаев кустов, когда базовый кластер HDFS больше не существует - PullRequest
0 голосов
/ 03 ноября 2018

Я работаю с эфемерными кластерами GCP Dataproc (Apache Spark 2.2.1, Apache Hadoop 2.8.4 и Apache Hive 2.1.1). Все эти кластеры указывают на один и тот же Hive Metastore (размещенный в экземпляре Google Cloud SQL).

Я создал базу данных на одном из таких кластеров и установил ее местоположение в 'HDFS: /// database_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'

Вероятно, это связано с тем, что в Has Metastore теперь есть запись о местоположении, которое не существует. Попытка удалить поврежденную базу данных также не нужна:

$ 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 больше не действителен. Поскольку изменение местоположения базы данных не является вариантом в используемой версии куста, мне нужен другой обходной путь для удаления этой базы данных.

Ответы [ 2 ]

0 голосов
/ 27 декабря 2018

С моей точки зрения, правильный способ удаления записи метасчета Hive, которая вызывает ошибку, - это удаление базы данных непосредственно перед удалением кластера my-first-ephemeral-cluster, например сценарий с такой последовательностью:

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 для настройки общего хранилища кустов между различными кластерами Dataproc с использованием облачного хранилища (вместо LOCATION 'hdfs: /// db_name', который создает хранилище кустов в локальная HDFS), которая может дать вам поведение, подобное тому, которое вы ищете.

0 голосов
/ 04 ноября 2018

https://cwiki.apache.org/confluence/display/Hive/Hive+MetaTool

Hive MetaTool позволяет администраторам выполнять массовые обновления на поля местоположения в записях базы данных, таблицы и раздела в metastore (...)

Пример (...)
./hive --service metatool -updateLocation hdfs://localhost:9000 hdfs://namenode2:8020

Но сначала вам нужно знать, как именно псевдо-HDFS-пути были сохранены в Metastore, в их «канонической» форме, например. hdfs://my-first-ephemeral-cluster-m/db_name (если Google немного придерживается стандартов Hadoop)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...