2013-05-03 22 views
7

Jestem nowy w Hadoop Hive i pracuję nad rozwiązaniem raportowania. Problem polega na tym, że wydajność zapytania jest bardzo powolna (ul 0.10, hbase 0.94, hadoop 1.1.1). Jedno z pytań to:Hadoop Hive powolne zapytania

select a.*, b.country, b.city from p_country_town_hotel b 
    inner join p_hotel_rev_agg_period a on 
    (a.key.hotel = b.hotel) where b.hotel = 'AdriaPraha' and a.min_date < '20130701' 
    order by a.min_date desc 
    limit 10; 

co zajmuje dość długi czas (50s). Wiem, że wiem, że połączenie jest w polu łańcucha, a nie w liczbie całkowitej, ale zestawy danych nie są duże (cca 3300 i 100000 rekordów). Próbowałem podpowiedzi na temat tego SQL, ale nie okazało się to szybsze. To samo zapytanie na MS SQL Server trwa 1 s. Również prosta liczba (*) z tabeli trwa 7-8 sekund, co jest szokujące (tabela ma 3300 rekordów). Naprawdę nie wiem, o co chodzi? Jakieś pomysły czy źle zinterpretowałem Hadoop?

Odpowiedz

14

Tak, źle zinterpretowałeś Hadoop. Hadoop i Hive również nie są przeznaczone na rzeczy w czasie rzeczywistym. Są najbardziej odpowiednie dla trybu offline, przetwarzania wsadowego. Nie są one wcale zamiennikiem RDBMS. Chociaż można zrobić pewne dostrojenie, ale "absolutny czas rzeczywisty" nie jest możliwy. Jest wiele rzeczy, które dzieją się pod maską, gdy prowadzisz kwerendę o ulu, o czym myślę, że nie jesteś nieświadomy. Po pierwsze, zapytanie Hive zostaje przekształcone w odpowiadające mu zadanie MR, a następnie kilka innych rzeczy, takich jak tworzenie dzielenia, generowanie rekordów, generowanie mapperów itp. Nigdy nie sugerowałbym Hadoop (lub Hive), jeśli masz potrzeby w czasie rzeczywistym.

Możesz chcieć rzucić okiem na Impala, aby zaspokoić swoje potrzeby w czasie rzeczywistym.

+0

Nie używaj impala do analizy dużych danych. sprawdź [to] (https://gigaom.com/2014/01/13/cloudera-says-impala-is-faster-than-hive-which-isnt-saying-much/). Nawet aktualna wersja (0.15) jest znacznie szybsza niż ta, której używa się na tym blogu. Sprawdź [ten blog] (http://hortonworks.com/blog/benchmarking-apache-hive-13-enterprise-hadoop/). – chanchal1987

1

nie jestem pewien, w jaki sposób nowe jesteś do hadoop.Hive nie daje wyników na interaktywnych prędkościach jak małe stoliki are.In przypadek wiedział to już i próbuje dostroić zapytanie, można spróbować poniżej:

select a.*, b.country, b.city from 
(select * from p_country_town_hotel where hotel= 'AdriaPraha') b 
inner join 
(select * from p_hotel_rev_agg_period where min_date < '20130701') a 
on 
a.key.hotel = b.hotel 
order by a.min_date desc 
limit 10; 

Jeśli wiesz, że jedna z tabel jest wystarczająco mała, aby zmieścić się w pamięci, możesz spróbować dołączyć do mapy.

4

Hive nie jest odpowiednim narzędziem do pracy w czasie rzeczywistym, ale jeśli chcesz wykorzystać infrastrukturę Hadoop w czasie rzeczywistym lub szybki dostęp do danych, spójrz na . Jego wartość dodana polega na szybkim dostępie. Nie wiesz, dlaczego wybierasz Hadoop do swojego rozwiązania, ale Hbase znajduje się na szczycie HDFS, które niektórzy lubią z powodu nieodłącznych opcji nadmiarowych HDFS (kopiujesz plik tam jeden raz i jest on automatycznie replikowany), który może być jednym z powody, dla których patrzysz na Hadoop.

Aby uzyskać więcej informacji: read this question

+0

Po pierwsze, dziękuję wam za pomoc :). Obecnie jest to dowód na to, że mamy niewielką ilość danych. Ale w prawdziwym życiu będziemy mieć dziesiątki milionów wierszy i dlatego zdecydowaliśmy się wypróbować Hadoop Hive. A także za darmo :). Do celów sprawozdawczych potrzebuję ** szybkich raportów (najlepiej byłoby to kilka sekund), więc chciałbym użyć czegoś szybko (przyjrzę się temu Impala). Dlatego byłem zaskoczony szybkością Hadoop Hive, ponieważ spodziewałem się, że musi być szybki, ponieważ jest przeznaczony do dużych zbiorów danych. – user2346868