

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Mejora del rendimiento de Hive
<a name="emr-hive-s3-performance"></a>

Amazon EMR ofrece características para ayudar a optimizar el rendimiento cuando se utiliza Hive para consultar, leer y escribir datos guardados en Amazon S3.

S3 Select puede mejorar el rendimiento de las consultas para archivos JSON y CSV en algunas aplicaciones “delegando” el procesamiento en Amazon S3.

El archivador optimizado para EMRFS S3 es una alternativa a la [OutputCommitter](https://hadoop.apache.org/docs/current/api/org/apache/hadoop/mapreduce/OutputCommitter.html)clase, que elimina las operaciones de enumeración y cambio de nombre para mejorar el rendimiento al escribir archivos en Amazon S3 mediante EMRFS.

**Topics**
+ [Habilitación del confirmador optimizado Hive EMRFS S3](hive-optimized-committer.md)
+ [Uso de S3 Select con Hive para mejorar el rendimiento](emr-hive-s3select.md)
+ [Optimización de MSCK](emr-msck-optimization.md)

# Habilitación del confirmador optimizado Hive EMRFS S3
<a name="hive-optimized-committer"></a>

El confirmador optimizado de Hive EMRFS S3 es una forma alternativa mediante la cual EMR Hive escribe archivos para consultas de inserción cuando se utiliza EMRFS. El confirmador elimina las operaciones de enumeración y cambio de nombre hechas en Amazon S3 y mejora el rendimiento de la aplicación. La característica está disponible a partir de EMR 5.34 y EMR 6.5.

## Habilitación del confirmador
<a name="enabling-hive-committer"></a>

Si desea habilitar EMR Hive para que se utilice `HiveEMRFSOptimizedCommitter` para confirmar datos de forma predeterminada para todas las tablas externas y administradas por Hive, utilice la siguiente configuración `hive-site` en los clústeres de EMR 6.5.0 o EMR 5.34.0.

```
[
   {
      "classification": "hive-site",
      "properties": {
         "hive.blobstore.use.output-committer": "true"
      }
   }
]
```

**nota**  
No active esta característica si `hive.exec.parallel` se ha establecido en `true`.

## Limitaciones
<a name="hive-committer-limitations"></a>

Se aplican las siguientes restricciones básicas a las etiquetas de :
+ No se admite la posibilidad de que Hive combine archivos pequeños automáticamente. La lógica de confirmación predeterminada de Hive se utilizará incluso cuando el confirmador optimizado esté activado.
+ No se admiten las tablas ACID de Hive. La lógica de confirmación predeterminada de Hive se utilizará incluso cuando el confirmador optimizado esté activado.
+ La nomenclatura de los nombres de los archivos escritos ha cambiado de `<task_id>_<attempt_id>_<copy_n>` de Hive a `<task_id>_<attempt_id>_<copy_n>_<query_id>`. Por ejemplo, un archivo llamado 

  `s3://warehouse/table/partition=1/000000_0` se cambiará a `s3://warehouse/table/partition=1/000000_0-hadoop_20210714130459_ba7c23ec-5695-4947-9d98-8a40ef759222-1`. `query_id` aquí es una combinación del nombre de usuario, la marca de tiempo y el UUID.
+ Cuando las particiones personalizadas se encuentran en diferentes sistemas de archivos (HDFS, S3), esta característica se deshabilita automáticamente. La lógica de confirmación predeterminada de Hive se utilizará cuando se active.

# Uso de S3 Select con Hive para mejorar el rendimiento
<a name="emr-hive-s3select"></a>

**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](https://aws.amazon.com/blogs/storage/how-to-optimize-querying-your-data-in-amazon-s3/) 

Con la versión 5.18.0 y posteriores de Amazon EMR, puede usar [S3 Select](https://aws.amazon.com/blogs/aws/s3-glacier-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, consulta [Especificación de S3 Select en el código](#emr-hive-s3select-specify).

## ¿S3 Select es adecuado para mi aplicación?
<a name="emr-hive-s3select-apps"></a>

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](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-glacier-select-sql-reference-data-types.html) 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
<a name="emr-hive-s3select-considerations"></a>
+ 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 archivos multilínea ni JSON CSVs.
+ 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](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-glacier-select-sql-reference-data-types.html) en la *Guía del usuario de Amazon Simple Storage Service*.

## Especificación de S3 Select en el código
<a name="emr-hive-s3select-specify"></a>

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.

**Example 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"
);
```

**Example 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"
);
```

**Example Instrucción SELECT TABLE**  

```
SET s3select.filter=true;
SELECT * FROM mys3selecttable WHERE col2 > 10;
```

# Optimización de MSCK
<a name="emr-msck-optimization"></a>

Hive almacena una lista de particiones para cada tabla en su metaalmacén. Sin embargo, cuando las particiones se agregan o se eliminan directamente del sistema de archivos, el metaalmacén de Hive no es consciente de estos cambios. El [comando MSCK](https://cwiki.apache.org/confluence/display/hive/languagemanual+ddl#LanguageManualDDL-RecoverPartitions(MSCKREPAIRTABLE)) actualiza los metadatos de las particiones en el metaalmacén de Hive para las particiones que se agregaron o eliminaron directamente del sistema de archivos. La sintaxis del comando es:

```
MSCK [REPAIR] TABLE table_name [ADD/DROP/SYNC PARTITIONS];
```

Hive implementa este comando de la siguiente manera:

1. Hive recupera todas las particiones de la tabla del metaalmacén. A partir de la lista de rutas de particiones que no existen en el sistema de archivos, crea una lista de particiones para eliminarlas del metaalmacén.

1. Hive recopila las rutas de las particiones presentes en el sistema de archivos, las compara con la lista de particiones del metaalmacén y genera una lista de las particiones que deben agregarse al metaalmacén.

1. Hive actualiza el metaalmacén mediante el modo `ADD`, `DROP` o `SYNC`.

**nota**  
Cuando hay muchas particiones en el metaalmacén, el paso para comprobar si una partición no existe en el sistema de archivos tarda mucho en ejecutarse, ya que la llamada a la API `exists` del sistema de archivos debe hacerse para cada partición.

En Amazon EMR 6.5.0, Hive introdujo un indicador llamado `hive.emr.optimize.msck.fs.check`. Cuando está activado, este indicador hace que Hive compruebe la presencia de una partición de la lista de rutas de partición del sistema de archivos que se generó en el paso 2 anterior, en lugar de hacer llamadas a la API del sistema de archivos. En Amazon EMR 6.8.0, Hive tenía esta optimización habilitada de forma predeterminada, lo que eliminaba la necesidad de establecer el indicador `hive.emr.optimize.msck.fs.check`.