Differenze e considerazioni per Hive su Amazon EMR - Amazon EMR

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Differenze e considerazioni per Hive su Amazon EMR

Differenze tra Apache Hive su Amazon EMR e Apache Hive

Questa sezione descrive le differenze tra Hive su Amazon EMR e le versioni predefinite di Hive disponibili all'indirizzo http://svn.apache.org/viewvc/hive/branches/.

Autorizzazione Hive

Amazon EMR supporta l'autorizzazione Hive per HDFS ma non per EMRFS Amazon S3. EMRI cluster Amazon vengono eseguiti con l'autorizzazione disabilitata per impostazione predefinita.

Comportamento di unione dei file Hive con Amazon S3

Apache Hive unisce i piccoli file al termine di un processo di sola mappatura se hive.merge.mapfiles è impostato su true; l'unione viene attivata solo se le dimensioni medie dell'output del processo sono inferiori all'impostazione hive.merge.smallfiles.avgsize. Amazon EMR Hive ha esattamente lo stesso comportamento se il percorso di output finale è inserito. HDFS Se il percorso di output si trova in Amazon S3, il parametro hive.merge.smallfiles.avgsize viene ignorato. In tal caso, l'attività di unione viene sempre attivata se hive.merge.mapfiles è impostato su true.

ACIDtransazioni e Amazon S3

Amazon EMR 6.1.0 e versioni successive supportano le transazioni Hive ACID (Atomicity, Consistency, Isolation, Durability) in modo che siano conformi alle ACID proprietà di un database. Con questa funzionalità, puoi eseguire INSERT e MERGE operare in tabelle gestite da Hive con dati in Amazon Simple Storage Service (Amazon S3). UPDATE DELETE

Hive Live Long and Process () LLAP

LLAPla funzionalità aggiunta nella versione 2.0 di Apache Hive predefinito non è supportata in Hive 2.1.0 su Amazon EMR versione 5.0.

Amazon EMR versione 6.0.0 e successive supportano le funzionalità Live Long and Process (LLAP) per Hive. Per ulteriori informazioni, consulta Using Hive. LLAP

Differenze in Hive tra le EMR versioni 4.x e 5.x di Amazon

Questa sezione descrive le differenze da considerare prima di migrare un'implementazione Hive dalla versione 1.0.0 di Amazon versione 4.x a Hive 2.x su EMR Amazon versione 5.x. EMR

Differenze e considerazioni operative

  • Supporto aggiunto per le transazioni ACID (atomicità, coerenza, isolamento e durabilità): questa differenza tra Hive 1.0.0 su EMR Amazon 4.x e Apache Hive predefinito è stata eliminata.

  • Eliminazione delle scritture dirette su Amazon S3: questa differenza tra Hive 1.0.0 su EMR Amazon e l'Apache Hive predefinito è stata eliminata. Hive 2.1.0 su Amazon EMR versione 5.x ora crea, legge e scrive su file temporanei archiviati in Amazon S3. Di conseguenza, per leggere e scrivere sulla stessa tabella non è più necessario creare una tabella temporanea nel HDFS file system locale del cluster come soluzione alternativa. Con la funzione Versioni multiple dei bucket attivata, è necessario assicurarsi di gestire questi file temporanei come descritto di seguito.

  • Gestione dei file temporanei con la funzione Versioni multiple dei bucket Amazon S3 attivata: quando vengono eseguite query Hive in cui la destinazione dei dati generati è Amazon S3, vengono creati molti file e directory temporanei. Si tratta di un nuovo comportamento, come descritto in precedenza. Se utilizzi i bucket S3 con funzione Versioni multiple, questi file temporanei creano disordine in Amazon S3 e, se non eliminati, generano costi. Modifica le regole del ciclo di vita in modo che i dati con prefisso /_tmp vengano eliminati dopo poco tempo, ad esempio cinque giorni. Per ulteriori informazioni, consulta Specifica di una configurazione del ciclo di vita.

  • Log4j aggiornato a log4j 2: se utilizzi log4j, potresti dover modificare la configurazione di log per via di questo aggiornamento. Per dettagli, consulta Apache log4j 2.

