Diferencias y consideraciones sobre Hive en Amazon EMR - Amazon EMR

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.

Diferencias y consideraciones sobre Hive en Amazon EMR

Diferencias entre Apache Hive en Amazon EMR y Apache Hive

En esta sección, se describen las diferencias entre Hive en Amazon EMR y las versiones predeterminadas de Hive disponibles en http://svn.apache.org/viewvc/hive/branches/.

Autorización de Hive

Amazon EMR admite Autorización de Hive para HDFS, pero no para EMRFS y Amazon S3. Los clústeres de Amazon EMR se ejecutan con la autorización desactivada de forma predeterminada.

Comportamiento de combinación de archivos de Hive con Amazon S3

Apache Hive combina archivos pequeños al final de un trabajo de solo mapeo si hive.merge.mapfiles es true y la combinación se activa solo si el tamaño de salida promedio del trabajo es inferior al ajuste hive.merge.smallfiles.avgsize. Hive en Amazon EMR tiene exactamente el mismo comportamiento si la ruta de salida final se encuentra en HDFS. Si la ruta de salida se encuentra en Amazon S3, se omite el parámetro hive.merge.smallfiles.avgsize. En esta situación, la tarea de combinación siempre se activa si hive.merge.mapfiles está definido en true.

Transacciones de ACID y Amazon S3

La versión 6.1.0 y posteriores de Amazon EMR admiten transacciones de ACID (atomicidad, coherencia, aislamiento y durabilidad) de Hive, por lo que cumplen con las propiedades de ACID de una base de datos. Con esta característica, puede ejecutar operaciones INSERT, UPDATE, DELETE y MERGE en tablas administradas por Hive con datos de Amazon Simple Storage Service (Amazon S3).

Hive Live Long and Process (LLAP)

La funcionalidad LLAP agregada en la versión 2.0 de Apache Hive predeterminado no se admite en la versión 2.1.0 de Hive en Amazon EMR versión 5.0.

La versión 6.0.0 y posteriores de Amazon EMR son compatibles con la funcionalidad Live Long and Process (LLAP) para Hive. Para obtener más información, consulte Uso de Hive LLAP.

Diferencias de Hive entre la versión de lanzamiento 4.x y 5.x de Amazon EMR

En esta sección, se abordan las diferencias que deben tenerse en cuenta antes de migrar una implementación de Hive desde la versión 1.0.0 de Hive en Amazon EMR versión 4.x a Hive 2.x en Amazon EMR versión 5.x.

Consideraciones y diferencias operativas

  • Se ha agregado compatibilidad con Transacciones de ACID (atomicidad, uniformidad, aislamiento y durabilidad): se ha eliminado esta diferencia entre Hive 1.0.0 en Amazon EMR 4.x y Apache Hive predeterminado.

  • Se han eliminado las escrituras directas en Amazon S3: se ha eliminado esta diferencia entre Hive 1.0.0 en Amazon EMR y el Apache Hive predeterminado. Hive 2.1.0 en Amazon EMR versión 5.x ahora crea, lee y escribe en archivos temporales almacenados en Amazon S3. En consecuencia, para leer y escribir en la misma tabla ya no tiene que crear una tabla temporal en el sistema de archivos HDFS local del clúster como solución. Si utiliza los buckets con control de versiones, asegúrese de administrar estos archivos temporales tal y como se describe a continuación.

  • Administrar archivos temporales al utilizar buckets de Amazon S3 con control de versiones: cuando se ejecutan consultas de Hive donde el destino de los datos generados es Amazon S3, se crean muchos archivos y directorios temporales. Este es el nuevo comportamiento tal y como se describió anteriormente. Si utiliza buckets de S3 con control de versiones, estos archivos temporales desordenan Amazon S3 e incurren en costos si no se eliminan. Ajuste sus reglas de ciclo de vida de modo que los datos con prefijo /_tmp se eliminen tras un breve periodo de tiempo como, por ejemplo, cinco días. Consulte Especificación de una configuración del ciclo de vida para más información.

  • Log4j actualizado a log4j 2: si utiliza log4j, es posible que tenga que cambiar su configuración de registro debido a esta actualización. Consulte Apache log4j 2 para obtener más información.

