Amazon EMR
Amazon EMR 版本指南
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。请点击 Amazon AWS 入门,可查看中国地区的具体差异

使用外部 MySQL 数据库或 Amazon Aurora

要使用外部 MySQL 数据库或 Amazon Aurora 作为您的 Hive 元数据仓,您可在 Hive 中覆盖该元数据仓的默认配置值,以在 Amazon RDS MySQL 实例或 Amazon Aurora 实例上指定外部数据库位置。

注意

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

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

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

  1. 创建 MySQL 或 Aurora 数据库。

    有关如何创建 Amazon RDS 数据库的信息,请参阅 http://amazonaws.cn/rds/

  2. 修改您的安全组,以允许在数据库与 ElasticMapReduce-Master 安全组之间建立 JDBC 连接。

    有关如何针对访问权限修改安全组的信息,请参阅 http://amazonaws.cn/rds/faqs/#security

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

    1. 重要

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

      创建名为 hiveConfiguration.json 的配置文件,其中包含对 hive-site.xml 所做的修改:

      [ { "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" } } ]

      注意

      对于 Amazon EMR 4.0.0 或更低版本,所用的驱动程序为 org.mysql.jdbc.Driver (适用于 javax.jdo.option.ConnectionDriverName)。

      在下面的 AWS CLI 命令中使用 hiveConfiguration.json 以创建集群:

      aws emr create-cluster --release-label emr-5.4.0 --instance-type m3.xlarge --instance-count 2 \ --applications Name=Hive --configurations ./hiveConfiguration.json --use-default-roles

      注意

      包含了 Linux 行继续符 (\) 以提高可读性。可以在 Linux 命令中删除或使用它们。对于 Windows,请删除它们或将其替换为脱字号 (^)。

      注意

      如果您打算将配置存储在 Amazon S3 中,则必须指定对象的 URL 位置。例如:

      aws emr create-cluster --release-label emr-5.4.0 --instance-type m3.xlarge --instance-count 3 \ --applications Name=Hive --configurations https://s3.amazonaws.com/mybucket/myfolder/hiveConfiguration.json --use-default-roles

      hostname 是运行数据库的 Amazon RDS 实例的 DNS 地址。<username> 和 <password> 是数据库的凭证。有关连接到 MySQL 和 Aurora 数据库实例的更多信息,请参阅 Amazon Relational Database Service User Guide 中的连接到运行 MySQL 数据库引擎的数据库实例连接到 Athena 数据库集群javax.jdo.option.ConnectionURL 是 JDBC 元数据仓的 JDBC 连接字符串。javax.jdo.option.ConnectionDriverName 是 JDBC 元数据仓的驱动程序类名。

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

      注意

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

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

    有关连接到主节点的说明,请参阅 使用 SSH 连接主节点 (在 Amazon EMR 管理指南 中)

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

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

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