首页 > 解决方案 > 使用远程元存储在亚马逊 EMR 中创建 s3 外部表

问题描述

我们最近开始在一个新项目(版本 emr-5.11.0)中使用 Amazon EMR。我们在 EMR 集群中进行了一些架构更改

1) 我们将 metastore 移动到另一个 Postgres 实例而不是默认的 mysql/derby

2) 在不同的实例(不是亚马逊 EMR 集群的一部分)中运行 Metastore 服务,并在 hive-site.xml 中进行必要的更改。

在电子病历中

stop hive-hcatalog-server

在新实例中

hive --service metastore

除了“s3 外部表”之外,一切都按预期工作。当我尝试创建一个外部 s3 表时,它给我们一个如下所示的错误

message:java.lang.RuntimeException: java.lang.ClassNotFoundException: Class org.apache.hadoop.fs.s3a.S3AFileSystem not found

我们尝试使用带有凭据的 s3/s3n/s3a 来创建外部表。如果我们在 EMR 主节点内运行 Metastore 服务并运行相同的查询。它可以正常工作。我们是否需要在 Metastore 实例中进行任何配置/添加其他库才能正常工作?

注意:metastore 实例同时具有 Apache hadoop 和 hive 最新二进制文件。我们将使用 HDFS 文件系统。能够执行除外部 s3 表之外的所有操作。从直线和 hive CLI 尝试了所有操作

标签: hadoopamazon-s3hiveamazon-emrhcatalog

解决方案


推荐阅读