0

我们有两个集群,一个是旧的,一个是新的。他们都在 AWS - EMR 上。这些集群上的 Hive 指向 RDS 上的相同 Hive 元存储。我们正在从旧迁移到新。

现在的问题是,如果我停止旧集群,访问旧表会有任何问题吗?" 所有数据都在 S3 上。所有表都是外部的。但数据库仍然在 HDFS 上......就像

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

如果我停止旧集群,这个位置是无效的,这使得 db 和表无效?尽管它们是外部的。

我真的不确定这是否会成为一个问题,但这是在生产中,所以我试图找出是否有人已经遇到过这个问题。

谢谢!

4

1 回答 1

0

只要所有表的 LOCATION 都设置为 S3,丢失 DATABASE/SCHEMA 的位置不会影响对元数据的访问。

它对新集群的唯一影响是在自定义数据库(在您的示例中为“myfirstdb”)中执行的 CREATE TABLE 语句没有明确的 LOCATION 将无法到达从 DATABASE 位置继承的默认 HDFS 路径。

在“默认”模式中创建的表不会失败,因为 Hive 会将新表的位置解析为属性“hive.metastore.warehouse.dir”的值,即 Elastic MapReduce 中的“/user/hive/warehouse” .

同样,这不会影响在创建时设置了显式 LOCATION 的表。

一般来说,要实现一个完全“便携”的 Metastore,您需要做的是:

  • 确保所有 TABLES 都将 LOCATION 设置为 S3(HDFS 中的任何数据显然都绑定到集群生命周期)。这可以通过以下方式实现:
    • 在 CREATE TABLE 语句中显式设置 LOCATION 或
    • 将所有 DATABASE/SCHEMAS(“默认”除外)的 LOCATION 设置为 S3 中的路径
  • 可选(但强烈推荐)使用 EXTERNAL(用户管理的,也就是非管理的)表来防止由于 DDL 语句导致的意外数据丢失
于 2015-10-16T14:35:35.153 回答