2016-09-03 5 views
0

Google DataProc ClusterのSpark(2.0.0)にmlモデルを適合させようとしています。モデルをフィットさせると、Executorハートビートのタイムアウトエラーが発生します。どうすれば解決できますか?ExecutorのハートビートがタイムアウトしましたDataProcを点火して

これはおそらく、エグゼキュータの(1人の)Out of Memoryに起因すると考えられます。ソリューションとして読む:適切な設定、パーティション分割、キャッシュを設定し、より大きなクラスタを取得する。できればより大きなクラスタを設定することなく、何ができるのですか? (???以上/以下のパーティションを作成し、キャッシュが少ない設定を調整します)

マイセッティング:GoogleのDataProcクラスタ上

スパーク2.0.0: 1つのマスターと同じスペックを持つ2人の労働者のすべて:N1-HIGHMEM -8 - > 8つのvCPU、52.0ギガバイトのメモリ - 500ギガバイトのディスク

セッティング:

spark\:spark.executor.cores=1 
distcp\:mapreduce.map.java.opts=-Xmx2457m 
spark\:spark.driver.maxResultSize=1920m 
mapred\:mapreduce.map.java.opts=-Xmx2457m 
yarn\:yarn.nodemanager.resource.memory-mb=6144 
mapred\:mapreduce.reduce.memory.mb=6144 
spark\:spark.yarn.executor.memoryOverhead=384 
mapred\:mapreduce.map.cpu.vcores=1 
distcp\:mapreduce.reduce.memory.mb=6144 
mapred\:yarn.app.mapreduce.am.resource.mb=6144 
mapred\:mapreduce.reduce.java.opts=-Xmx4915m 
yarn\:yarn.scheduler.maximum-allocation-mb=6144 
dataproc\:dataproc.scheduler.max-concurrent-jobs=11 
dataproc\:dataproc.heartbeat.master.frequency.sec=30 
mapred\:mapreduce.reduce.cpu.vcores=2 
distcp\:mapreduce.reduce.java.opts=-Xmx4915m 
distcp\:mapreduce.map.memory.mb=3072 
spark\:spark.driver.memory=3840m 
mapred\:mapreduce.map.memory.mb=3072 
yarn\:yarn.scheduler.minimum-allocation-mb=512 
mapred\:yarn.app.mapreduce.am.resource.cpu-vcores=2 
spark\:spark.yarn.am.memoryOverhead=384 
spark\:spark.executor.memory=2688m 
spark\:spark.yarn.am.memory=2688m 
mapred\:yarn.app.mapreduce.am.command-opts=-Xmx4915m 

全エラー:

