2014-09-07 2 views
1

각 줄이 ID가 키 인 레코드 인 큰 파일이 있습니다. ID별로Spark : groupbykey 작업으로 인한 메모리 부족 예외

val lines = fileRdd.map(line => (line.id, line)) 

다음 I 군 라인

val groupedLines = lines.groupByKey() 

그래서 동일한 ID를 가진 라인이 하나 개의 작업자 노드 셔플한다. RDD groupedLines에서 튜플 ID와 같다 ->의 Iterable (1 호선, 2 호선, ..., 린넨) 라인의 많은 (...) 튜플의 값 의 Iterable의 다음 크기 동일한 ID가있는 경우은 꽤 클 것이고, 기계의 프로세스의 JVM 메모리 한계보다 크면 메모리 부족 문제가 발생할 수 있습니다.

그렇다면이 문제가 있는지 여부와 상관없이 누구나이 사례를 다루는 방법을 알고 있다면 그룹화 된 RDD에서 터플 값이 너무 큰 것일까 요? 우리는 또 다른 중첩 된 RDD, RDD [(ID, RDD)]

덕분에 같은 수 튜플의 값을 변경 sc.parallelize (t._2.toSeq)를 사용할 수 : P를

+0

사실이며 촉발 spark.shuffle.consolidateFiles를 구성 파라미터를 설정 시도 .storage.memoryFraction을 0으로 설정하십시오. 또한 클러스터의 파일 크기, 메모리 양 등의 일부 메트릭을 나열하십시오. –

+0

파일 크기를 RAM 크기 및 sparkConf로 지정할 수 있습니까? 단일 노드를 올바르게 사용하고 있습니까? –

답변

0

spark.executor.memory을 현재 사용중인 것보다 큰 값으로 늘려야 할 수도 있습니다. 권장 사항은 5g입니다.

그런 오류의 스택 추적을 제공 할 수 있습니까?

0

데프 GroupByKey에서 (numPartitions : INT) : RDD는 [(K, 서열은 [V])]

시도 파라미터 증가

numPartitions