Diferencias y consideraciones de rendimiento

  • Diferencias de rendimiento con Tez: con Amazon EMR versión 5.x, Tez es el motor de ejecución predeterminado de Hive en lugar de. MapReduce Tez proporciona un rendimiento mejorado para la mayoría de flujos de trabajo.

  • Tablas con muchas particiones: las consultas que generan un gran número de particiones dinámicas podrían devolver errores y las consultas que seleccionan desde tablas con muchas particiones podrían tardar más de lo esperado en ejecutarse. Por ejemplo, una selección desde 100 000 particiones podría tardar 10 minutos o más.

Características adicionales de Hive en Amazon EMR

Amazon EMR amplía Hive con nuevas características que permiten la integración de Hive con otros AWS servicios, como la capacidad de leer y escribir en Amazon Simple Storage Service (Amazon S3) y DynamoDB.

Variables en Hive

Puede incluir variables en sus scripts utilizando el signo de dólar y llaves.

add jar ${LIB}/jsonserde.jar

Los valores de estas variables se transfieren a Hive en la línea de comando con el parámetro -d, como en el siguiente ejemplo:

-d LIB=s3://elasticmapreduce/samples/hive-ads/lib

También puede transferir los valores en pasos que ejecutan scripts de Hive.

Para transferir valores de variable en pasos de Hive utilizando la consola
  1. Abra la consola Amazon EMR en https://console.aws.amazon.com/emr.

  2. Elija Create cluster.

  3. En la sección Steps (Pasos), en Add Step (Añadir paso), elija Hive Program (Programa de Hive) en la lista y Configure and add (Configurar y añadir).

  4. En el cuadro de diálogo Add Step (Añadir paso), especifique los parámetros utilizando la tabla siguiente como guía y, a continuación, elija Add (Añadir).

    Campo Acción
    Script S3 location* Especifique el URI donde reside el script en Amazon S3. El valor debe tener el formato BucketName/path/ScriptName. Por ejemplo: s3://elasticmapreduce/samples/hive-ads/libs/response-time-stats.q.
    Input S3 location De manera opcional, especifique el URI en el que se encuentran los archivos de entrada en Amazon S3. El valor debe tener el formato BucketName/path /. Si se especifica, se transferirá al script de Hive como un parámetro denominado INPUT. Por ejemplo: s3://elasticmapreduce/samples/hive-ads/tables/.
    Output S3 location De manera opcional, especifique el URI donde desee la salida almacenada en Amazon S3. El valor debe tener el formato BucketName/path. Si se especifica, se transferirá al script de Hive como un parámetro denominado OUTPUT. Por ejemplo: s3://mybucket/hive-ads/output/.
    Argumentos Opcionalmente, introduzca una lista de argumentos (cadenas separadas por espacios) que transferir a Hive. Si ha definido una variable de ruta en el script de Hive denominada ${SAMPLE}, por ejemplo:
    CREATE EXTERNAL TABLE logs (requestBeginTime STRING, requestEndTime STRING, hostname STRING) PARTITIONED BY (dt STRING) \ ROW FORMAT serde 'com.amazon.elasticmapreduce.JsonSerde' WITH SERDEPROPERTIES ( 'paths'='requestBeginTime, requestEndTime, hostname' ) LOCATION '${SAMPLE}/tables/impressions';

    Para pasar un valor a la variable, escriba lo siguiente en la ventana Arguments (Argumentos):

    -d SAMPLE=s3://elasticmapreduce/samples/hive-ads/.

    Action on Failure

    Esto determina qué hace el clúster en respuesta a los errores. Los valores posibles para esta configuración son:

    • Terminate cluster (Terminar clúster): si el paso genera un error, terminar el clúster. Si el clúster tiene la protección de terminación habilitada Y keep-alive habilitado, no se terminará.

    • Cancel and wait (Cancelar y esperar): si el paso genera un error, cancelar los pasos restantes. Si el clúster tiene keep-alive habilitado, el clúster no termina.

    • Continue (Continuar): si el paso genera un error, continuar en el paso siguiente.

  5. Seleccione los valores que sean necesarios y elija Create cluster (Crear clúster).

Para pasar valores variables a los pasos de Hive, utilice el AWS CLI

