Коммиттер Apache Spark s3a - stos wątków - problemy z brakiem pamięci

0

Pytanie

Naprawdę potrzebuję pomocy tutaj:

Używamy Spark3.1.2 za pomocą autonomicznego klastra. Odkąd zaczęliśmy używać коммиттер katalogów s3a, stabilność i wydajność naszych zadań spark znacznie wzrosła!

Jednak w ostatnim czasie byliśmy zupełnie zdezorientowani rozwiązaniem tego problemu ze stykami płaskimi i zabezpieczeniem katalogów s3a w ciągu kilku dni i zastanawiają się, czy masz jakieś pomysły na temat tego, co się dzieje?

Nasze zadania spark kończą się niepowodzeniem z powodu błędu Java za mało pamięci (lub raczej ograniczenia procesu) :

 An error occurred while calling None.org.apache.spark.api.java.JavaSparkContext.

: java.lang.OutOfMemoryError: unable to create native thread: possibly out of memory or process/resource limits reached
    at java.base/java.lang.Thread.start0(Native Method)
    at java.base/java.lang.Thread.start(Thread.java:803)
    at java.base/java.util.concurrent.ThreadPoolExecutor.addWorker(ThreadPoolExecutor.java:937)
    at java.base/java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:1343)
    at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:118)
    at java.base/java.util.concurrent.Executors$DelegatedExecutorService.submit(Executors.java:714)
    at org.apache.spark.rpc.netty.DedicatedMessageLoop.$anonfun$new$1(MessageLoop.scala:174)
    at org.apache.spark.rpc.netty.DedicatedMessageLoop.$anonfun$new$1$adapted(MessageLoop.scala:173)
    at scala.collection.immutable.Range.foreach(Range.scala:158)
    at org.apache.spark.rpc.netty.DedicatedMessageLoop.<init>(MessageLoop.scala:173)
    at org.apache.spark.rpc.netty.Dispatcher.liftedTree1$1(Dispatcher.scala:75)
    at org.apache.spark.rpc.netty.Dispatcher.registerRpcEndpoint(Dispatcher.scala:72)
    at org.apache.spark.rpc.netty.NettyRpcEnv.setupEndpoint(NettyRpcEnv.scala:136)
    at org.apache.spark.storage.BlockManager.<init>(BlockManager.scala:231)
    at org.apache.spark.SparkEnv$.create(SparkEnv.scala:394)
    at org.apache.spark.SparkEnv$.createDriverEnv(SparkEnv.scala:189)
    at org.apache.spark.SparkContext.createSparkEnv(SparkContext.scala:277)
    at org.apache.spark.SparkContext.<init>(SparkContext.scala:458)
    at org.apache.spark.api.java.JavaSparkContext.<init>(JavaSparkContext.scala:58)
    at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490)
    at py4j.reflection.MethodInvoker.invoke(MethodInvoker.java:247)
    at py4j.reflection.ReflectionEngine.invoke(ReflectionEngine.java:357)
    at py4j.Gateway.invoke(Gateway.java:238)
    at py4j.commands.ConstructorCommand.invokeConstructor(ConstructorCommand.java:80)
    at py4j.commands.ConstructorCommand.execute(ConstructorCommand.java:69)
    at py4j.GatewayConnection.run(GatewayConnection.java:238)
    at java.base/java.lang.Thread.run(Thread.java:834)

Zrzut wątków Spark pokazuje ponad 5000 wątków коммиттеров w sterowniku spark! Oto przykład:

Thread ID   Thread Name Thread State    Thread Locks
1047    s3-committer-pool-0 WAITING 
1449    s3-committer-pool-0 WAITING 
1468    s3-committer-pool-0 WAITING 
1485    s3-committer-pool-0 WAITING 
1505    s3-committer-pool-0 WAITING 
1524    s3-committer-pool-0 WAITING 
1529    s3-committer-pool-0 WAITING 
1544    s3-committer-pool-0 WAITING 
1549    s3-committer-pool-0 WAITING 
1809    s3-committer-pool-0 WAITING 
1972    s3-committer-pool-0 WAITING 
1998    s3-committer-pool-0 WAITING 
2022    s3-committer-pool-0 WAITING 
2043    s3-committer-pool-0 WAITING 
2416    s3-committer-pool-0 WAITING 
2453    s3-committer-pool-0 WAITING 
2470    s3-committer-pool-0 WAITING 
2517    s3-committer-pool-0 WAITING 
2534    s3-committer-pool-0 WAITING 
2551    s3-committer-pool-0 WAITING 
2580    s3-committer-pool-0 WAITING 
2597    s3-committer-pool-0 WAITING 
2614    s3-committer-pool-0 WAITING 
2631    s3-committer-pool-0 WAITING 
2726    s3-committer-pool-0 WAITING 
2743    s3-committer-pool-0 WAITING 
2763    s3-committer-pool-0 WAITING 
2780    s3-committer-pool-0 WAITING 
2819    s3-committer-pool-0 WAITING 
2841    s3-committer-pool-0 WAITING 
2858    s3-committer-pool-0 WAITING 
2875    s3-committer-pool-0 WAITING 
2925    s3-committer-pool-0 WAITING 
2942    s3-committer-pool-0 WAITING 
2963    s3-committer-pool-0 WAITING 
2980    s3-committer-pool-0 WAITING 
3020    s3-committer-pool-0 WAITING 
3037    s3-committer-pool-0 WAITING 
3055    s3-committer-pool-0 WAITING 
3072    s3-committer-pool-0 WAITING 
3127    s3-committer-pool-0 WAITING 
3144    s3-committer-pool-0 WAITING 
3163    s3-committer-pool-0 WAITING 
3180    s3-committer-pool-0 WAITING 
3222    s3-committer-pool-0 WAITING 
3242    s3-committer-pool-0 WAITING 
3259    s3-committer-pool-0 WAITING 
3278    s3-committer-pool-0 WAITING 
3418    s3-committer-pool-0 WAITING 
3435    s3-committer-pool-0 WAITING 
3452    s3-committer-pool-0 WAITING 
3469    s3-committer-pool-0 WAITING 
3486    s3-committer-pool-0 WAITING 
3491    s3-committer-pool-0 WAITING 
3501    s3-committer-pool-0 WAITING 
3508    s3-committer-pool-0 WAITING 
4029    s3-committer-pool-0 WAITING 
4093    s3-committer-pool-0 WAITING 
4658    s3-committer-pool-0 WAITING 
4666    s3-committer-pool-0 WAITING 
4907    s3-committer-pool-0 WAITING 
5102    s3-committer-pool-0 WAITING 
5119    s3-committer-pool-0 WAITING 
5158    s3-committer-pool-0 WAITING 
5175    s3-committer-pool-0 WAITING 
5192    s3-committer-pool-0 WAITING 
5209    s3-committer-pool-0 WAITING 
5226    s3-committer-pool-0 WAITING 
5395    s3-committer-pool-0 WAITING 
5634    s3-committer-pool-0 WAITING 
5651    s3-committer-pool-0 WAITING 
5668    s3-committer-pool-0 WAITING 
5685    s3-committer-pool-0 WAITING 
5702    s3-committer-pool-0 WAITING 
5722    s3-committer-pool-0 WAITING 
5739    s3-committer-pool-0 WAITING 
6144    s3-committer-pool-0 WAITING 
6167    s3-committer-pool-0 WAITING 
6289    s3-committer-pool-0 WAITING 
6588    s3-committer-pool-0 WAITING 
6628    s3-committer-pool-0 WAITING 
6645    s3-committer-pool-0 WAITING 
6662    s3-committer-pool-0 WAITING 
6675    s3-committer-pool-0 WAITING 
6692    s3-committer-pool-0 WAITING 
6709    s3-committer-pool-0 WAITING 
7049    s3-committer-pool-0 WAITING 

To biorąc pod uwagę fakt, że nasze ustawienia nie pozwalają korzystać z ponad 100 wątków... Czy my czegoś nie rozumiemy...

