2011-09-19 8 views

Odpowiedz

6

Ogólnie rzecz biorąc, dowolna agregacja, taka jak min/max/count, wymaga zadania MapReduce. To prawdopodobnie nie wyjaśni ci wszystkiego.

Hive, w stylu wielu RDBMS, ma słowo kluczowe EXPLAIN, które objaśni, w jaki sposób zapytanie Hive zostanie przetłumaczone na zadania MapReduce. Spróbuj uruchomić objaśnienie obu przykładowych zapytań i zobacz, co próbuje zrobić za kulisami.

1

wybierz * z nazwy;

Po prostu odczytuje surowe dane z plików w HDFS, więc jest znacznie szybszy bez MapReduce.

+1

ale dla dużego pliku musi on odczytywać ze wszystkich węzłów równolegle. Hive robi to bez MR? – ernesto

-1

Jest to technika optymalizacji, zadanie właściwości może (FETCH) hive.fetch.task.conversion zminimalizować opóźnienie narzutu mapreduce.

Podczas wykonywania zapytań SELECT, LIMIT, FETCH ta właściwość pomija funkcję mapreduce i używa zadania FETCH.

Ta właściwość może mieć 3 wartości - none, minimal (wartość domyślna) i more.

1

Kiedykolwiek ognia zapytanie jak select * from nazwa_tabeli, Hive odczytuje plik danych i pobiera wszystkie dane bez jakiegokolwiek agregację (min/max/liczyć itd.). Będzie wywoływać zadanie FetchTask, a nie mapreduce.

Jest to również technika optymalizacji w gałęzi. Właściwość właściwość hive.fetch.task.conversion (tj. Zadanie FETCH) minimalizuje opóźnienie mapy - zmniejsza obciążenie.

To jak czytamy plik Hadoop: Hadoop fs -cat filename

Ale jeśli używamy wybierz colNames z nazwa_tabeli, wymaga to mapa-zmniejszenie zadanie, gdyż musi wyodrębnić "kolumna" z każdego wiersza, parsując go z pliku, który ładuje.