Para pasar valores variables a los pasos de Hive mediante el AWS CLI, utilice el --steps parámetro e incluya una lista de argumentos.

  • nota

    Se incluyen caracteres de continuación de línea de Linux (\) para facilitar la lectura. Se pueden eliminar o utilizar en los comandos de Linux. En Windows, elimínelos o sustitúyalos por un signo de intercalación (^).

    aws emr create-cluster --name "Test cluster" --release-label emr-7.1.0 \ --applications Name=Hive Name=Pig --use-default-roles --ec2-attributes KeyName=myKey --instance-type m5.xlarge --instance-count 3 \ --steps Type=Hive,Name="Hive Program",ActionOnFailure=CONTINUE,Args=[-f,s3://elasticmapreduce/samples/hive-ads/libs/response-time-stats.q,-d,INPUT=s3://elasticmapreduce/samples/hive-ads/tables,-d,OUTPUT=s3://mybucket/hive-ads/output/,-d,SAMPLE=s3://elasticmapreduce/samples/hive-ads/]

    Para obtener más información sobre el uso de los comandos de Amazon EMR en AWS CLI, consulte. https://docs.aws.amazon.com/cli/latest/reference/emr

Para transferir valores de variable en pasos de Hive utilizando el SDK de Java
  • El siguiente ejemplo muestra cómo transferir variables a pasos con el SDK. Para obtener más información, consulte Class StepFactory in the AWS SDK for Java API Reference.

    StepFactory stepFactory = new StepFactory(); StepConfig runHive = new StepConfig() .withName("Run Hive Script") .withActionOnFailure("TERMINATE_JOB_FLOW") .withHadoopJarStep(stepFactory.newRunHiveScriptStep(“s3://mybucket/script.q”, Lists.newArrayList(“-d”,”LIB= s3://elasticmapreduce/samples/hive-ads/lib”));

Consultas de Hive de Amazon EMR para asignar esquemas parciales de DynamoDB

Hive de Amazon EMR ofrece la máxima flexibilidad a la hora de consultar las tablas de DynamoDB permitiéndole especificar un subconjunto de columnas en el que puede filtrar los datos, en lugar de exigir que la consulta incluya todas las columnas. Esta técnica de consulta de esquema parcial resulta eficaz cuando tenga un esquema de base de datos disperso y desee filtrar registros en función de algunas columnas, como, por ejemplo, filtrado de marcas temporales.

El siguiente ejemplo muestra cómo utilizar una consulta de Hive para:

  • Crear una tabla de DynamoDB.

  • Seleccione un subconjunto de elementos (filas) en DynamoDB y reduzca aún más los datos en ciertas columnas.

  • Copie los datos resultantes a 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";

En la siguiente tabla se muestra la sintaxis de consultas para seleccionar cualquier combinación de elementos desde DynamoDB.

Ejemplo de consulta Descripción del resultado
SELECT * FROM nombre_tabla; Selecciona todos los elementos (filas) de una tabla determinada e incluye datos de todas las columnas disponibles para dichos elementos.
SELECT * FROM nombre_tabla WHERE nombre_campo =valor; Selecciona algunos elementos (filas) de una tabla determinada e incluye datos de todas las columnas disponibles para dichos elementos.
SELECT nombre_columna1, nombre_columna2, nombre_columna3 FROM nombre_tabla; Selecciona todos los elementos (filas) de una tabla determinada e incluye datos de algunas columnas disponibles para dichos elementos.
SELECT nombre_columna1, nombre_columna2, nombre_columna3 FROM nombre_tabla WHERE nombre_campo =valor; Selecciona algunos elementos (filas) de una tabla determinada e incluye datos de algunas columnas disponibles para dichos elementos.

Copia de datos entre tablas de DynamoDB de distintas regiones de AWS

Hive de Amazon EMR proporciona una propiedad dynamodb.region que puede definir en cada tabla de DynamoDB. Cuando dynamodb.region se define de forma distinta en dos tablas, todos los datos que copie entre las tablas se dan automáticamente entre las regiones especificadas.

El siguiente ejemplo muestra cómo crear una tabla de DynamoDB con un script de Hive que define la propiedad dynamodb.region:

nota

Las propiedades de región por tabla anulan las propiedades de Hive globales.

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");

Definir los valores de rendimiento de DynamoDB por tabla

Amazon EMR Hive le permite establecer DynamoDB readThroughputPercent y la writeThroughputPercent configuración por tabla en la definición de la tabla. El siguiente script de Hive de Amazon EMR muestra cómo definir los valores de rendimiento. Para más información sobre los valores de rendimiento de DynamoDB, consulte Especificación de los requisitos de lectura y escritura para las tablas.

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");