복붙노트

[HADOOP] 스파크 RDD - 항상 RAM에있는 파티션입니까?

HADOOP

스파크 RDD - 항상 RAM에있는 파티션입니까?

우리는 모두 Spark이 계산을 메모리에서 수행한다는 것을 알고 있습니다. 나는 단지 다음에 호기심이 많다.

해결법

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

    1.네, 모든 10 개의 RDD 데이터가 스파크 작업자 RAM에 퍼집니다. 모든 기계에 반드시 필요한 것은 아니지만 각 RDD의 파티션이 있어야합니다. 물론 RDD는 느리게 평가 될 때 수행되는 작업이있을 경우에만 메모리에 데이터를 저장합니다.

    네, 모든 10 개의 RDD 데이터가 스파크 작업자 RAM에 퍼집니다. 모든 기계에 반드시 필요한 것은 아니지만 각 RDD의 파티션이 있어야합니다. 물론 RDD는 느리게 평가 될 때 수행되는 작업이있을 경우에만 메모리에 데이터를 저장합니다.

    Spark RDD 또는 Dataframe이 더 이상 사용되지 않으면 자동으로 unpersist합니다. RDD 나 Dataframe이 캐시되어 있는지 알아 보려면 Spark UI -> Storage 테이블로 들어가서 메모리 세부 사항을보십시오. df.unpersist () 또는 sqlContext.uncacheTable ( "sparktable")을 사용하여 메모리에서 df 또는 테이블을 제거 할 수 있습니다. 링크를 더 읽으려면

    RDD가 메모리에 맞지 않으면 일부 파티션이 캐싱되지 않고 필요할 때마다 즉시 다시 계산됩니다. 링크를 더 읽으려면

    질문에 대답하기 위해 RDD에서 실행 된 작업이 있고 메모리를 찾을 수없는 경우 캐시되지 않은 / 고정되지 않은 RDD를 제거 할 수 있습니다.

    일반적으로 우리는 많은 계산 및 / 또는 셔플이 필요 (즉, 값 비싼 네트워크 I / O를 피하기 위해 기본적으로 스파크가 지속되는 RDD를 유지해야하는) RDD를 유지하므로 지속적인 RDD에서 수행 된 모든 동작이 오히려 해당 작업을 수행합니다 계보 그래프 당 처음부터 다시 계산하는 것보다 여기에 RDD 지속성 수준을 확인하십시오.

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

    2.답 : RDD에는 "계보 그래프"(적용된 변형) 만 포함됩니다. 따라서 RDD는 데이터가 아닙니다! RDD에서 모든 작업을 수행 할 때 모든 변환이 작업 전에 적용됩니다. 따라서 명시 적으로 (물론 암시 적으로 캐시하는 최적화가있는 경우) 캐시 된 경우 작업이 수행 될 때마다 전체 변환 및 작업이 다시 수행됩니다.

    답 : RDD에는 "계보 그래프"(적용된 변형) 만 포함됩니다. 따라서 RDD는 데이터가 아닙니다! RDD에서 모든 작업을 수행 할 때 모든 변환이 작업 전에 적용됩니다. 따라서 명시 적으로 (물론 암시 적으로 캐시하는 최적화가있는 경우) 캐시 된 경우 작업이 수행 될 때마다 전체 변환 및 작업이 다시 수행됩니다.

    예 - HDFS에서 RDD를 생성하고 변형을 적용한 다음 변환 된 RDD에서 두 가지 작업을 수행하면 HDFS 읽기 및 변환이 두 번 실행됩니다.

    따라서 재 계산을 피하려면 RDD를 지속해야합니다. 지속성을 위해 HEAP, Off-Heap, Disk에서 하나 이상의 조합을 선택할 수 있습니다.

    답 : RDD가 단지 "계보 그래프 (lineage graph)"일 뿐이라는 점을 감안할 때, RDD는 호스팅 언어와 동일한 범위와 평생 규칙을 따를 것입니다. 그러나 계산 된 결과를 이미 유지 한 경우에는 unpersist 수 있습니다 !!!

    답변 : 실제로 메모리에 RDD를 지속 / 캐시했다고 가정하면 메모리에 저장됩니다. 그리고 LRU는 데이터를 제거하는 데 사용됩니다. 메모리 관리가 스파크에서 어떻게 수행되는지에 대한 더 많은 정보를 참조하십시오.

  3. from https://stackoverflow.com/questions/40732962/spark-rdd-is-partitions-always-in-ram by cc-by-sa and MIT license