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
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
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
Abra la consola Amazon EMR en https://console.aws.amazon.com/emr.
-
Elija Create cluster.
-
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).
-
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 denominadoINPUT
. 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 denominadoOUTPUT
. 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.
-
-
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-labelemr-7.1.0
\ --applications Name=Hive
Name=Pig
--use-default-roles --ec2-attributes KeyName=myKey
--instance-typem5.xlarge
--instance-count3
\ --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");