web-dev-qa-db-fra.com

Quelle est la différence entre -hivevar et -hiveconf?

De la ruche -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

Je ne pensais pas que les exemples de la documentation étaient adéquats, alors voici ma tentative de réponse.

Au début, il n'y avait que --hiveconf et la substitution de variable n'existait pas. 

L'option --hiveconf permettait aux utilisateurs de définir valeurs de configuration Hive } à partir de la ligne de commande, et c'était tout. Toutes les valeurs de configuration Hive sont stockées sous l’espace de nom hiveconf, c’est-à-dire hiveconf:mapred.reduce.tasks. Ces valeurs vous ont permis de contrôler des éléments tels que le nombre de mappeurs et de réducteurs, si les messages d'état doivent être affichés et si le script doit continuer en cas d'erreur.

Plus tard, la substitution de variable a été ajoutée _. Cela signifie que vous pouvez désormais utiliser des variables dans les requêtes avec la syntaxe ${...}. Cependant, les seules variables que vous pouviez définir à partir de la ligne de commande se trouvaient dans l'espace de noms hiveconf à l'aide de --hiveconf. Les utilisateurs y placent donc leurs variables.

Placer vos variables personnelles dans l'espace de noms de configuration Hive ne cassera probablement rien, mais ce n'est pas non plus une bonne forme. Plus tard, il a été suggéré qu'un espace de nom hivevar soit ajouté spécifiquement pour les variables utilisateur qui pourraient également être définies sur la ligne de commande à l'aide de --hivevar. Cela signifiait une séparation plus nette entre les valeurs de configuration Hive et les variables définies par l'utilisateur.

En résumé:
Les espaces de noms hiveconf et --hiveconf doivent être utilisés pour définir les valeurs de configuration Hive.
Les espaces de noms hivevar et --hivevar doivent être utilisés pour définir les variables utilisateur.
La définition de variables utilisateur sous l’espace de nom hiveconf ne cassera probablement rien, mais elle n’est pas recommandée.

35
Mr. Llama

@Llama l'a expliqué en détail, de même que l'accès aux deux types de variables est différent.

Les variables --hivevar sont accessibles via ${var-name}, tandis que les --hiveconf sont accessibles ${hiveconf:var-name} dans Hive. 

par exemple. Les exemples ci-dessous accèdent à la variable et affichent sa valeur dans Hive.

hivevar:

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

sortie: this is a

hiveconf:

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

sortie: this is a

9
Rahul Sharma

Aucune différence sauf l'espace de noms. hiveconf et hivevar sont des espaces de noms différents. hivevar namespace a été ajouté uniquement pour séparer les espaces de noms de propriétés de configuration et de variables Hive. Voir https://issues.Apache.org/jira/browse/Hive-2020 pour plus d'informations. 

0
leftjoin

Vous pouvez vous référer à cela pour la différance 

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

Il existe trois espaces de noms pour les variables - hiveconf, system et env. ( Les variables personnalisées peuvent également être créées dans un espace de noms séparé avec l'option define ou hivevar dans Hive 0.8.0 et versions ultérieures.)

0
charan tej