Differenze e considerazioni prestazionali

  • Differenze di prestazioni con Tez: con la EMR versione 5.x di Amazon, Tez è il motore di esecuzione predefinito per Hive anziché. MapReduce Tez fornisce prestazioni migliori per la maggior parte dei flussi di lavoro.

  • Tabelle con molte partizioni: le query che generano un numero elevato di partizioni dinamiche possono non riuscire, mentre quelle che operano selezioni da tabelle con molte partizioni possono richiedere più tempo del previsto per l'esecuzione. Ad esempio, una selezione da 100.000 partizioni può richiedere 10 minuti o più.

Funzionalità aggiuntive di Hive su Amazon EMR

Amazon EMR estende Hive con nuove funzionalità che supportano l'integrazione di Hive con altri AWS servizi, come la capacità di leggere e scrivere su Amazon Simple Storage Service (Amazon S3) e DynamoDB.

Variabili in Hive

Puoi includere variabili nel tuo script utilizzando il segno del dollaro e le parentesi graffe.

add jar ${LIB}/jsonserde.jar

Puoi trasferire ad Hive i valori di queste variabili nella riga di comando tramite il parametro -d, come nell'esempio seguente:

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

Puoi anche trasferire i valori nelle fasi che eseguono gli script Hive.

Per trasferire i valori delle variabili nelle fasi Hive utilizzando la console
  1. Apri la EMR console Amazon all'indirizzo https://console.aws.amazon.com/emr.

  2. Scegli Create cluster (Crea cluster).

  3. Nella sezione Steps (Fasi), in Add Step (Aggiungi fase), scegliere Hive Program (Programma Hive) dall'elenco e quindi Configure and add (Configura e aggiungi).

  4. Nella finestra di dialogo Add Step (Aggiungi fase), specificare i parametri utilizzando la tabella seguente come guida e quindi scegliere Add (Aggiungi).

    Campo Azione
    Percorso script S3* Specificate URI dove risiede lo script in Amazon S3. Il valore deve essere nel modulo BucketName/path/ScriptName. Ad esempio:s3://elasticmapreduce/samples/hive-ads/libs/response-time-stats.q.
    Percorso di input S3 Facoltativamente, specifica URI dove risiedono i file di input in Amazon S3. Il valore deve essere nel modulo BucketName/path/. Se specificato, questo verrà passato allo script Hive come parametro denominato. INPUT Ad esempio: s3://elasticmapreduce/samples/hive-ads/tables/.
    Percorso di output S3 Facoltativamente, specifica URI dove desideri archiviare l'output in Amazon S3. Il valore deve essere nel modulo BucketName/path. Se specificato, questo verrà passato allo script Hive come parametro denominatoOUTPUT. Ad esempio: s3://mybucket/hive-ads/output/.
    Argomenti Facoltativamente, è possibile inserire un elenco di argomenti (stringhe separate da spazi) per il trasferimento a Hive. Se hai definito una variabile di percorso nello script Hive denominata $ {SAMPLE}, ad esempio:
    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';

    Per trasferire un valore per la variabile, digitare quanto segue nella finestra Arguments (Argomenti):

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

    Operazione in caso di errore

    Determina le operazioni effettuate dal cluster in risposta a eventuali errori. I valori possibili sono per questa impostazione sono:

    • Terminate cluster (Chiudi cluster): se la fase ha esito negativo, il cluster viene chiuso. Se il cluster ha la protezione dalla terminazione abilitata, AND keep alive enabled, non verrà terminato.

    • Cancel and wait (Annulla e attendi): se la fase ha esito negativo, quelle rimanenti vengono annullate. Se il keep-alive è abilitato, il cluster non verrà chiuso.

    • Continue (Continua): se la fase ha esito negativo, passa a quella successiva.

  5. Selezionare i valori in base alle esigenze, quindi scegliere Create cluster (Crea cluster).

