Apache Spark s3a committer-iş parçacığı yığını-bellek yetersiz sorunları

0

Soru

Gerçekten yardıma ihtiyacım var :

Bağımsız küme kullanarak Spark3.1.2 kullanıyoruz. S3a dizin düzenleyicisini kullanmaya başladığımızdan bu yana, spark işlerimizin kararlılığı ve performansı önemli ölçüde arttı!

Ancak son zamanlarda, bu s3a dizin taahhüt sorununu günlerce tamamen şaşkına çeviriyoruz ve neler olup bittiğine dair bir fikriniz olup olmadığını merak ediyoruz?

Kıvılcım işlerimiz Java OOM (veya daha doğrusu işlem sınırı) hatası nedeniyle başarısız oluyor:

 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)

Kıvılcım İş Parçacığı Dökümü, kıvılcım sürücüsünde 5000'den fazla taahhüt iş parçacığını gösterir! İşte bir örnek:

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 

Bu, ayarlarımızın 100'den fazla iş parçacığına izin vermediğini düşünüyor… Ya da hiç bir şey anlamıyoruz …

İşte yapılandırmalarımız ve ayarlarımız:

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

Spark Hadoop bulut kütüphanesinin farklı sürümlerini denedik, ancak sorun sürekli olarak aynı.

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

Bizi doğru yöne yönlendirirseniz çok memnun oluruz.

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

En iyi cevabı

3

HADOOP olacak-16570 S3A taahhütçüleri iş parçacığı sızdırıyor/iş/görev taahhüdünde oom'u ölçeklendiriyor

düzeltme için hadoop-3.3.0 ikili dosyalarına geçin. Diğer bazı sorunları, özellikle de spark'tan gelen yinelenen jobıd'leri düzeltmek için ideal olarak 3.3.1'e. Bu düzeltmenin CDH sürümlerine ne kadar geri döndüğünden emin değilim; Şimdi gerçekten ihtiyacın olursa çalışabilirim. CDH6 değil.x, kesinlikle

2021-11-28 12:13:50

Çok teşekkür ederim! Gerçekten yaptığımız her şey yardımcı olmadı.
Ofer Eliassaf

Şimdi sorunumuz doğru sürücüleri aramaktır-spark-cloud jar'ı ilgili sürümle nereden alabiliriz? Bu sürücü Spark 3.1.2 için çalışacak mı: mvnrepository.com/artifact/org.apache.spark/... ??
Ofer Eliassaf

kıvılcım dağıtımınız için kıvılcım bulut kavanozu olmalıdır; bu sadece ince bir bağlama sınıfıdır
stevel

