2016-06-23 42 views

risposta

11

Non mi sentivo abbastanza come gli esempi dalla documentazione erano adeguati, quindi ecco il mio tentativo di una domanda.

All'inizio c'era solo il --hiveconf e la sostituzione variabile non esisteva.

L'opzione --hiveconf consentiva agli utenti di impostare Hive configuration values dalla riga di comando e così era. Tutti i valori di configurazione Hive sono memorizzati nello spazio dei nomi hiveconf, ad esempio hiveconf:mapred.reduce.tasks. Questi valori permettevano di controllare cose come il numero di mappatori e riduttori, se i messaggi di stato dovevano essere visualizzati e se lo script dovesse continuare con errori.

Successivamente, variable substitution was added. Ciò significa che ora è possibile utilizzare le variabili nelle query con la sintassi ${...}. Tuttavia, le uniche variabili che si potevano impostare dalla riga di comando erano sotto lo spazio dei nomi hiveconf usando --hiveconf, quindi è lì che gli utenti inseriscono le loro variabili.

Mettere le tue variabili personali sotto lo spazio dei nomi di configurazione Hive probabilmente non spezzerà nulla, ma non è neanche una buona forma. Successivamente, it was suggested, aggiungere uno spazio dei nomi hivevar specifico per le variabili utente che potrebbero anche essere definite sulla riga di comando utilizzando --hivevar. Ciò significava una separazione più pulita tra i valori di configurazione Hive e le variabili definite dall'utente.

In sintesi:
Il hiveconf spazio dei nomi e --hiveconf dovrebbero essere utilizzati per impostare i valori di configurazione Hive.
Lo spazio dei nomi hivevar e --hivevar devono essere utilizzati per definire le variabili utente.
L'impostazione delle variabili utente sotto lo spazio dei nomi hiveconf probabilmente non interromperà nulla, ma non è consigliata.

+0

Io in realtà FI lo ha risolto molto tempo fa, ma bella risposta, grazie! – Karnimrod

+0

Ho pensato che probabilmente lo avevi, ma ho deciso di presentare un'altra risposta per i futuri lettori, per ogni evenienza. =] –

1

Nessuna differenza, tranne lo spazio dei nomi. hiveconf e hivevar sono spazi dei nomi diversi. Lo spazio nomi hivevar è stato aggiunto solo per separare lo spazio dei nomi delle proprietà di configurazione e dello spazio Hive. Vedere https://issues.apache.org/jira/browse/HIVE-2020 per ulteriori informazioni.

5

@Llama ha spiegato in dettaglio, insieme a che entrambi i tipi di variabili sono accessibili in modo diverso.

Si accede alle variabili --hivevar utilizzando ${var-name}, mentre l'--hiveconf si accede a ${hiveconf:var-name} all'interno dell'alveare.

ad es. Sotto gli esempi si accede alla variabile e si stampa il suo valore nell'alveare.

hivevar:

hive --hivevar a='this is a' -e '!echo ${a};' 

uscita: this is a

hiveconf:

hive --hiveconf a='this is a' -e '!echo ${hiveconf:a};' 

uscita: this is a

Problemi correlati