필자는 spark 파이썬 응용 프로그램을 사용하여 메모리 한도를 초과하여 실에 의해 사망하고 있습니다. 약간 무거운 (500 MB 이상) 리소스를로드하는 단계가 있으므로 mapPartitions를 사용하고 있습니다. 기본적으로 :파이썬 스파크/얀 메모리 사용량
오류 YarnScheduler :
def process_and_output(partition):
resources = load_resources()
for record in partition:
yield transform_record(resources, record)
input = sc.textFile(input_location)
processed = input.mapPartitions(process_and_output)
processed.saveAsTextFile(output_location)
실행, 내가 지속적으로이 오류 얻을에 분실 집행자 1 (주소 제거) : 컨테이너 메모리 제한을 초과 원사에 의해 살해. 11.4GB의 11.2GB 실제 메모리가 사용되었습니다. spark.yarn.executor.memoryOverhead를 높이는 것을 고려하십시오.
나는 memoryOverhead를 매우 높게 상승 시키려고했지만 여전히 같은 문제가 있습니다. 나는 다음과 같이 달렸다 :
--conf "spark.python.worker.memory=1200m" \
--conf "spark.yarn.executor.memoryOverhead=5300" \
--conf "spark.executor.memory=6g" \
확실하게, 그것은 충분한 메모리 오버 헤드인가?
필자는 더 일반적으로, 나는 파이썬 작업자의 메모리가 전반적인 총계에서 제어/계산되는 방법을 이해하는 데 어려움을 겪고있다. 이것에 대한 문서가 있습니까?
제너레이터 기능을 사용하면 실제로 메모리 사용량이 줄어들 것인지 여부도 알고 싶습니다. 파이썬 프로세스를 통해 데이터를 스트리밍 할 것인가? (예를 들어 내가 원한대로) JVM/스파크 인프라로 다시 보내기 전에 버퍼를 모두 버퍼링 할 것인가?
사랑이 설명과 함께하려고합니다. 진짜를 가져 주셔서 감사합니다. – deepelement
도와 줬어! 고마워 – g07kore