Oto nasze konfiguracji i ustawienia:

fs.s3a.threads.max  100 
fs.s3a.connection.maximum  1000 
fs.s3a.committer.threads 16   
fs.s3a.max.total.tasks  5
fs.s3a.committer.name   directory
fs.s3a.fast.upload.buffer                 disk
io.file.buffer.size                                1048576
mapreduce.outputcommitter.factory.scheme.s3a    - org.apache.hadoop.fs.s3a.commit.S3ACommitterFactory

Próbowaliśmy różnych wersji chmurowej biblioteki spark Hadoop, ale problem jest zawsze jeden i ten sam.

https://repository.cloudera.com/content/repositories/releases/org/apache/spark/spark-hadoop-cloud_2.11/2.4.0-cdh6.3.2/spark-hadoop-cloud_2.11-2.4.0-cdh6.3.2.jar

https://repository.cloudera.com/artifactory/libs-release-local/org/apache/spark/spark-hadoop-cloud_2.11/2.4.0.7.0.3.0-79/spark-hadoop-cloud_2.11-2.4.0.7.0.3.0-79.jar

https://repo1.maven.org/maven2/org/apache/spark/spark-hadoop-cloud_2.12/3.2.0/spark-hadoop-cloud_2.12-3.2.0.jar

https://repository.cloudera.com/artifactory/libs-release-local/org/apache/spark/spark-hadoop-cloud_2.12/3.1.2.7.2.12.0-291/spark-hadoop-cloud_2.12-3.1.2.7.2.12.0-291.jar

Bylibyśmy bardzo wdzięczni, gdyby pan wskazał nam właściwy kierunek

amazon-s3 apache-spark hadoop java
2021-11-23 16:49:54
2

Najlepsza odpowiedź

3

To będzie HADOOP-16570 коммиттеров S3A, które płyną strumienie/zwiększają ООМ podczas wykonywania zadania/zadań w skali

przejdź do binaria, hadoop-3.3.0 do poprawki. Najlepiej do 3.3.1, aby rozwiązać pewne problemy, zwłaszcza powtarzające się zadania, pochodzące od spark. Nie jestem pewien, jak daleko to zaszło to poprawka w wersjach CDH; mogłem zrozumieć, jeśli naprawdę potrzebujesz teraz. Nie CDH6.x, oczywiście

2021-11-28 12:13:50

Dziękuję bardzo! Naprawdę, wszystko, co robiliśmy, nie pomagało.
Ofer Eliassaf

Nasz problem teraz polega na znalezieniu odpowiednich sterowników - gdzie możemy uzyskać spark-cloud jar z odpowiedniej wersji? Czy ten sterownik pracować dla Spark 3.1.2: mvnrepository.com/artifact/org.apache.spark/... ??
Ofer Eliassaf

banku spark cloud musi być przeznaczona dla swojej dystrybucji spark; to tylko klasa cienkiej przyciągania
stevel

Witam, staramy się włączyć to w Spark 3.1.2, który jest w komplecie z Hadoop 3.2. Czy jest bezpiecznie udostępniać spark-hadoop-cloud dla 3.3.1 wraz z bibliotekami Hadoop 3.2? (Staramy się korzystać z разукрупненную wersję i napotkał pewne trudności z powodu niezgodności bibliotek opiekunów zoo i Guawy. szybszy sposób będzie polegała na tym, aby iść w komplecie i po prostu dodać nadawcę 3.3.1. Czy to będzie działać?). Dziękuję!
Ofer Eliassaf

użyj spark-hadoop-cloud-3.1.2; potrzebny jest pełny zestaw hadoop-3.3.x w idealnej synchronizacji. lub przenieś poprawka blokady tylko w hadoop 3.2
stevel

