2016-08-31 4 views
0

Ich bin neu in Impala, ich mache einige Testfälle auf Impala. Ich fand ähnliche SQLs ist viel schneller, wenn ich das zweite Mal angerufen habe.Impala Cache einige Daten nach Abfragen

Zum Beispiel:

  • tabelle1 = 4B Reihen
  • table2 = 50M Reihen

erste Abfrage: select * from table1 where id in (select id from table2 where xxx < 10000) (20 Sekunden)

zweite Abfrage: select * from table1 where id in (select id from table2 where xxx < 9999) (10 Sekunden)

3. Abfrage: select * from table1 where id in (select id from table2 where xxx < 100) (1 Sekunde)

Ich denke, Impala einige spezielle Cache tun, kann mir jemand könnte seinen Grund sagen?

Danke.

+0

Ich habe einige Blogs von http://www.cloudera.com/documentation/cdh/5-1-x/Impala/Installing-and-Using-Impala/ciiu_perf_stats.html gelesen, aber ich habe keine gefunden Statistik und Cache in Tabellen oder Spalten stat in meinen Tabellen; –

Antwort

1

Impala verwendet den Cache des Betriebssystems und zusätzliches HDFS-Caching.

Ein Auszug aus Using HDFS Caching with Impala.

„Die Linux-OS-Cache [...] hält nur die zuletzt Daten im Speicher verwendete Daten aus dem Cache gelesen HDFS vermeidet den Aufwand von Prüfsummen und Speicher-zu-Speicher Kopieren bei der Verwendung von Daten aus dem Linux-OS-Cache. "

Dies kann den Unterschied in der Ausführungszeit zwischen Ihrer ersten und zweiten Anfrage erklären. Der Grund dafür, dass Ihre dritte Abfrage viel schneller ist als die ersten beiden, ist wahrscheinlich nicht (nur) das Caching, sondern die Tatsache, dass nur etwa 1/100 der Daten abgefragt werden (unter der Annahme einer gleichmäßigen Verteilung von xxx).