

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 使用外部 MySQL 数据库或 Amazon Aurora
<a name="emr-hive-metastore-external"></a>

要使用外部 MySQL 数据库或 Amazon Aurora 作为 Hive 元数据仓，可以覆盖 Hive 中元数据仓的默认配置值，以指定外部数据库位置，无论是在亚马逊 RDS MySQL 实例还是 Amazon Aurora Postgre 上。SQLinstance

**注意**  
Hive 既不支持对元存储表的并发写入访问权限，也不阻止此权限。如果要在两个集群间共享元数据仓信息，您必须确保不会同时写入同一元数据仓表，除非您要写入同一元数据仓表的不同分区。

以下步骤介绍了如何覆盖 Hive 元数据仓位置的默认配置值和使用重新配置的元数据仓位置启动集群。

**创建位于 EMR 集群外的元数据仓**

1. 创建 MySQL 或 Aurora PostgreSQL 数据库。如果您使用 PostgreSQL，则必须在预置集群之后对其进行配置。创建集群时只支持 MySQL。有关 Aurora MySQL 和 Aurora PostgreSQL 之间的区别的信息，请参阅 [Amazon Aurora MySQL 概述](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraMySQL.Overview.html)和[使用 Amazon Aurora PostgreSQL](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraPostgreSQL.html)。有关如何创建 Amazon RDS 数据库的总体信息，请参阅[https://aws.amazon.com/rds/](https://aws.amazon.com/rds/)。

1. 修改您的安全组以允许您的数据库和 **ElasticMapReduce-Master** 安全组之间的 JDBC 连接。有关如何修改安全组以进行访问的信息，请参阅[使用 Amazon EMR 托管式安全组](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-man-sec-groups.html)。

1. 在 `hive-site.xml` 中设置 JDBC 配置值：
**重要**  
如果您提供敏感信息（如密码）至 Amazon EMR 配置 API，该信息将仅对拥有充分权限的账户显示。如果您担心此信息可能对其他用户显示，可通过创建以显式方式拒绝 `elasticmapreduce:DescribeCluster` API 密钥许可的角色来使用管理账户创建集群并限制其他用户 (IAM 用户或具有委派凭证的用户) 访问集群服务。

   1. 创建一个名为 `hiveConfiguration.json` 的配置文件，该文件包含对 `hive-site.xml` 的编辑，如以下示例所示。

       *hostname*替换为运行数据库的 Amazon RDS 实例的 DNS 地址，*username*并*password*替换为数据库的证书。有关连接到 MySQL 和 Aurora 数据库实例的更多信息，请参阅*《Amazon RDS 用户指南》*中的[连接到运行 MySQL 数据库引擎的数据库实例](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_ConnectToInstance.html)和[连接到 Athena 数据库集群](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Aurora.Connect.html)。`javax.jdo.option.ConnectionURL` 是 JDBC 元存储的 JDBC 连接字符串。`javax.jdo.option.ConnectionDriverName` 是 JDBC 元存储的驱动程序类名。

      MySQL JDBC 驱动程序由 Amazon EMR 进行安装。

      值属性不能包含任何空格或回车。所有内容应显示在一行中。

      ```
      [
          {
            "Classification": "hive-site",
            "Properties": {
              "javax.jdo.option.ConnectionURL": "jdbc:mysql://hostname:3306/hive?createDatabaseIfNotExist=true",
              "javax.jdo.option.ConnectionDriverName": "org.mariadb.jdbc.Driver",
              "javax.jdo.option.ConnectionUserName": "username",
              "javax.jdo.option.ConnectionPassword": "password"
            }
          }
        ]
      ```

   1. 创建集群时引用该`hiveConfiguration.json`文件，如以下 AWS CLI 命令所示。在此命令中，此文件存储在本地，您也可将此文件上传到 Amazon S3 并在此对其进行引用，例如 `s3://DOC-EXAMPLE-BUCKET/hiveConfiguration.json`。
**注意**  
为了便于读取，包含 Linux 行继续符（\$1）。它们可以通过 Linux 命令删除或使用。对于 Windows，请将它们删除或替换为脱字号（^）。

      ```
      aws emr create-cluster --release-label emr-7.12.0 --instance-type m5.xlarge --instance-count 2 \
      --applications Name=Hive --configurations file://hiveConfiguration.json --use-default-roles
      ```

1. 连接到集群的主节点。

   有关如何连接到主节点的信息，请参阅《Amazon EMR 管理指南》**中的[使用 SSH 连接到主节点](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-connect-master-node-ssh.html)。

1. 通过输入类似以下内容的命令，创建在 Amazon S3 上指定位置的 Hive 表：

   ```
   CREATE EXTERNAL TABLE IF NOT EXISTS table_name
   (
   key int,
   value int
   )
   LOCATION s3://DOC-EXAMPLE-BUCKET/hdfs/
   ```

1. 将 Hive 脚本添加到正在运行的集群。

您的 Hive 集群使用 Amazon RDS 中的元数据运行。通过指定该元数据仓位置，启动共享该元数据仓的所有其他 Hive 集群。