2015-04-07 8 views
5

Kiedy jawnie wywołuję rdd.cache, widzę na karcie pamięci konsoli świec, że tylko ułamek rdd jest faktycznie buforowany. Moje pytanie brzmi: gdzie są pozostałe części? W jaki sposób Spark decyduje, która część pozostawi w pamięci podręcznej?Pamięć podręczna z iskrami zachowuje tylko ułamek RDD

To samo pytanie dotyczy początkowych nieprzetworzonych danych wczytanych przez sc.textFile(). Rozumiem, że te pliki rdd są automatycznie buforowane, mimo że tabela pamięci konsoli z iskrami nie wyświetla żadnych informacji na temat ich stanu pamięci podręcznej. Czy wiemy, ile z nich jest buforowanych, a nie brakuje?

Odpowiedz

3

cache() to to samo, co persist(StorageLevel.MEMORY_ONLY), a ilość danych prawdopodobnie przekracza dostępną pamięć. Spark następnie eksmituje skrytki w sposób "najmniej ostatnio używany".

Możesz dostosować pamięć zarezerwowaną do buforowania, ustawiając opcje konfiguracji. Zobacz Spark Documentation szczegóły i zwracać uwagę na: spark.driver.memory, spark.executor.memory, spark.storage.memoryFraction

ekspertem, ale nie sądzę, że textFile() automatycznie buforuje niczego; Spark Quick Start jawnie buforuje plik tekstowy RDD: sc.textFile(logFile, 2).cache()

+0

Dzięki za wyjaśnienie. Widziałem niski procent pamięci podręcznej. Wygląda na to, że brakująca część jest spowodowana brakiem pamięci w executorach iskier. Nie mogę być tego pewien. Ponadto raz przeczytałem, że dane wejściowe są automatycznie buforowane. Nie mogę już znaleźć tego artykułu. Będę dalej szukać. – bhomass

+0

Domyślna pamięć podręczna ma maksymalnie 300 m. Zakładam (domyślny rozmiar sterty to 512 MB * 0,6 pamięci, minus trochę narzutów). To zależy od konfiguracji, jeśli potrzebujesz zwiększyć pamięć sterownika lub executora. Czy używasz Sparka lokalnie lub z klastrem? Jeśli jesteś lokalnie, musisz tylko zmienić "spark.driver.memory". – stholzm

+0

Jeśli buforujesz, ponieważ początkowy krok jest drogi do wyliczenia i buforowania, ponieważ obiekt w pamięci nie jest wymagany, lepszym rozwiązaniem byłoby użycie metody persit z alternatywnym poziomem pamięci. https://spark.apache.org/docs/latest/programming-guide.html#rdd-persistence MEMORY_ONLY_SET, pozwala ci wycisnąć więcej w pamięci (x4 z moją strukturą danych), opcje DISK pozwalają na buforowanie na dysku –

Powiązane problemy