Per passare valori variabili in Hive, procedi usando il AWS CLI

Per passare valori variabili nei passaggi di Hive utilizzando il AWS CLI, usa il --steps parametro e includi un elenco di argomenti.

  • Nota

    I caratteri di continuazione della riga Linux (\) sono inclusi per questioni di leggibilità. Possono essere rimossi o utilizzati nei comandi Linux. Per Windows, rimuovili o sostituiscili con un accento circonflesso (^).

    aws emr create-cluster --name "Test cluster" --release-label emr-7.2.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/]

    Per ulteriori informazioni sull'utilizzo dei EMR comandi Amazon in AWS CLI, consultahttps://docs.aws.amazon.com/cli/latest/reference/emr.

Per passare valori variabili in Hive, procedi utilizzando Java SDK
  • L'esempio seguente mostra come passare le variabili nei passaggi utilizzando. SDK Per ulteriori informazioni, vedete Class StepFactory nel AWS SDK for Java APIriferimento.

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

Query Amazon EMR Hive per gestire schemi DynamoDB parziali

Amazon EMR Hive offre la massima flessibilità durante l'interrogazione delle tabelle DynamoDB, consentendoti di specificare un sottoinsieme di colonne su cui filtrare i dati, anziché richiedere che la query includa tutte le colonne. La tecnica di query a schema parziale è efficace quando, con schemi del database sparsi, vuoi filtrare i record in base a poche colonne, ad esempio applicando il filtro in base al timestamp.

L'esempio seguente mostra come utilizzare una query Hive per:

  • Creazione di una tabella DynamoDB

  • Seleziona un sottoinsieme di elementi (righe) in DynamoDB e restringere ulteriormente i dati in determinate colonne.

  • Copia i dati risultati in 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";

La tabella seguente mostra la sintassi di query per la selezione di qualsiasi combinazione di elementi da DynamoDB.

Esempio di query Descrizione del risultato
SELECT * FROM table_name; Seleziona tutti gli elementi (righe) da una determinata tabella e include i dati provenienti da tutte le colonne disponibili per tali elementi.
SELECT * FROM table_name WHERE field_name =value; Seleziona alcuni elementi (righe) da una determinata tabella e include i dati provenienti da tutte le colonne disponibili per tali elementi.
SELECT column1_name, column2_name, column3_name FROM table_name; Seleziona tutti gli elementi (righe) da una determinata tabella e include i dati provenienti da alcune colonne disponibili per tali elementi.
SELECT column1_name, column2_name, column3_name FROM table_name WHERE field_name =value; Seleziona alcuni elementi (righe) da una determinata tabella e include i dati provenienti da alcune colonne disponibili per tali elementi.

Copia dei dati fra tabelle DynamoDB in diverse Regioni AWS

Amazon EMR Hive fornisce una dynamodb.region proprietà che puoi impostare per tabella DynamoDB. Quando dynamodb.region è impostato in modo diverso su due tabelle, la copia dei dati da una tabella all'altra avviene tra le regioni specificate.

L'esempio seguente mostra come creare una tabella DynamoDB con uno script Hive che imposta la proprietà dynamodb.region:

Nota

Le proprietà delle regioni specifiche per tabella sostituiscono le proprietà globali di Hive.

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

Impostazione dei valori di velocità effettiva DynamoDB per tabella

Amazon EMR Hive consente di impostare readThroughputPercent DynamoDB writeThroughputPercent e le impostazioni per tabella nella definizione della tabella. Il seguente script Amazon EMR Hive mostra come impostare i valori di throughput. Per ulteriori informazioni sui valori di velocità effettiva di DynamoDB, consulta Specifica dei requisiti di lettura e scrittura per le tabelle.

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