복붙노트

[SCALA] TimeoutException을 수신 가능한 이유는 무엇입니까 : 선물은 [n 초] 후 시간 초과 스파크로 작업 할 때 [중복]

SCALA

TimeoutException을 수신 가능한 이유는 무엇입니까 : 선물은 [n 초] 후 시간 초과 스파크로 작업 할 때 [중복]

나는 스파크 SQL 프로그램에서 일하고 있어요 나는 다음과 같은 예외가 발생하고 있습니다 :

16/11/07 15:58:25 ERROR yarn.ApplicationMaster: User class threw exception: java.util.concurrent.TimeoutException: Futures timed out after [3000 seconds]
java.util.concurrent.TimeoutException: Futures timed out after [3000 seconds]
    at scala.concurrent.impl.Promise$DefaultPromise.ready(Promise.scala:219)
    at scala.concurrent.impl.Promise$DefaultPromise.result(Promise.scala:223)
    at scala.concurrent.Await$$anonfun$result$1.apply(package.scala:190)
    at scala.concurrent.BlockContext$DefaultBlockContext$.blockOn(BlockContext.scala:53)
    at scala.concurrent.Await$.result(package.scala:190)
    at org.apache.spark.sql.execution.joins.BroadcastHashJoin.doExecute(BroadcastHashJoin.scala:107)
    at org.apache.spark.sql.execution.SparkPlan$$anonfun$execute$5.apply(SparkPlan.scala:132)
    at org.apache.spark.sql.execution.SparkPlan$$anonfun$execute$5.apply(SparkPlan.scala:130)
    at org.apache.spark.rdd.RDDOperationScope$.withScope(RDDOperationScope.scala:150)
    at org.apache.spark.sql.execution.SparkPlan.execute(SparkPlan.scala:130)
    at org.apache.spark.sql.execution.Project.doExecute(basicOperators.scala:46)
    at org.apache.spark.sql.execution.SparkPlan$$anonfun$execute$5.apply(SparkPlan.scala:132)
    at org.apache.spark.sql.execution.SparkPlan$$anonfun$execute$5.apply(SparkPlan.scala:130)
    at org.apache.spark.rdd.RDDOperationScope$.withScope(RDDOperationScope.scala:150)
    at org.apache.spark.sql.execution.SparkPlan.execute(SparkPlan.scala:130)
    at org.apache.spark.sql.execution.Union$$anonfun$doExecute$1.apply(basicOperators.scala:144)
    at org.apache.spark.sql.execution.Union$$anonfun$doExecute$1.apply(basicOperators.scala:144)
    at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:245)
    at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:245)
    at scala.collection.immutable.List.foreach(List.scala:381)
    at scala.collection.TraversableLike$class.map(TraversableLike.scala:245)
    at scala.collection.immutable.List.map(List.scala:285)
    at org.apache.spark.sql.execution.Union.doExecute(basicOperators.scala:144)
    at org.apache.spark.sql.execution.SparkPlan$$anonfun$execute$5.apply(SparkPlan.scala:132)
    at org.apache.spark.sql.execution.SparkPlan$$anonfun$execute$5.apply(SparkPlan.scala:130)
    at org.apache.spark.rdd.RDDOperationScope$.withScope(RDDOperationScope.scala:150)
    at org.apache.spark.sql.execution.SparkPlan.execute(SparkPlan.scala:130)
    at org.apache.spark.sql.execution.columnar.InMemoryRelation.buildBuffers(InMemoryColumnarTableScan.scala:129)
    at org.apache.spark.sql.execution.columnar.InMemoryRelation.<init>(InMemoryColumnarTableScan.scala:118)
    at org.apache.spark.sql.execution.columnar.InMemoryRelation$.apply(InMemoryColumnarTableScan.scala:41)
    at org.apache.spark.sql.execution.CacheManager$$anonfun$cacheQuery$1.apply(CacheManager.scala:93)
    at org.apache.spark.sql.execution.CacheManager.writeLock(CacheManager.scala:60)
    at org.apache.spark.sql.execution.CacheManager.cacheQuery(CacheManager.scala:84)
    at org.apache.spark.sql.DataFrame.persist(DataFrame.scala:1581)
    at org.apache.spark.sql.DataFrame.cache(DataFrame.scala:1590)
    at com.somecompany.ml.modeling.NewModel.getTrainingSet(FlowForNewModel.scala:56)
    at com.somecompany.ml.modeling.NewModel.generateArtifacts(FlowForNewModel.scala:32)
    at com.somecompany.ml.modeling.Flow$class.run(Flow.scala:52)
    at com.somecompany.ml.modeling.lowForNewModel.run(FlowForNewModel.scala:15)
    at com.somecompany.ml.Main$$anonfun$2.apply(Main.scala:54)
    at com.somecompany.ml.Main$$anonfun$2.apply(Main.scala:54)
    at scala.Option.getOrElse(Option.scala:121)
    at com.somecompany.ml.Main$.main(Main.scala:46)
    at com.somecompany.ml.Main.main(Main.scala)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.apache.spark.deploy.yarn.ApplicationMaster$$anon$2.run(ApplicationMaster.scala:542)