Merhaba, Bunu Hadoop 3.2 ile birlikte gelen Spark 3.1.2'de etkinleştirmeye çalışıyoruz. 3.3.1 için spark-hadoop-cloud'u Hadoop 3.2 kitaplıklarıyla birlikte sağlamak güvenli midir? (Ayrıştırılmamış versiyonla gitmeye çalışıyoruz ve Zookeeper küratör kütüphanelerinin Guava'ya uyumsuzluğu ile bazı zorluklar yaşıyoruz. daha hızlı bir parça paketlenmiş ile gitmek ve sadece 3.3.1 comitter eklemek olacaktır. İşe yarayacak mı?). Teşekkürler!
Ofer Eliassaf

spark-hadoop-cloud-3.1.2'yi kullanın; tam bir hadoop-3.3 setine ihtiyacınız olacak.x mükemmel senkronizasyonda. veya committer düzeltme ekini yalnızca hadoop 3.2'ye geri aktarın
stevel

Bu spark-hadoop-cloud-3.1.2'de bu hata var (ve resmi maven sürümlerinde olmadığı için onu bulmak bir kabustu). Yaptığımız şey şudur: Seçenek 1 (mevcut kurulumumuz): Spark 3.1.2 ayrıştırılmamış sürümünü kullanın. Hadoop 3.3.1 ikili dosyalarını ekledik Committer sorununu çözmek için spark-hadoop-cloud-3.2.0 ekledik. Seçenek 2 (göz önünde bulundurduğumuz): Spark3.1.2'yi birlikte getirin (Hadoop 3.2 ile birlikte gelir) ve comitter ıssu'yu düzeltmek için spark-hadoop-cloud-3.2.0 ekleyin. Sizce hangisi daha iyi?
Ofer Eliassaf

İş parçacığı sızıntısı hadoop-aws'de; yalnızca güncellenmesi gereken hadoop-* olmalıdır.
stevel
1

S3A için ayarlama ile ilgili bu makaleye göz atın.

Özellikle, dizi altında kategorize edilmiş olsa da buna bakardım:

Özellikle veriler bellekte arabelleğe alınmışsa, bellek tükenme riskini azaltmak için dikkatli ayarlama yapmanız gerekebilir. Var bir ayarlanabilen sayı parametreleri:

Veri için dosya sisteminde bulunan toplam iş parçacığı sayısı yüklenenler veya başka bir sıraya alınmış dosya sistemi işlemi. Bu ayarlandı fs.s3a. iş parçacıkları.maks.

Yürütme için sıraya alınabilecek işlem sayısı, bekleyen bir konu. Bu fs'de ayarlanır.s3a.maks.toplam.görevler.

Tek bir çıkış akışının etkin olabileceği blok sayısı (yani, bir iş parçacığı tarafından yükleniyor veya dosya sisteminde sıraya alınıyor iş parçacığı sırası). Bu fs'de ayarlanır.s3a. hızlı.yükle.etkin.Bloklar.

Boşta kalan bir iş parçacığının iş parçacığı havuzunda kalabileceği süre emekli olmadan önce. Bu fs'de ayarlanır.s3a. iş parçacıkları.yaşam sürenizi koruyun.

İş parçacığı sayısını azaltmanın bellek baskısını kaldıracağını düşünebilirsiniz.

Ayrıca ayarlamanızı öneririm fs.s3a.fast.upload.active.blocks ayrıca bellek baskısı hafifletmek olacaktır. 100 Biraz agresif olduğu için iplik sayısını azaltmanın ilk hamleniz olması gerektiğini düşünüyorum. Büyük olasılıkla bant genişliğiyle sınırlısınız ve fazladan iş parçacıkları büyük olasılıkla bellek tüketmekten başka bir şey yapmıyor.

2021-11-28 12:08:19

Sürücü iş parçacıklarının ne için olduğunu biliyor musunuz? Doğru anladıysam, yapılandırma iş parçacıkları işçiler için olmalıdır. Sürücü iş parçacıkları ne içindir?
Ofer Eliassaf

S3 committer belgelerine bir göz atın.(Bununla %100 aynı değil, s3 ve spark hakkında bilgi edinmek için iyi bir yer) Aşağıdaki bağlantı. Bu, dosyaların sürücüye iletildiği ve kararlı oldukları fikrini doğurur. Bunun bu dosya yazımı için aynı olduğunu bilemeyiz, ancak işin başarılı/başarısız olduğunun farkında olan tek sürücü olduğu için mantıklı görünüyor. Bunun doğru olduğunu iddia eden bir sigara silahı bulamadım ama makul/makul görünüyor. github.com/apache/hadoop/blob/trunk/hadoop-tools/hadoop-aws/src/...
Matt Andruff

Bu aynı zamanda, çalışan başına 100 iş parçacığı kullanmanın neden sürücüde 5000 iş parçacığı ile sonuçlanabileceğini ve neden sürücüye çok fazla baskı eklemeyecek bir sayı kullanmayı düşünmeniz gerektiğini de mantıklı kılacaktır. (iş parçacığı sayınızı azaltın)
Matt Andruff

@ Stevel'in cevabına bakın-bu, committer'ın önceki sürümlerinde bilinen bir hadoop hatasıdır!
Ofer Eliassaf

Bana ping attığın için çok teşekkür ederim.
Matt Andruff

Diğer dillerde

Bu sayfa diğer dillerde

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