使用外部 MySQL 数据库或 Amazon Aurora - Amazon EMR
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

使用外部 MySQL 数据库或 Amazon Aurora

要将外部 MySQL 数据库或 Amazon Aurora 用作您的 Hive 元数据仓,您可在 Hive 中覆盖该元数据仓的原定设置配置值,以指定外部数据库位置 – 要么在 Amazon RDS MySQL 实例上,要么在 Amazon Aurora PostgreSQL 实例上。

注意

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

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

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

  1. 创建 MySQL 或 Aurora PostgreSQL 数据库。如果您使用 PostgreSQL,则必须在预置集群之后对其进行配置。创建集群时只支持 MySQL。有关 Aurora MySQL 和 Aurora PostgreSQL 之间的区别的信息,请参阅 Amazon Aurora MySQL 概述使用 Amazon Aurora PostgreSQL。有关如何创建 Amazon RDS 数据库的一般信息,请参阅 https://aws.amazon.com/rds/

  2. 修改您的安全组,以允许在数据库与 ElasticMapReduce-Master 安全组之间建立 JDBC 连接。有关如何修改安全组以进行访问的信息,请参阅使用 Amazon EMR 托管式安全组

  3. hive-site.xml 中设置 JDBC 配置值:

    重要

    如果您提供敏感信息(如密码)至 Amazon EMR 配置 API,该信息将仅对拥有充分权限的账户显示。如果您担心此信息可能对其他用户显示,可通过创建以显式方式拒绝 elasticmapreduce:DescribeCluster API 密钥许可的角色来使用管理账户创建集群并限制其他用户 (IAM 用户或具有委派凭证的用户) 访问集群服务。

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

      hostname 代替运行数据库的 Amazon RDS 实例的 DNS 地址,以及数据库凭证的usernamepassword 。有关连接到 MySQL 和 Aurora 数据库实例的更多信息,请参阅《Amazon RDS 用户指南》https://docs.amazonaws.cn/AmazonRDS/latest/UserGuide/USER_ConnectToInstance.html中的连接到运行 MySQL 数据库引擎的数据库实例连接到 Athena 数据库集群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" } } ]
    2. 您创建集群时会引用 hiveConfiguration.json 文件,如以下 Amazon CLI 命令中所示。在此命令中,此文件存储在本地,您也可将此文件上传到 Amazon S3 并在此对其进行引用,例如 s3://DOC-EXAMPLE-BUCKET/hiveConfiguration.json

      注意

      为了便于读取,包含 Linux 行继续符(\)。它们可以通过 Linux 命令删除或使用。对于 Windows,请将它们删除或替换为脱字号(^)。

      aws emr create-cluster --release-label emr-5.34.0 --instance-type m5.xlarge --instance-count 2 \ --applications Name=Hive --configurations file://hiveConfiguration.json --use-default-roles
  4. 连接到集群的主节点。

    有关如何连接到主节点的信息,请参阅《Amazon EMR 管理指南》中的使用 SSH 连接到主节点

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

    CREATE EXTERNAL TABLE IF NOT EXISTS table_name ( key int, value int ) LOCATION s3://DOC-EXAMPLE-BUCKET/hdfs/
  6. 将 Hive 脚本添加到正在运行的集群。

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