2016-11-21 3 views
3

YARN에서 실행 중일 때 Spark 작업에서 메모리 제한을 초과하여 여러 컨테이너가 삭제되는 문제가 있습니다.SPARK : YARN이 컨테이너를 초과하여 메모리 제한을 초과합니다.

16/11/18 17:58:52 WARN TaskSetManager: Lost task 53.0 in stage 49.0 (TID 32715, XXXXXXXXXX): 
    ExecutorLostFailure (executor 23 exited caused by one of the running tasks) 
    Reason: Container killed by YARN for exceeding memory limits. 12.4 GB of 12 GB physical memory used. 
    Consider boosting spark.yarn.executor.memoryOverhead. 

다음 인수를 통해 전달되는 스파크 제출 : 나는 불꽃 2.0.1을 사용하고

--executor-memory=6G 
--driver-memory=4G 
--conf "spark.yarn.executor.memoryOverhead=6G"` 

.

YARN 킬링 컨테이너에 대한 여러 게시물 (예 : How to avoid Spark executor from getting lost and yarn container killing it due to memory limit?)을 읽은 후 memoryOverhead를이 값으로 늘렸습니다.

내 매개 변수와 로그 메시지가 주어지면 "실은 메모리 사용량이 (executor-memory + executor.memoryOverhead)보다 클 경우 실행 프로그램을 종료합니다"라는 메시지가 표시됩니다.

결국 이러한 오류가 발생하지 않는 값을 찾기 위해이 오버 헤드를 계속 늘리는 것은 현실적이지 않습니다. 우리는이 문제를 몇 가지 다른 직업에서보고 있습니다. 나는 내가 바꿔야 할 것들, 수정해야 할 것들, 디버깅을 시작해야 할 곳 등을 제안 해 주시면 감사하겠습니다.

+0

Spark SQL을 사용합니까? –

+0

예, 광범위하게 – user2682459

+0

거대한 데이터 세트를 사용할 때'spark-defaults.conf'의'spark.default.parallelism'과'spark.sql.shuffle.partitions'를 더 높은 값으로 늘리려고 할 수 있습니다. 이렇게하면 메모리 사용량이 줄어 듭니다. –

답변

6

다음 구성으로 메모리 사용을 줄일 수 있습니다 spark-defaults.conf에 : 당신이 spark.sql.shuffle.partitions에 대한 2000 개 이상의 파티션을 사용할 때

spark.default.parallelism 
spark.sql.shuffle.partitions 

과 차이가 있습니다. Github의 스파크 코드에서 확인할 수 있습니다 :

테스트를 위해 2000 개 이상의 파티션을 사용하는 것이 좋습니다. 매우 거대한 데이터 세트를 사용할 때 어느 정도 더 빨라질 수 있습니다. this에 따르면 작업은 200 밀리 초로 짧을 수 있습니다. 올바른 구성은 찾기 쉽지 않지만 작업 부하에 따라 시간 차이가 발생할 수 있습니다.

관련 문제