wake-up-neo.com

Was ist der Unterschied zwischen -hivevar und -hiveconf?

Von Bienenstock -h:

--hiveconf <property=value>   Use value for given property
--hivevar <key=value>         Variable subsitution to apply to Hive
                                  commands. e.g. --hivevar A=B
18
Karnimrod

Ich hatte nicht das Gefühl, dass die Beispiele aus der Dokumentation angemessen waren, daher hier mein Versuch einer Antwort.

Am Anfang gab es nur --hiveconf und die Variablensubstitution existierte nicht. 

Mit der --hiveconf-Option können Benutzer Hive-Konfigurationswerte von der Befehlszeile aus festlegen, und das war es. Alle Hive-Konfigurationswerte werden unter dem Namespace hiveconf gespeichert, d. H. hiveconf:mapred.reduce.tasks. Mit diesen Werten haben Sie die Möglichkeit, die Anzahl der Mapper und Reduktionen, die Anzeige von Statusmeldungen und die Fehlerbehebung des Skripts zu steuern.

Später wurde Variablensubstitution hinzugefügt . Dies bedeutet, dass Sie jetzt Variablen in Abfragen mit der ${...}-Syntax verwenden können. Die einzigen Variablen, die Sie über die Befehlszeile festlegen konnten, befanden sich jedoch unter Verwendung von --hiveconf im Namespace hiveconf. Daher setzen Benutzer ihre Variablen.

Wenn Sie Ihre persönlichen Variablen unter den Namensraum der Hive-Konfiguration stellen, wird dies wahrscheinlich nichts kaputt machen, aber es ist auch keine gute Form. Später wurde es wurde vorgeschlagen , dass ein hivevar-Namespace speziell für Benutzervariablen hinzugefügt wird, der auch in der Befehlszeile mit --hivevar definiert werden kann. Dies bedeutete eine sauberere Trennung zwischen Hive-Konfigurationswerten und benutzerdefinierten Variablen.

In Summe:
Der Namespace hiveconf und --hiveconf sollten verwendet werden, um Hive-Konfigurationswerte festzulegen.
Der hivevar-Namespace und --hivevar sollten zur Definition von Benutzervariablen verwendet werden.
Das Festlegen von Benutzervariablen unter dem Namespace hiveconf führt wahrscheinlich nicht zu Fehlern, wird jedoch nicht empfohlen.

35
Mr. Llama

@Llama hat es ausführlich erklärt, und auf beide Arten von Variablen wird unterschiedlich zugegriffen.

Auf die --hivevar-Variablen wird mit ${var-name} zugegriffen, während auf --hiveconf innerhalb von Hive auf ${hiveconf:var-name} zugegriffen wird. 

z.B. Nachfolgend einige Beispiele für Zugriffsvariablen und deren Druck in Hive.

hivevar:

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

ausgabe: this is a

hiveconf:

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

ausgabe: this is a

9
Rahul Sharma

Kein Unterschied außer dem Namensraum. hiveconf und hivevar sind unterschiedliche Namespaces. hivevar Namespace wurde hinzugefügt, um den Namespace der Konfigurationseigenschaften und den Hive-Variablen-Namespace voneinander zu trennen. Weitere Informationen finden Sie unter https://issues.Apache.org/jira/browse/Hive-2020

0
leftjoin

Sie können dies für die Differenz verweisen 

https://cwiki.Apache.org/confluence/display/Hive/LanguageManual+VariableSubstitution

Es gibt drei Namespaces für Variablen - hiveconf, system und env. ( Benutzerdefinierte Variablen können auch in einem separaten Namespace mit der Option define oder hivevar in Hive 0.8.0 und späteren Releases erstellt werden.)

0
charan tej

Wir können sie auch am Anfang des Skripts verwenden als:

hiveconf:

SET this_dt = CURRENT_DATE;
select ${hiveconf:this_dt};

hivevar:

set hivevar:cur_dt=current_date;
select ${hivevar:cur_dt};
0
RPaul