통계가있는 일련의 결과를 생성하는 Spark 작업이 있습니다. 내 작업 항목 수는 슬레이브 수 이상입니다. 그래서 나는 슬레이브 당 하나 이상의 처리를하고있다.Spark 작업자 프로세스 내에서 파일을 작성하십시오.
I cache
결과는 여러 개의 쓰기 작업 (결과 개체에 대한 개체와 통계 개체에 대한 개체)을 사용하기 때문에 RDD
개체를 다시 생성 한 후 결과입니다. 두 쓰기 작업 모두 saveAsHadoopFile
을 사용합니다.
캐싱하지 않고 각 쓰기 작업마다 다시 작업을 다시 실행하며 오랜 시간이 걸리고 동일한 실행을 두 번 다시 수행합니다 (쓰기가 더 많은 경우 더 많은 작업).
캐싱 기능을 사용하면 메모리 제한이 초과됩니다. 이전에 계산 된 결과 중 일부는 캐싱 중에 손실되고 메시지는 "CacheManager:58 - Partition rdd_1_0 not found, computing it"
입니다. Spark은 결과를 더 많이 캐시하려고 시도하면서 결국에는 무한 루프를 반복합니다.
나는 스파크가 캐싱을위한 다른 저장 레벨을 가지고 있다는 사실을 알고있다. 메모리 + 디스크를 사용하면 우리의 문제를 해결할 수 있습니다. 그러나 나는 우리가 RDD
객체를 생성하지 않고 작업자에게 바로 파일을 기록 할 수 있는지 여부를 궁금해합니다. 비록 그것이 가능한지 확실하지 않습니다. 그렇지?