Uso de S3 Select con Hive para mejorar el rendimiento - Amazon EMR

Uso de S3 Select con Hive para mejorar el rendimiento

importante

Amazon S3 Select ya no está disponible para los nuevos clientes. Los clientes actuales de Amazon S3 Select pueden seguir utilizando la característica de la forma habitual. Más información

Con la versión 5.18.0 y posteriores de Amazon EMR, puede usar S3 Select con Hive en Amazon EMR. S3 Select permite que las aplicaciones recuperen únicamente un subconjunto de datos de un objeto. Para Amazon EMR, el clúster “delega” en Amazon S3 el trabajo de computación de filtrar grandes conjuntos de datos para su procesamiento, lo que puede mejorar el rendimiento en algunas aplicaciones y reduce la cantidad de datos transferidos entre Amazon EMR y Amazon S3.

S3 Select es compatible con las tablas de Hive basadas en CSV y en archivos JSON, y permite establecer la variable de configuración s3select.filter en true durante la sesión de Hive. Para obtener más información y ejemplos, consulte Especificación de S3 Select en el código.

¿S3 Select es adecuado para mi aplicación?

Le recomendamos que realice un análisis comparativo sus aplicaciones con y sin S3 Select para ver si su uso puede ser adecuado para su aplicación.

Utilice las siguientes directrices para determinar si la aplicación es candidata a utilizar S3 Select:

  • La consulta filtra más de la mitad del conjunto de datos original.

  • Los predicados del filtro de consulta utilizan columnas que tienen un tipo de datos compatible con Amazon S3 Select. Para obtener más información, consulte Tipos de datos en la Guía del usuario de Amazon Simple Storage Service.

  • La conexión de red entre Amazon S3 y el clúster de Amazon EMR tiene una buena velocidad de transferencia y ancho de banda disponible. Amazon S3 no comprime las respuestas HTTP, por lo que es probable que el tamaño de la respuesta aumente en el caso de los archivos de entrada comprimidos.

Consideraciones y limitaciones

  • No se admiten el cifrado del servidor de Amazon S3 con claves de cifrado proporcionadas por el cliente (SSE-C) ni el cifrado del cliente.

  • No se admite la propiedad AllowQuotedRecordDelimiters. Si se especifica esta propiedad, se producirá un error en la consulta.

  • Solo se admiten archivos CSV y JSON en formato UTF-8. No se admiten los archivos CSV y JSON de varias líneas.

  • Solo se admiten los archivos sin comprimir o gzip o bzip2.

  • No se admiten los caracteres de comentario en la última línea.

  • Las líneas vacías al final de un archivo no se procesan.

  • Hive en Amazon EMR admite los tipos de datos primitivos admitidos por S3 Select. Para obtener más información, consulte Tipos de datos en la Guía del usuario de Amazon Simple Storage Service.

Especificación de S3 Select en el código

Para utilizar S3 Select en la tabla de Hive, cree la tabla especificando com.amazonaws.emr.s3select.hive.S3SelectableTextInputFormat como nombre de la clase INPUTFORMAT y especifique un valor para la propiedad s3select.format mediante la cláusula TBLPROPERTIES.

De forma predeterminada, S3 Select se deshabilita cuando se ejecutan consultas. Habilite S3 Select estableciendo s3select.filter en true en la sesión de Hive, tal y como se muestra a continuación. Los ejemplos que aparecen a continuación muestran cómo especificar S3 Select al crear una tabla a partir de archivos CSV y JSON subyacentes y, a continuación, consultar la tabla con una instrucción select sencilla.

ejemplo Instrucción CREATE TABLE para una tabla basada en CSV
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" );
ejemplo Instrucción CREATE TABLE para una tabla basada en JSON
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" );
ejemplo Instrucción SELECT TABLE
SET s3select.filter=true; SELECT * FROM mys3selecttable WHERE col2 > 10;