2017-12-27 36 views
0

spark-submit 명령에 추가하면 다음 오류가 발생합니다. (오류 위) 어쨌든 따라서, I는 2.5 GB의 maxResultSize 증가16 개의 작업 (1048.5MB)의 직렬화 된 결과의 총 크기가 spark.driver.maxResultSize (1024.0MB)보다 큽니다.

py4j.protocol.Py4JJavaError: An error occurred while calling o171.collectToPython. 
: org.apache.spark.SparkException: Job aborted due to stage failure: Total size of serialized results of 16 tasks (1048.5 MB) is bigger than spark.driver.maxResultSize (1024.0 MB) 

하지만 스파크 작업 실패

17/12/27 18:33:19 ERROR TransportResponseHandler: Still have 1 requests outstanding when connection from /XXX.XX.XXX.XX:36245 is closed 
17/12/27 18:33:19 WARN Executor: Issue communicating with driver in heartbeater 
org.apache.spark.SparkException: Exception thrown in awaitResult: 
     at org.apache.spark.util.ThreadUtils$.awaitResult(ThreadUtils.scala:205) 
     at org.apache.spark.rpc.RpcTimeout.awaitResult(RpcTimeout.scala:75) 
     at org.apache.spark.rpc.RpcEndpointRef.askSync(RpcEndpointRef.scala:92) 
     at org.apache.spark.executor.Executor.org$apache$spark$executor$Executor$$reportHeartBeat(Executor.scala:726) 
     at org.apache.spark.executor.Executor$$anon$2$$anonfun$run$1.apply$mcV$sp(Executor.scala:755) 
     at org.apache.spark.executor.Executor$$anon$2$$anonfun$run$1.apply(Executor.scala:755) 
     at org.apache.spark.executor.Executor$$anon$2$$anonfun$run$1.apply(Executor.scala:755) 
     at org.apache.spark.util.Utils$.logUncaughtExceptions(Utils.scala:1954) 
     at org.apache.spark.executor.Executor$$anon$2.run(Executor.scala:755) 
     at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) 
     at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308) 
     at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180) 
     at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294) 
     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) 
     at java.lang.Thread.run(Thread.java:748) 
Caused by: java.io.IOException: Connection from /XXX.XX.XXX.XX:36245 closed 
     at org.apache.spark.network.client.TransportResponseHandler.channelInactive(TransportResponseHandler.java:146) 

이 구성을 첨가하는 이유는 오류이다. 이 문제를 해결하는 방법은 무엇입니까?

+0

--conf spark.driver.maxResultSize = 2.5g 이처럼 메모리 크기를 전달할 수 있습니까? –

+0

또한 stacktrace를 더 철저하게 확인하면 작업자가 사망하게 될 수도있는 곳에서는 어디에도 외각 메모리가 있습니까? –

+0

@SumeetSharma : 나는 그것을 또한 시험했다. 같은 오류가 발생했습니다. – Markus

답변

2

당신의 드라이버를 다시 가져 오려고하는 데이터의 양이 너무 많습니다. 대체로 메서드를 수집하여 DataFrame/RDD에서 모든 값을 검색하는 것입니다. 드라이버은 단일 프로세스이며 DataFrame을 수집하면 클러스터를 통해 배포 한 모든 데이터를 하나의 노드로 다시 가져옵니다. 이것은 배포의 목적을 무효로합니다! 데이터를 관리 가능한 양으로 줄인 후에 만이 작업을 수행하는 것이 좋습니다. 당신이 정말로 모든 데이터로 작업해야하는 경우

1), 다음 실행 프로그램에 그것을 유지해야합니다

당신은 두 가지 옵션이 있습니다. HDFS마루판을 사용하여 데이터를 분산 방식으로 저장하고 Spark 방식을 사용하여 모든 데이터를 한 곳으로 모으는 대신 클러스터의 데이터로 작업하십시오.

2) 실제로 데이터를 드라이버로 가져 오려면 모든 데이터가 실제로 필요한지 여부를 검사해야합니다. 요약 통계 만 필요하면 collect를 호출하기 전에 집행자에게 통계를 계산하십시오. 또는 상위 100 개의 결과 만 필요하다면 상위 100을 수집합니다.