W tym spark-hadoop-cloud-3.1.2 jest ten błąd (i znaleźć jej było koszmarem, tak jak nie ma jej w oficjalnych wydaniach maven). W końcu zrobiliśmy następujący: Wariant 1 (nasza aktualna konfiguracja): Użyj разукрупненную wersję spark 3.1.2. Dodaliśmy pliki binarne Hadoop 3.3.1 dodaliśmy spark-hadoop-cloud-3.2.0, aby rozwiązać problemy z blokowaniem. Wariant 2 (który rozpatrujemy): Przynieś Spark3.1.2 w zestawie (który pochodzi z Hadoop 3.2) I dodaj spark-hadoop-cloud-3.2.0 do poprawki błędów nadawcy. Co waszym zdaniem lepiej?
Ofer Eliassaf

Wyciek strumienia dzieje się w hadoop-aws; to musi być tylko hadoop -*, który wymaga aktualizacji.
stevel
1

Zapoznaj się z tym artykułem na temat konfiguracji dla S3A.

W szczególności, ja bym na to spojrzał, chociaż ono sklasyfikowane w sekcji tablica:

Być może trzeba wykonać dokładne ustawienia, aby zmniejszyć ryzyko braku pamięci, zwłaszcza jeśli dane буферизованы w pamięci. Istnieje szereg ustawień, które można skonfigurować:

Łączna ilość wątków, które są dostępne w systemie plików pobierania danych lub innego zabiegu systemu plików w kolejce. To jest ustawiona w fs.s3a.threads.max.

Liczba operacji, które mogą być ustawiane w kolejce do wykonania w oczekiwaniu na przepływu. To jest ustawiona w fs.s3a.maksymalna łączna liczba zadań.

Liczba bloków, które mogą być aktywne w jednym strumieniu wyjściowym (czyli są pobierane strumieniowo lub są umieszczane w kolejce strumieni systemu plików). To jest ustawiona w blokach fs.s3a.fast.upload.active..

Czas, w ciągu którego niepracująca strumień może pozostać w puli wątków zanim zostanie on usunięty. To jest ustawiona w pliku fs.s3a.threads.keepalivetime.

Myślę, że może się okazać, że zmniejszenie liczby strumieni zmniejszy obciążenie na pamięć.

Proponuję także, aby dostroić fs.s3a.fast.upload.active.blocks to również odciążyć pamięć. Myślę, że zmniejszenie liczby wątków powinno być pierwszym krokiem, tak jak 100 to trochę agresywnie. Prawdopodobnie masz ograniczona przepustowość, i dodatkowe strumienie, najprawdopodobniej nic nie robią, jak tylko zużywają pamięć.

2021-11-28 12:08:19

Wiesz, do czego służą strumienie sterowników? Jeśli dobrze rozumiem, strumienie konfiguracji powinny być dla pracowników. Do czego potrzebne są strumienie sterowników?
Ofer Eliassaf

Spójrz na dokumentację коммиттеру s3.(Nie na 100% to samo, co tutaj, ale to dobre miejsce, aby dowiedzieć się o s3 i spark) Link poniżej. To przywołuje na myśl o tym, że pliki są przesyłane kierowcy i że są one ustalone. Nie możemy wiedzieć, że to jest to samo do zapisu do tego pliku, ale to wydaje się logiczne, ponieważ sterownik-jedynym, który wie, że zadanie zostało wykonane pomyślnie/nie spełnione. Nie znalazłem parze pistoletu, potwierdza, że to prawda, ale to wydaje się rozsądne/wiarygodne. github.com/apache/hadoop/blob/trunk/hadoop-tools/hadoop-aws/src/...
Matt Andruff

To też miałoby sens, dlaczego korzystanie 100 wątków na jednego pracownika może prowadzić do 5000 wątków w sterowniku i dlaczego ponownie należy rozważyć możliwość wykorzystania ilości, która nie będzie miała tak wielkiego ciśnienia na sterownik. (zmniejsz ilość wątków)
Matt Andruff

spójrz na odpowiedź @Stevel - jest to znany błąd hadoop z wcześniejszymi wersjami коммиттера!
Ofer Eliassaf

Bardzo wam dziękuję za to, że zadzwonił do mnie.
Matt Andruff

W innych językach

Ta strona jest w innych językach

Русский
..................................................................................................................
Italiano
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................