将 S3 Select 与 Hive 结合使用以提高查询性能 - Amazon EMR

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

将 S3 Select 与 Hive 结合使用以提高查询性能

重要

不再向新客户提供 Amazon S3 Select。Amazon S3 Select 的现有客户可以像往常一样继续使用该功能。了解更多

在亚马逊EMR发布版本 5.18.0 及更高版本中,您可以在亚马逊上将 S3 Selec t 与 Hive 配合使用。EMRS3 Select 可让应用程序仅从对象检索数据子集。对于亚马逊来说EMR,筛选大型数据集进行处理的计算工作从集群 “向下” 推送到 Amazon S3,这可以提高某些应用程序的性能并减少在 Amazon EMR 和 Amazon S3 之间传输的数据量。

基于CSV和JSON文件的 Hive 表以及在 Hive 会话true期间将s3select.filter配置变量设置为,即可支持 S3 Select。有关更多信息以及示例,请参阅 在代码中指定 S3 Select

S3 Select 是否适合我的应用程序?

建议您分别在使用和不使用 S3 Select 的情况下测试您的应用程序,以查看 S3 Select 是否适用于您的应用程序。

使用以下准则来确定您的应用程序是否为使用 S3 Select 的候选项:

  • 您的查询将筛选掉原始数据集的一半以上的数据。

  • 您的查询筛选谓词使用具有 Amazon S3 Select 支持的数据类型的列。有关更多信息,请参阅《Amazon Simple Storage Service 用户指南》中的数据类型

  • 您的 Amazon S3 和 Amazon EMR 集群之间的网络连接具有良好的传输速度和可用带宽。Amazon S3 不压缩响HTTP应,因此压缩后的输入文件的响应大小可能会增加。

注意事项和限制

  • 不支持使用客户提供的加密密钥 (SSE-C) 的 Amazon S3 服务器端加密和客户端加密。

  • 不支持 AllowQuotedRecordDelimiters 属性。如果指定该属性,则查询将失败。

  • 仅支持CSV和 UTF -8 格式的JSON文件。不支持多JSON行CSVs和。

  • 仅支持未压缩文件或 gzip、或 bzip2 文件。

  • 不支持最后一行中的注释字符。

  • 文件末尾的空行不会被处理。

  • Amazon 上的 Hive EMR 支持 S3 Select 支持的原始数据类型。有关更多信息,请参阅《Amazon Simple Storage Service 用户指南》中的数据类型

在代码中指定 S3 Select

要在 Hive 表中使用 S3 Select,请通过将 com.amazonaws.emr.s3select.hive.S3SelectableTextInputFormat 指定为 INPUTFORMAT 类名称以及使用 TBLPROPERTIES 子句为 s3select.format 属性指定一个值,来创建表。

默认情况下,S3 Select 在您运行查询时处于禁用状态。通过在您的 Hive 会话中将 s3select.filter 设置为 true 来启用 S3 Select,如下所示。以下示例演示了如何在从底层CSV和JSON文件创建表,然后使用简单的 select 语句查询表时指定 S3 Select。

例 CREATETABLECSV基于表的语句
CREATE TABLE mys3selecttable ( col1 string, col2 int, col3 boolean ) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' STORED AS INPUTFORMAT 'com.amazonaws.emr.s3select.hive.S3SelectableTextInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' LOCATION 's3://path/to/mycsvfile/' TBLPROPERTIES ( "s3select.format" = "csv", "s3select.headerInfo" = "ignore" );
例 CREATETABLEJSON基于表的语句
CREATE TABLE mys3selecttable ( col1 string, col2 int, col3 boolean ) ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe' STORED AS INPUTFORMAT 'com.amazonaws.emr.s3select.hive.S3SelectableTextInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' LOCATION 's3://path/to/json/' TBLPROPERTIES ( "s3select.format" = "json" );
例 SELECTTABLE声明
SET s3select.filter=true; SELECT * FROM mys3selecttable WHERE col2 > 10;