使用外部 MySQL 数据库或 Amazon Aurora
要使用外部 MySQL 数据库或 Amazon Aurora 作为您的 Hive 元存储,您可在 Hive 中覆盖该元存储的默认配置值,以在 Amazon RDS MySQL 实例或 Amazon Aurora 实例上指定外部数据库位置。
注意
Hive 既不支持对元存储表的并发写入访问权限,也不阻止此权限。如果要在两个集群间共享元数据仓信息,您必须确保不会同时写入同一元数据仓表,除非您要写入同一元数据仓表的不同分区。
以下步骤介绍了如何覆盖 Hive 元数据仓位置的默认配置值和使用重新配置的元数据仓位置启动集群。
创建位于 EMR 集群外的元数据仓
-
创建 MySQL 或 Aurora 数据库。
有关如何创建 Amazon RDS 数据库的信息,请参阅 http://www.amazonaws.cn/rds/。
-
修改您的安全组,以允许在数据库与 ElasticMapReduce-Master 安全组之间建立 JDBC 连接。
有关如何针对访问权限修改安全组的信息,请参阅 http://www.amazonaws.cn/rds/faqs/#security。
-
在
hive-site.xml
中设置 JDBC 配置值:-
重要
如果您提供敏感信息至 Amazon EMR 配置 API,如密码,该信息将仅对拥有充分许可的账户显示。如果您担心此信息可能对其他用户显示,可通过创建以显式方式拒绝
elasticmapreduce:DescribeCluster
API 密钥许可的角色来使用管理账户创建集群并限制其他用户 (IAM 用户或具有委派凭证的用户) 访问集群服务。创建一个名为
hiveConfiguration.json
的配置文件,该文件包含对hive-site.xml
的编辑,如以下示例所示。<
hostname
> 是运行数据库的 Amazon RDS 实例的 DNS 地址。<username
> 和 <password
> 是数据库的凭证。有关连接到 MySQL 和 Aurora 数据库实例的更多信息,请参阅 Amazon RDS 用户指南中与运行 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" } } ]您创建集群时会引用
hiveConfiguration.json
文件,如以下 AWS CLI 命令中所示。在此命令中,此文件存储在本地,您也可将此文件上传到 Amazon S3 并在此对其进行引用,例如s3://mybucket/hiveConfiguration.json
。注意
包含了 Linux 行继续符 (\) 以提高可读性。可以在 Linux 命令中删除或使用它们。对于 Windows,请删除它们或将其替换为脱字号 (^)。
aws emr create-cluster --release-label emr-5.20.0 --instance-type m4.large --instance-count 2 \ --applications Name=Hive --configurations ./hiveConfiguration.json --use-default-roles
-
-
连接到集群的主节点。
有关如何连接主节点的信息,请参阅 Amazon EMR 管理指南中的使用 SSH 连接主节点。
-
通过输入类似以下内容的命令,创建在 Amazon S3 上指定了位置的 Hive 表:
CREATE EXTERNAL TABLE IF NOT EXISTS table_name ( key int, value int ) LOCATION s3://
mybucket/hdfs
/ -
将 Hive 脚本添加到正在运行的集群。
您的 Hive 集群使用 Amazon RDS 中的元数据仓运行。通过指定该元数据仓位置,启动共享该元数据仓的所有其他 Hive 集群。