0

2 つのクラスターがあり、1 つは古いもの、もう 1 つは新しいものです。どちらも AWS - EMR 上にあります。RDS 上にある同じ Hive メタストアを指すこれらのクラスター上の Hive。古いものから新しいものへと移行しています。

問題は、古いクラスターを停止すると、古いテーブルへのアクセスに問題が発生するかどうかです。" すべてのデータは S3 にあります。すべてのテーブルは外部にあります。しかし、データベースは HDFS にあります..

hdfs://old:1234/user/hive/warehouse/myfirst.db

古いクラスターを停止すると、この場所が無効になり、データベースとテーブルが無効になりますか? それらは外部的ですが。

これが問題になるかどうかはわかりませんが、これは本番環境にあるため、すでにこの問題に直面している人がいるかどうかを調べています.

ありがとう!

4

1 に答える 1

0

すべてのテーブルで LOCATION が S3 に設定されている限り、DATABASE/SCHEMA の場所が失われてもメタデータへのアクセスには影響しません。

新しいクラスターに与える唯一の影響は、明示的な LOCATION なしでカスタム データベース (この例では "myfirstdb") で実行される CREATE TABLE ステートメントが、DATABASE の場所から継承されるデフォルトの HDFS パスに到達できないことです。

「デフォルト」スキーマで作成されたテーブルは、Hive が新しいテーブルの場所をプロパティ「hive.metastore.warehouse.dir」の値 (Elastic MapReduce では「/user/hive/warehouse」) に解決するため、失敗しません。 .

繰り返しになりますが、これは、作成時に明示的に LOCATION が設定されたテーブルには影響しません。

一般に、完全に「移植可能な」メタストアを実現するには、次のことを行います。

  • すべてのテーブルで LOCATION が S3 に設定されていることを確認してください (HDFS 内のデータは明らかにクラスターのライフサイクルにバインドされています)。これは、次の方法で実現できます。
    • CREATE TABLE ステートメントで LOCATION を明示的に設定するか、
    • すべてのデータベース/スキーマ (「デフォルト」以外) の LOCATION を S3 のパスに設定する
  • 必要に応じて (ただし、強くお勧めします) EXTERNAL (ユーザー管理または非管理) テーブルを使用して、DDL ステートメントによる偶発的なデータ損失を防ぎます。
于 2015-10-16T14:35:35.153 に答える