2016-08-09 4 views
0

json4s을 사용하여 사용자 정의 개체의 RDD에 5 테라 바이트의 json을 읽으려고합니다. 각각 약 100MB의 파일이 50,000 개 있습니다. 어떤 이유로, Executor 크기를 16G로 설정하면 다음 오류가 발생합니다. 다음과 같이Spark - JSON을 구문 분석하는 동안 작업 스케줄러 오류가 발생했습니다

ERROR TaskSchedulerImpl: Lost executor foo on bar: Remote RPC client 
disassociated. Likely due to containers exceeding thresholds, or network 
issues. Check driver logs for WARN messages. 

내 코드는 다음과 같습니다 데이터의 연주회의 수백 읽을 때

val input = sc.textFile(inPath) 
val operations = input.mapPartitions(row => { 
     row.flatMap(record => { 
     try { 
      implicit val formats = DefaultFormats // formats not serializable 
      Some(parse(record).extract[MyClass]) 
     } catch { 
      case e: Exception => None 
     } 
     }) 
    }) 

나는이 문제를하지 않습니다. 집행자 메모리를 55G로 늘리면 작동하지만 비효율적 인 것처럼 보입니다. 각 압축 파일은 결국 100MB이며 압축 해제 된 파일은 1GB를 초과 할 수 없습니다. 나는 8 기가비트 또는 심지어 4 기가 바이트 집행 인 톤을 돌려서 데이터를 읽을 수있을 것이라고 생각했을 것이다.

+0

스파크가 메모리 내에서 계산됩니다. 많은 양의 데이터가 있다면 많은 양의 메모리가 필요합니다. –

+0

더 많은 유언 집행자를 통해 달성 할 수 없었습니까? 단일 집행자에게 왜 더 많은 메모리가 필요합니까? – Luke

+0

그 원인은 무엇입니까? '직접 버퍼 메모리'오버플로 또는 다른 메모리 섹션 오버플로가 원인입니까? 하나 이상의 문제점이있는 경우 제공 한 오류 메시지가 표시 될 수 있습니다. 전체 오류 세부 사항을 제공하십시오. –

답변

0

이것은 memoryOverhead가 너무 낮게 나왔다는 것을 나타낸다. 16 기가에서 6000으로 설정했습니다.

--conf spark.mesos.executor.memoryOverhead=6000 
관련 문제