2013-05-03 9 views
7

Ich bin neu in Hadoop Hive und entwickle eine Reporting-Lösung. Das Problem ist, dass die Abfrageleistung sehr langsam ist (Hive 0.10, HBase 0.94, Hadoop 1.1.1). Eine der Fragen lautet:Hadoop Hive langsame Abfragen

, die ziemlich lange dauert (50s). Ich weiß, ich weiß, der Join ist auf String-Feld und nicht auf Integer, aber die Datensätze sind nicht groß (cca 3300 und 100000 Datensätze). Ich habe versucht, Hinweise auf diese SQL, aber das ging nicht schneller. Die gleiche Abfrage auf MS SQL Server dauert 1s. Auch eine einfache Zählung (*) von Tabelle dauert 7-8s, was schockierend ist (die Tabelle hat 3300 Datensätze). Ich weiß wirklich nicht, was das Problem ist? Irgendwelche Ideen oder habe ich Hadoop falsch interpretiert?

Antwort

14

Ja ... Sie haben Hadoop falsch interpretiert. Hadoop und Hive sind auch nicht für Echtzeit-Sachen gedacht. Sie eignen sich am besten für Offline-Batch-Verarbeitung. Sie sind kein Ersatz für RDBMS. Sie können zwar Feineinstellungen vornehmen, aber "absolute Echtzeit" ist nicht möglich. Es gibt eine Menge Dinge, die unter der Haube passieren, wenn Sie eine Bienenstockabfrage ausführen, von der Sie nicht wissen, dass sie Ihnen bekannt ist. Zuerst wird die Hive-Abfrage in einen entsprechenden MR-Job konvertiert, gefolgt von einigen anderen Dingen wie Split-Erstellung, Datensatzgenerierung, Mapper-Generierung usw. Ich würde Hadoop (oder Hive) niemals vorschlagen, wenn Sie Echtzeitanforderungen haben.

Vielleicht möchten Sie einen Blick auf Impala für Ihre Echtzeit-Bedürfnisse haben.

+0

nicht Impalas verwendet für die Analyse großer Daten. check [this] (https://gigaom.com/2014/01/13/cloudera-says-impala-is-faster-than-hive-which-isnt-saying-much/). Sogar die aktuelle Version (0.15) ist viel schneller als das, was in diesem Blog verwendet wird. Überprüfen Sie [dieses Blog] (http://hortonworks.com/blog/benchmarking-apache-hive-13-enterprise-hadoop/). – chanchal1987

1

Ich bin nicht sicher, wie neu Sie hadoop.Hive sind nicht geben Sie Ergebnisse bei interaktiven Geschwindigkeiten, wie klein die Tabellen are.In Fall, dass Sie dies bereits wusste, und versuchen, die Abfrage zu optimieren, können Sie unten probieren:

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; 

Wenn Sie wissen, dass eine der Tabellen klein genug ist, um in den Speicher zu passen, können Sie die Kartenseitenverbindung versuchen.

4

Hive ist nicht das geeignete Werkzeug für einen Echtzeitjob. Wenn Sie jedoch die Hadoop-Infrastruktur mit echtzeitfähigem oder schnellem Datenzugriff nutzen möchten, werfen Sie einen Blick auf . Der Mehrwert ist der schnelle Zugriff. Nicht sicher, warum Sie Hadoop für Ihre Lösung auswählen, aber Hbase sitzt auf HDFS, was einige Leute wegen der inhärenten Redundanz HDFS (Sie kopieren eine Datei dort einmal und es ist automatisch repliziert), die eine der Gründe, die Sie in Hadoop suchen.

Für weitere Informationen: read this question

+0

Vor allem, vielen Dank, dass Sie mir geholfen haben :). Derzeit ist dies ein Proof of Concept, daher haben wir eine kleine Menge an Daten. Aber im wirklichen Leben werden wir Dutzende von Millionen von Zeilen haben und deshalb haben wir uns entschieden, Hadoop Hive auszuprobieren. Und es ist auch kostenlos :). Für die Berichterstattung benötige ich ** schnelle Berichte (im Idealfall wären es ein paar Sekunden), also würde ich gerne etwas Schnelles verwenden (ich werde mir diesen Impala ansehen). Deshalb war ich überrascht von der Geschwindigkeit von Hadoop Hive, weil ich erwartet hatte, dass es schnell sein muss, da es für große Datenmengen gedacht ist. – user2346868

Verwandte Themen