2016-06-23 39 views

Odpowiedz

11

Nie bardzo czułem, że przykłady z dokumentacji były odpowiednie, więc oto moja próba Odpowiedź.

Na początku było tylko --hiveconf, a zmienna substytucja nie istniała.

Opcja --hiveconf pozwoliła użytkownikom ustawić Hive configuration values z wiersza poleceń i to było to. Wszystkie wartości konfiguracji Hive są przechowywane w przestrzeni nazw hiveconf, tj. hiveconf:mapred.reduce.tasks. Te wartości pozwoliły ci kontrolować takie rzeczy, jak liczba mapperów i reduktorów, czy powinny być wyświetlane komunikaty o stanie i czy skrypt powinien kontynuować błędy.

Później, variable substitution was added. Oznaczało to, że możesz teraz używać zmiennych w zapytaniach ze składnią ${...}. Jednak jedyne zmienne, które można ustawić z wiersza poleceń, znajdowały się pod obszarem nazw hiveconf przy użyciu --hiveconf, więc tam użytkownicy umieszczają swoje zmienne.

Umieszczenie zmiennych osobistych w obszarze nazw konfiguracji Hive prawdopodobnie niczego nie złamie, ale to także nie jest dobra forma. Później, it was suggested, dodawana jest przestrzeń nazw hivevar specjalnie dla zmiennych użytkownika, które mogą być również zdefiniowane w wierszu poleceń przy użyciu --hivevar. Oznaczało to czystszą separację między wartościami konfiguracyjnymi Hive a zmiennymi zdefiniowanymi przez użytkownika.

Podsumowując:
hiveconf nazw i --hiveconf powinien być używany do ustawiania Hive wartości konfiguracyjnych.
Przestrzeń nazw hivevar i --hivevar powinny być używane do definiowania zmiennych użytkownika.
Ustawienie zmiennych użytkownika w obszarze nazw hiveconf prawdopodobnie niczego nie złamie, ale nie jest zalecane.

+0

I rzeczywiście fi ustał to dawno temu, ale miła odpowiedź, dzięki! – Karnimrod

+0

Sądziłem, że prawdopodobnie tak, ale postanowiłem złożyć kolejną odpowiedź dla przyszłych czytelników, na wszelki wypadek. =] –

1

No różnica oprócz nazw. hiveconf i hivevar to różne przestrzenie nazw. hivevar Przestrzeń nazw została dodana tylko do oddzielnej przestrzeni nazw właściwości konfiguracji i przestrzeni nazw zmiennych Hive. Aby uzyskać więcej informacji, patrz https://issues.apache.org/jira/browse/HIVE-2020.

5

@Llama wyjaśnił to szczegółowo, wraz z tym, że oba typy zmiennych są dostępne w różny sposób.

W --hivevar zmienne są dostępne przy użyciu ${var-name}, a --hiveconf są dostępne ${hiveconf:var-name} wewnątrz ula.

np. Poniżej przykłady zmiennych dostępowych i wydrukuj ich wartość w ulu.

hivevar:

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

wyjściowa: this is a

hiveconf:

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

wyjściowa: this is a

Powiązane problemy