[SCALA] 왜 스파크는 java.lang.OutOfMemoryError와 함께 실패 않습니다 GC 오버 헤드 제한을 초과?
SCALA왜 스파크는 java.lang.OutOfMemoryError와 함께 실패 않습니다 GC 오버 헤드 제한을 초과?
나는 / 하둡지도를 구현 스파크에서 전에 벌금을 일한 작업을 줄이기 위해 노력하고있어. 스파크 응용 프로그램의 정의는 다음과 같다 :
val data = spark.textFile(file, 2).cache()
val result = data
.map(//some pre-processing)
.map(docWeightPar => (docWeightPar(0),docWeightPar(1))))
.flatMap(line => MyFunctions.combine(line))
.reduceByKey( _ + _)
어디 MyFunctions.combine입니다
def combine(tuples: Array[(String, String)]): IndexedSeq[(String,Double)] =
for (i <- 0 to tuples.length - 2;
j <- 1 to tuples.length - 1
) yield (toKey(tuples(i)._1,tuples(j)._1),tuples(i)._2.toDouble * tuples(j)._2.toDouble)
입력에 사용되는 목록이 크고 예외가 발생되는 경우이 경우 기능은지도 키를 많이 생산하는 결합.
하둡 맵이이 기능 수익률은 하둡 디스크에지도 쌍을 쓴 점이었다 결합 지점이기 때문에 나는 문제가 발생하지 않은 설정을 줄입니다. 초과 GC 오버 헤드 제한 : 스파크 그것이 java.lang.OutOfMemoryError와 함께 폭발 할 때까지 메모리에 모두를 유지하는 것 같다.
아마 뭔가를 정말 기본적인 잘못을하고있는 중이 야하지만이에서 앞장서 서하는 방법에 대한 포인터를 찾을 수 없습니다, 나는이 문제를 피할 수있는 방법을 알고 싶습니다. 내가 스칼라에서 총 멍청한 놈 오전 스파크 때문에 나는 확실하지 문제가 하나 또는 다른, 또는 둘 모두에서 경우입니다. 나는 현재 내 자신의 노트북에서이 프로그램을 실행하려고하고는 튜플 배열의 길이가 매우 긴 아닌 입력에 대해 작동합니다. 미리 감사드립니다.
해결법
-
==============================
1.메모리를 조정하면이 비용이 많이 드는 작업이기 때문에, 아마 이미 제안되어왔다 갈 수있는 좋은 방법입니다 추한 방법으로 저울. 하지만 어쩌면 일부 코드 변경이 도움이 될 것입니다.
메모리를 조정하면이 비용이 많이 드는 작업이기 때문에, 아마 이미 제안되어왔다 갈 수있는 좋은 방법입니다 추한 방법으로 저울. 하지만 어쩌면 일부 코드 변경이 도움이 될 것입니다.
당신은 당신의 결합 기능에 다른 접근 방식을 취할 수있는 피할 조합 기능을 사용하여 if 문. 또한 조합 작업 전에 두 배에 튜플의 두 번째 요소를 변환 할 것입니다 :
tuples. // Convert to doubles only once map{ x=> (x._1, x._2.toDouble) }. // Take all pairwise combinations. Though this function // will not give self-pairs, which it looks like you might need combinations(2). // Your operation map{ x=> (toKey(x{0}._1, x{1}._1), x{0}._2*x{1}._2) }
당신이 toList와 목록 (또는 무언가)로 변환을하려는 경우, 당신은 다운 스트림을 사용할 수있는 반복자를 제공하거나 것입니다.
-
==============================
2.당신이 스파크 쉘 또는 스파크가 제출 시작할 때 다음 JVM 인수를 추가 :
당신이 스파크 쉘 또는 스파크가 제출 시작할 때 다음 JVM 인수를 추가 :
-Dspark.executor.memory=6g
당신은 또한 당신이 SparkContext의 인스턴스를 생성 할 때 명시 적으로 근로자의 수를 설정 고려할 수 있습니다 :
conf의 / 노예의 노예 이름을 설정합니다 :
val sc = new SparkContext("master", "MyApp")
-
==============================
3.문서 (http://spark.apache.org/docs/latest/running-on-yarn.html)에서는 실행 프로그램과 메모리 제한을 구성하는 방법을 읽을 수 있습니다. 예를 들면 :
문서 (http://spark.apache.org/docs/latest/running-on-yarn.html)에서는 실행 프로그램과 메모리 제한을 구성하는 방법을 읽을 수 있습니다. 예를 들면 :
--master yarn-cluster --num-executors 10 --executor-cores 3 --executor-memory 4g --driver-memory 5g --conf spark.yarn.executor.memoryOverhead=409
memoryOverhead은 실행 프로그램 메모리의 10 %이어야한다.
편집 : (409) 4096을 고정 (코멘트 아래이를 말한다)
-
==============================
4.나는 긴 회귀 적합 동안 동일한 문제를 가지고 있었다. 나는 기차 및 테스트 세트를 캐시. 그것은 내 문제를 해결했다.
나는 긴 회귀 적합 동안 동일한 문제를 가지고 있었다. 나는 기차 및 테스트 세트를 캐시. 그것은 내 문제를 해결했다.
train_df, test_df = df3.randomSplit([0.8, 0.2], seed=142) pipeline_model = pipeline_object.fit(train_df)
pipeline_model java.lang.OutOfMemoryError와 라인을 제공 하였다 : GC 오버 헤드 제한이 초과 하지만 사용하는 경우
train_df, test_df = df3.randomSplit([0.8, 0.2], seed=142) train_df.cache() test_df.cache() pipeline_model = pipeline_object.fit(train_df)
그것은했다.
-
==============================
5.나는 0.6보다 값 이상으로 spark.memory.fraction 증가 할 때 JVM 가비지 컬렉션 오류가 재현성 내 경우에는 일어났다. 그것은 더 나은 그래서 JVM 가비지 컬렉션의 오류를 방지하기 위해 그것의 기본 값으로 값을 떠날 수 있습니다. 이것은 또한 https://forums.databricks.com/questions/2202/javalangoutofmemoryerror-gc-overhead-limit-exceede.html에 의해 권장합니다.
나는 0.6보다 값 이상으로 spark.memory.fraction 증가 할 때 JVM 가비지 컬렉션 오류가 재현성 내 경우에는 일어났다. 그것은 더 나은 그래서 JVM 가비지 컬렉션의 오류를 방지하기 위해 그것의 기본 값으로 값을 떠날 수 있습니다. 이것은 또한 https://forums.databricks.com/questions/2202/javalangoutofmemoryerror-gc-overhead-limit-exceede.html에 의해 권장합니다.
자세한 내용은 하나의 경우 0.6 https://issues.apache.org/jira/browse/SPARK-15796를 참조 spark.memory.fraction 최고의 가치 인 이유.
from https://stackoverflow.com/questions/27462061/why-does-spark-fail-with-java-lang-outofmemoryerror-gc-overhead-limit-exceeded by cc-by-sa and MIT license
'SCALA' 카테고리의 다른 글
[SCALA] 왜 스칼라 패키지 오브젝트 내부 클래스는 dispreferred입니까? (0) | 2019.11.27 |
---|---|
[SCALA] (22 개) 필드는 2.11 + 프레임 워크 2.3 케이스 클래스와 함수 플레이 스칼라 제한 (0) | 2019.11.27 |
[SCALA] 중첩 된 방법의 비용 (0) | 2019.11.26 |
[SCALA] 에게 Heroku에 밀어 수 없습니다 (0) | 2019.11.26 |
[SCALA] 어떻게 스칼라의 제품 종류에 대해 생각해야 하는가? (0) | 2019.11.26 |