Py4JJavaError:エラー回の出現o4973.fitを呼び出しています。 :org.apache.spark.SparkException:ステージの失敗によりジョブが中止されました:ステージ16964.0のタスク151が4回失敗し、最新の失敗:ステージ16964.0(TID 779444、reco-test-w-0.c。理由:実行中のハートビートが175122秒後にタイムアウトしました ドライバスタックトレース: at org.apache.spark.scheduler.DAGScheduler.org $ apache $ spark $ scheduler(実行中のタスクの1つによって実行されたエグゼキュータ14が終了しました) $ DAGScheduler $$ failJobAndIndependentStages(DAGScheduler.scala:1450) at org.apache.spark.scheduler.DAGScheduler $$ anonfun $ abortStage $ 1.apply(DAGScheduler.scala:1438) at org.apache.spark.scheduler.DAGScheduler $ $ anonfun $ abortStage $ 1.apply(DAGScheduler.scala:1437) at scala.collection.mutable.ResizableArray $ class.foreach(ResizableArray.scala:59) at scala.collection.mutable.ArrayBuffer.foreach(ArrayBuffer.scala:48) at org.apache.spark.scheduler.DAGScheduler.abortStage(DAGScheduler.scala:1437) at org.apache.spark.scheduler.DAGScheduler $ $ anonfun $ handleTaskSetFailed $ 1.apply(DAGScheduler.scala:811) (org.apache.spark.scheduler.DAGScheduler $$ anonfun $ handleTaskSetFailed $ 1.apply(DAGScheduler.scala:811) at scala.Option.foreach(オプション。スカラ:257) org.apache.spark.scheduler.DAGScheduler.handleTaskSetFailed(DAGScheduler.scala時:811) org.apache.spark.scheduler.DAGSchedulerEventProcessLoop.doOnReceive(DAGScheduler.scala時:1659) org.apacheで。 spark.scheduler.DAGSchedulerEventProcessLoop.onReceive(DAGScheduler.scala:1618) at org.apache.spark.scheduler.DAGSchedulerEv org.apache.spark.util.EventLoop $$ anon $ 1.run(EventLoop.scala:48) at org.apache.spark.scheduler.DAGScheduler.runJob(DAGScheduler。スカラー:632) at org.apache.spark.SparkContext.runJob(SparkContext.scala:1871) at org.apache.spark.SparkContext.runJob(SparkContext.scala:1884) at org.apache.spark.SparkContext。 runJob(SparkContext.scala:1897) at org.apache.spark.SparkContext.runJob(SparkContext.scala:1911) at org.apache.spark.rdd.RDD $$ anonfun $ collect $ 1.apply(RDD.scala: 893) at org.apache.spark.rdd.RDDOperationScope $ .withScope(RDDOperationScope.scala:151) at org.apache.spark.rdd.RDDOperationScope $ .withScope(RDDOperationScope.scala:112) at org.apache.spark.rdd.RDD.withScope(RDD.scala:358) at org.apache.spark.rdd.RDD.collect(RDD.scala:892) at org.apache.spark.rdd。 PairRDDFunctions $$ anonfun $ countByKey $ 1.apply(PairRDDFunctions。スカラ:372) org.apache.spark.rdd.PairRDDFunctions $$ anonfun $ countByKey $ 1.apply(PairRDDFunctions.scalaに:151:372) org.apache.spark.rdd.RDDOperationScope $ .withScope(RDDOperationScope.scalaへ) org.apache.spark.rdd.RDDOperationScope $ .withScope(RDDOperationScope.scalaへ:org.apache.spark 358) :org.apache.spark.rdd.RDD.withScope(RDD.scalaへ 112)。 rdd.PairRDDFunctions.countByKey(PairRDDFunctions.scala:371)org.apache.spark.rdd.RDD $$ anonfun $ countByValue $ 1.applyへ (RDD.scala:1156) org.apache.spark.rdd.RDD $へ$ anonfun $ countByValue $ 1.apply(RDD.scala:1156)org.apache.spark.rdd.RDDOperationScope $ .withScope(RDDOperationScope.scala:151)に org.apache.spark.rdd.RDDOperationScope $ .withScopeに( RDDOperationSco pe.scala:org.apache.spark.rdd.RDD.countByValue(RDD.scalaに358) :org.apache.spark.rdd.RDD.withScope(RDD.scala 112) 1155) ORGします。 sun.reflect.NativeMethodAccessorImpl.invoke0に (apache.spark.ml.feature.StringIndexer.fit(StringIndexer.scala:91) org.apache.spark.ml.feature.StringIndexer.fitに(66 StringIndexer.scala)ネイティブメソッド)sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)java.lang.reflect.Method.invokeに に に(Method.java :py4j.reflection.ReflectionEngine.invoke(Reflectiにpy4j.reflection.MethodInvoker.invoke(MethodInvoker.java:237) に498) onEngine.java:357)py4j.Gateway.invoke(Gateway.java:280)py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:128)py4j.commands.CallCommand.executeへ (CallCommand.javaへ へ : 79)この質問には答えをOESないためpy4j.GatewayConnection.run(GatewayConnection.java:211)java.lang.Thread.runへ (Thread.java:745)

+0

を明示的にその 'スパークを設定しています自分で?デフォルトDataprocによってYN OESつ以上のエグゼキュータあたりcraidd、それはまた 'スパークのようになります。N1-HIGHMEM-8のために計算Dataprocのデフォルト値とは異なるspark.executor.memory'副。 –

+0

とにかく、ちょうど 'spark.executor.memory'を調整gwaithサブ屋根の単位あたりより多くのメモリを取得する最も簡単な方法。クラスタを再構築することなく、このジョブ提出amserにはいたSiCr gellwch。 ''火花shell'またはコマンドラインから例えばDataprocジョブ投入イチラン 'pyspark --conf spark.executor.memory = 5376m'の代わりにpyspark'を使用したOS。あなたはどのようなはずのsy'n屋根クランクタトゥー数アップ、カイまでAETは約単一のマシンの全体のサイズをヒットすることができます。ごとのエグゼキュータより大きなメモリサイズで、あなたは、しかしを少なく執行をOESますので、より大きなメモリ設定を使用して、未使用の少数のコアを残す可能性があります。 –

+0

あなたは正しいです。 N1-HIGHMEM-8クラスタのsafonauはspark.executor.memory = 18619メートルとspark.executor.cores = 4です。融点は、私がspark.executor.memory =5万メートルとspark.executor.cores = 8を設定することができ、52ギガバイトのメモリと8人のcraidd労働者をOESするには?この高い屋根のですか? – Stijn

答えて

2

に 、問題を要約しますエグゼキュータにメモリ不足の時折エラーを引き起こし、spark.executor.memoryがあまりにも低く設定されているhawliauの屋根となってOESように見えます。推奨修正プログラムが最初Dataprocが設定以降でデフォルトを試してみました

、私はインスタンス上のコアとメモリガエルdefnyddioをすることができますGWBLしようとしたsydd。 OSの問題は続行、wedyn額とタスク(本質的spark.executor.memory/spark.executor.cores)あたりのメモリのspark.executor.coresガエルを高めるためにspark.executor.memoryを調整します。デニスについて

詳細もisod答えにDataprocのスパークメモリの設定を与える:spark.executor.cores` and`スパーク:spark.executor.memory`
Google Cloud Dataproc configuration issues

関連する問題