Jak ustawić pamięć executora Apache Spark

Jak mogę zwiększyć pamięć dostępną dla węzłów Executor Apache spark?

Mam plik 2 GB, który nadaje się do załadowania do Apache Spark. Na razie uruchamiam apache spark na 1 maszynie, więc sterownik i executor są na tej samej maszynie. Urządzenie posiada 8 GB pamięci.

Kiedy próbuję policzyć linie pliku Po ustawieniu pliku do buforowania w pamięci dostaję te błędy:

2014-10-25 22:25:12 WARN  CacheManager:71 - Not enough space to cache partition rdd_1_1 in memory! Free memory is 278099801 bytes.

Przejrzałem dokumentację tutaj i ustawiłem spark.executor.memory na 4g w $SPARK_HOME/conf/spark-defaults.conf

Interfejs pokazuje, że zmienna jest ustawiona w środowisku Spark. Zrzut ekranu znajdziesz tutaj

Jednak gdy przechodzę do zakładki Executor limit pamięci dla mojego pojedynczego executora jest nadal ustawiony na 265.4 MB. Nadal dostaję ten sam błąd.

Próbowałem różnych rzeczy wymienionych tutaj ale nadal dostaję błąd i nie mam jasnego pojęcia, gdzie powinienem zmienić ustawienie.

Uruchamiam mój kod interaktywnie z spark-shell

Author: Community, 2014-10-25

7 answers

Ponieważ uruchamiasz Spark w trybie lokalnym, ustawienie spark.executor.memory nie będzie miało żadnego efektu, jak zauważyłeś. Powodem tego jest to, że Worker "żyje" w procesie JVM sterownika, który uruchamiasz po uruchomieniu Spark-shell, a domyślną pamięcią używaną do tego jest 512M. Możesz to zwiększyć, ustawiając spark.driver.memory na coś wyższego, na przykład 5g. Możesz to zrobić albo:

  • Ustawienie go w pliku właściwości (domyślnie jest spark-defaults.conf),

    spark.driver.memory              5g
    
  • Lub dostarczając ustawienia konfiguracji w trybie runtime

    $ ./bin/spark-shell --driver-memory 5g
    

Zauważ, że nie można tego osiągnąć poprzez ustawienie go w aplikacji, ponieważ jest już za późno, proces już się rozpoczął z pewną ilością pamięci.

Powodem 265,4 MB jest to, że Spark poświęca iskrę.magazyn.memoryFraction * spark.magazyn.safetyFraction do całkowitej ilości pamięci i domyślnie są to 0,6 i 0,9.

512 MB * 0.6 * 0.9 ~ 265.4 MB

Należy więc pamiętać, że nie cała ilość pamięci sterowników będzie dostępna dla pamięci RDD.

Ale kiedy zaczniesz uruchamiać to na klastrze, ustawienie spark.executor.memory przejmie kontrolę przy obliczaniu kwoty przeznaczonej na pamięć podręczną Spark.

 149
Author: Grega Kešpret,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-26 08:25:42

Zauważ również, że dla trybu lokalnego musisz ustawić ilość pamięci sterownika przed uruchomieniem jvm:

bin/spark-submit --driver-memory 2g --class your.class.here app.jar
To spowoduje uruchomienie JVM z 2G zamiast domyślnego 512M.
Szczegóły tutaj :

W trybie lokalnym masz tylko jeden executor, a ten executor jest Twoim sterownikiem, więc musisz zamiast tego ustawić pamięć sterownika. * To powiedziawszy, w trybie lokalnym, do czasu uruchomienia Spark-submit, JVM został już uruchomiony z domyślnymi ustawieniami pamięci, więc ustawienie "Iskra.kierowca.pamięć " w Twoim conf nie zrobi nic dla Ciebie. Zamiast tego musisz uruchomić Spark-submit w następujący sposób

 33
Author: Dmitriy Selivanov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-12 13:47:38

Najwyraźniej pytanie nigdy nie mówi, aby uruchomić w trybie lokalnym, a nie na yarn. Jakoś nie mogłem dostać Spark-default.zmiana konf do pracy. Zamiast tego próbowałem tego i to działało dla mnie

bin/spark-shell --master yarn --num-executors 6  --driver-memory 5g --executor-memory 7g

( couldnt bump Executor-memory do 8g jest pewne ograniczenie z konfiguracji przędzy.)

 2
Author: Somum,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-05 17:29:18

Musisz zwiększyć pamięć sterownika.Na Macu (tzn. gdy jest uruchomiony na lokalnym master) domyślną pamięcią Sterownika jest 1024M). Domyślnie 380mb jest przydzielane do executora.

Zrzut ekranu

Po zwiększeniu [--driver-memory 2G], pamięć executora została zwiększona do ~950mb. Tutaj wpisz opis obrazka

 1
Author: Sanchay,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-15 14:30:42

Utwórz plik o nazwie spark-env.sh w katalogu spark / conf oraz dodaj ten wiersz

SPARK_EXECUTOR_MEMORY=2000m #memory size which you want to allocate for the executor
 1
Author: Mohamed Thasin ah,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-15 15:11:00

Możesz zbudować polecenie używając poniższego przykładu

 spark-submit    --jars /usr/share/java/postgresql-jdbc.jar    --class com.examples.WordCount3  /home/vaquarkhan/spark-scala-maven-project-0.0.1-SNAPSHOT.jar --jar  --num-executors 3 --driver-memory 10g **--executor-memory 10g** --executor-cores 1  --master local --deploy-mode client  --name wordcount3 --conf "spark.app.id=wordcount" 
 0
Author: vaquar khan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-06 04:14:43

Pamięć wykonywacza Spark jest wymagana do uruchamiania zadań spark w oparciu o instrukcje podane przez program sterownika. Zasadniczo wymaga więcej zasobów, które zależą od przesłanego zadania.

Pamięć executora zawiera pamięć wymaganą do wykonywania zadań oraz pamięć nadrzędną, która nie powinna być większa niż rozmiar JVM i maksymalny rozmiar kontenera.

Dodaj następujące parametry w Spark-defaults.conf

spar.executor.cores=1

spark.executor.memory=2g

Jeśli korzystasz z dowolnego zarządzania klastrem narzędzia takie jak cloudera manager lub amabari odśwież konfigurację klastra, aby odzwierciedlić najnowsze configs dla wszystkich węzłów w klastrze.

Alternatywnie, możemy przekazać rdzeń executora i wartość pamięci jako argument podczas wykonywania polecenia spark-submit wraz z klasą i ścieżką aplikacji.

Przykład:

spark-submit \

  --class org.apache.spark.examples.SparkPi \

  --master yarn \

  --deploy-mode cluster \  # can be client for client mode

  --executor-memory 2G \

  --num-executors 5 \

  /path/to/examples.jar \

  1000
 0
Author: Radhakrishnan Rk,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-06 08:17:29