2015-08-20 17 views
5

Czy Spark SQL zawiera optymalizację strumieniowania tabel dla złączeń, a jeśli tak, w jaki sposób decyduje o tym, która tabela ma być przesyłana strumieniowo?Czy Spark SQL zawiera optymalizację strumieniowania tabel dla złączeń?

Podczas robienia połączeń, Hive przyjmuje, że ostatni stół jest największy. Jako optymalizacja łączenia będzie próbował buforować mniejsze tabele łączenia i przesyłać ostatnie. Jeśli ostatnia tabela na liście łączenia nie jest największa, Hive ma podpowiedź /*+ STREAMTABLE(tbl) */, która informuje ją o tabeli, którą należy przesłać strumieniowo. Od wersji 1.4.1 program Spark SQL nie obsługuje wskazówki STREAMTABLE.

To pytanie zostało poproszone o normalne przetwarzanie RDD, poza Spark SQL, here. Odpowiedź nie dotyczy programu Spark SQL, w którym programista nie ma kontroli nad operacjami jawnego buforowania.

Odpowiedz

3

Poszukiwałem odpowiedzi na to pytanie jakiś czas temu i wszystko, co mogłem wymyślić, to ustawienie parametru spark.sql.autoBroadcastJoinThreshold, który domyślnie wynosi 10 MB. Następnie spróbuje automatycznie nadawać wszystkie tabele o rozmiarze mniejszym niż ustawiony przez ciebie limit. Przyłączanie się do zamówienia nie odgrywa tutaj żadnej roli w tym ustawieniu.

Jeśli jesteś zainteresowany dalszą poprawą wydajności łączenia, bardzo polecam this presentation.

1

to nadchodząca Spark 2.3 tutaj (RC2 jest głosowali na następnej wersji).

Od wersji 1.4.1, Spark SQL nie obsługuje wskazówki STREAMTABLE.

To nie w najnowszym (i głosowaniu na wydanie wkrótce) Spark 2.3 albo.

Nie ma wsparcia dla podpowiedzi STREAMTABLE, ale biorąc pod uwagę ostatnią zmianę (w SPARK-20857 Generic resolved hint node) zbudować strukturę podpowiedzi, która powinna być dość łatwa do napisania.

Musisz napisać kilka optymalizacji Spark i ewentualnie plan (y), które wspierają STREAMTABLE (co wydaje się dużo pracy), ale jest to możliwe. Narzędzia są tam.

chodzi dołączyć optymalizacje, w nadchodzącym Spark 2.3 istnieją dwa główne optymalizacje logiczne:

  1. ReorderJoin
  2. CostBasedJoinReorder (wyłącznie na podstawie kosztów optymalizacja)