복붙노트

[HADOOP] 스파크가 더 이상 사용하지 않을 것임을 깨달을 때 RDD 자체를 unpersist할까요?

HADOOP

스파크가 더 이상 사용하지 않을 것임을 깨달을 때 RDD 자체를 unpersist할까요?

RDD를 여러 번 사용하려면 RDD를 메모리 및 / 또는 디스크에 보관할 수 있습니다. 그러나 나중에 자체적으로 unpersistate해야합니까, 아니면 Spark이 더 이상 가비지 콜렉션을 수행하고 더 이상 필요하지 않을 때 RDD를 unpersist합니까? 필자는 삐걱 거리지 않는 기능을 직접 호출하면 성능이 저하된다는 것을 알게되었습니다.

해결법

  1. ==============================

    1.예, Apache Spark은 가비지 수집시 RDD를 unpersist합니다.

    예, Apache Spark은 가비지 수집시 RDD를 unpersist합니다.

    RDD.persist에서 다음을 볼 수 있습니다.

    sc.cleaner.foreach(_.registerRDDForCleanup(this))
    

    이렇게하면 RDD가 가비지 수집 될 때 ContextCleaner.doCleanupRDD로 이어지는 ReferenceQueue의 RDD에 WeakReference가 삽입됩니다. 거기:

    sc.unpersistRDD(rddId, blocking)
    

    더 많은 컨텍스트를 보려면 일반적으로 ContextCleaner를 참조하고 추가 한 커밋을 참조하십시오.

    사용하지 않는 RDD의 가비지 수집에 의존 할 때 알아야 할 몇 가지 사항은 다음과 같습니다.

  2. ==============================

    2.@Daniel이 지적한 바와 같이 Spark는 캐시에서 파티션을 제거합니다. 이것은 더 이상 사용할 수있는 메모리가 없으면 발생하며 가장 최근에 사용 된 알고리즘을 사용하여 완료됩니다. @eliasah가 지적한 똑똑한 시스템은 아닙니다.

    @Daniel이 지적한 바와 같이 Spark는 캐시에서 파티션을 제거합니다. 이것은 더 이상 사용할 수있는 메모리가 없으면 발생하며 가장 최근에 사용 된 알고리즘을 사용하여 완료됩니다. @eliasah가 지적한 똑똑한 시스템은 아닙니다.

    너무 많은 객체를 캐싱하지 않는다면 걱정할 필요가 없습니다. 객체를 너무 많이 캐시하면 JVM 수집 시간이 지나치게 길어 지므로이 경우에는 그것을 unpersist하는 것이 좋습니다.

  3. from https://stackoverflow.com/questions/32636822/would-spark-unpersist-the-rdd-itself-when-it-realizes-it-wont-be-used-anymore by cc-by-sa and MIT license