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

Amazon EMR 上的 Hive 的额外功能

Amazon EMR 通过支持 Hive 与其他 AWS 服务集成的新功能 (如读取和写入 Amazon Simple Storage Service (Amazon S3) 和 DynamoDB 的功能) 来扩展 Hive。

Amazon EMR Hive 查询可适应部分 DynamoDB 架构

在查询 DynamoDB 表时,Amazon EMR Hive 允许您指定一部分列作为数据筛选条件,而不要求您的查询包含所有列,因此可提供最大的灵活性。当采用稀疏数据库架构,并希望根据一些列来筛选记录 (例如根据时间戳筛选) 时,这种部分架构查询技术可以发挥作用。

以下示例显示了如何使用 Hive 查询执行下列操作:

  • 创建 DynamoDB 表。

  • 选择 DynamoDB 中的一部分项目 (行) 并进一步将数据范围缩小到特定列。

  • 将结果数据复制到 Amazon S3。

DROP TABLE dynamodb; DROP TABLE s3; CREATE EXTERNAL TABLE dynamodb(hashKey STRING, recordTimeStamp BIGINT, fullColumn map<String, String>) STORED BY 'org.apache.hadoop.hive.dynamodb.DynamoDBStorageHandler' TBLPROPERTIES ( "dynamodb.table.name" = "myTable", "dynamodb.throughput.read.percent" = ".1000", "dynamodb.column.mapping" = "hashKey:HashKey,recordTimeStamp:RangeKey"); CREATE EXTERNAL TABLE s3(map<String, String>) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LOCATION 's3://bucketname/path/subpath/'; INSERT OVERWRITE TABLE s3 SELECT item fullColumn FROM dynamodb WHERE recordTimeStamp < "2012-01-01";

下表显示了从 DynamoDB 中选择任意项目组合的查询语法。

查询范例 结果描述
table_name 中选择 *; 从指定表选择所有项目 (行) 并包括这些项目对应的所有列的数据。
table_name 中选择 *,其中 field_name =value 从指定表选择一些项目 (行) 并包括这些项目对应的所有列的数据。
table_name 中选择 column1_namecolumn2_namecolumn3_name 从指定表选择所有项目 (行) 并包括这些项目对应的一些列的数据。
table_name 中选择 column1_namecolumn2_namecolumn3_name,其中 field_name =value 从指定表选择一些项目 (行) 并包括这些项目对应的一些列的数据。

在不同 AWS 区域的 DynamoDB 表之间复制数据

Amazon EMR Hive 提供了可以为每个 DynamoDB 表设置的 dynamodb.region 属性。当两个表的 dynamodb.region 设置不同时,您在两个表之间执行的所有数据复制将自动在指定区域之间发生。

以下示例显示了如何通过用于设置 dynamodb.region 属性的 Hive 脚本创建 DynamoDB 表:

注意

每个表的 region 属性会覆盖全局 Hive 属性。

CREATE EXTERNAL TABLE dynamodb(hashKey STRING, recordTimeStamp BIGINT, map<String, String> fullColumn) STORED BY 'org.apache.hadoop.hive.dynamodb.DynamoDBStorageHandler' TBLPROPERTIES ( "dynamodb.table.name" = "myTable", "dynamodb.region" = "eu-west-1", "dynamodb.throughput.read.percent" = ".1000", "dynamodb.column.mapping" = "hashKey:HashKey,recordTimeStamp:RangeKey");

设置每个表的 DynamoDB 吞吐量值

Amazon EMR Hive 允许您在表定义中设置每个表的 DynamoDB readThroughputPercent 和 writeThroughputPercent 设置。以下 Amazon EMR Hive 脚本显示了如何设置吞吐量值。有关 DynamoDB 吞吐量值的更多信息,请参阅指定表的读取和写入要求

CREATE EXTERNAL TABLE dynamodb(hashKey STRING, recordTimeStamp BIGINT, map<String, String> fullColumn) STORED BY 'org.apache.hadoop.hive.dynamodb.DynamoDBStorageHandler' TBLPROPERTIES ( "dynamodb.table.name" = "myTable", "dynamodb.throughput.read.percent" = ".4", "dynamodb.throughput.write.percent" = "1.0", "dynamodb.column.mapping" = "hashKey:HashKey,recordTimeStamp:RangeKey");