16/11/07 15:58:25 INFO yarn.ApplicationMaster: Final app status: FAILED, exitCode: 15, (reason: User class threw exception: java.util.concurrent.TimeoutException: Futures timed out after [3000 seconds])

이 라인에 저를 가져옵니다 profilesDF.cache () : 내가 스택 추적에서 인식하는 것이 내 코드의 마지막 부분은 com.somecompany.ml.modeling.NewModel.getTrainingSet (56 FlowForNewModel.scala)입니다 캐싱 전에 나는 2 dataframes 사이에 노동 조합을 수행합니다. 내 변환의 여러에서 사용하고 있기 때문에 여기에 내가 여전히 UNION을 dataframe를 캐시 할 필요가 가입 전에 모두 dataframes를 지속에 대한 답변을 보았다

그리고 슬로우이 예외의 원인이 무엇인지 궁금 해서요? 그것을 찾는 것은 내 문제가되지 않습니다있는 RPC 시간 초과 예외 또는 일부 보안 문제에 링크 거래에 저를 얻었다 당신은 또한 그것을 해결하는 방법에 대한 아이디어가 있다면 나는 분명히 고맙겠지만, 심지어 단지 문제를 이해하는 것은 내가 그것을 해결하는 데 도움이 될 것입니다

미리 감사드립니다

해결법

  1. ==============================

    1.대답 :

    대답 :

    참고 : 문서는 말한다

    다음과 같은 옵션 (spark.sql을 참조하십시오. 속성)도 조정 쿼리 실행의 성능을 사용할 수 있습니다. 더 최적화가 자동으로 수행되는이 옵션은 향후 릴리스에서 더 이상 사용되지 않습니다 가능성이 있습니다. *

    또한, 대한 더 나은 위의 스택 트레이스를위한 방법은 트리거 포인트를 실행 BroadCastHashJoin을 볼 수 있습니다 이해.

    protected override def doExecute(): RDD[Row] = {
        val broadcastRelation = Await.result(broadcastFuture, timeout)
    
        streamedPlan.execute().mapPartitions { streamedIter =>
          hashJoin(streamedIter, broadcastRelation.value)
        }
      }
    
  2. ==============================

    2.좋은 램의 제안이 어떤 경우에 작동하는 것을 알 수 있습니다. 나는 몇 번 (사람을 포함하여 여기에 설명)이 예외에 발견 언급하고 싶습니다.

    좋은 램의 제안이 어떤 경우에 작동하는 것을 알 수 있습니다. 나는 몇 번 (사람을 포함하여 여기에 설명)이 예외에 발견 언급하고 싶습니다.

    대부분의 시간, 일부 집행 거의 침묵 움스 때문. 실패한 작업이 테이블의 마지막 컬럼에 대한 SparkUI에서 확인하십시오 : 당신은 OOM 메시지를 알 수 있습니다.

    물론 내부를 촉발 이해한다면, 브로드 캐스트 데이터가 드라이버를 통해 전달합니다. 그래서 드라이버는 집행에서 데이터를 수집하고, 모두에게 다시 보낼 수있는 몇 가지 스레드 메커니즘이 있습니다. 어떤 점에서 집행 인이 실패 할 경우, 당신은이 시간 제한으로 끝낼 수 있습니다.

  3. ==============================

    3.나는 지역 [N]로 설정을 마스터했다 내가 원사 클러스터에 작업을 제출하는 경우.

    나는 지역 [N]로 설정을 마스터했다 내가 원사 클러스터에 작업을 제출하는 경우.

    클러스터에서 실행할 때 대신 코드에없는 세트 마스터를 수행 --master 사용합니다.

  4. ==============================

    4.당신이 dynamicAllocation을 사용하도록 설정 한 경우,이 구성 (spark.dynamicAllocation.enabled = 거짓)을 해제하려고합니다. 당신은 --conf 또는 코드 내에서 conf의 / 불꽃은 defaults.conf에서이 점화 구성을 설정 할 수 있습니다.

    당신이 dynamicAllocation을 사용하도록 설정 한 경우,이 구성 (spark.dynamicAllocation.enabled = 거짓)을 해제하려고합니다. 당신은 --conf 또는 코드 내에서 conf의 / 불꽃은 defaults.conf에서이 점화 구성을 설정 할 수 있습니다.

    또한보십시오:

    https://issues.apache.org/jira/browse/SPARK-22618

    https://issues.apache.org/jira/browse/SPARK-23806

  5. from https://stackoverflow.com/questions/40474057/what-are-possible-reasons-for-receiving-timeoutexception-futures-timed-out-afte by cc-by-sa and MIT license