아파치 스파크의 지속성을 이해

읽기 시간:사분

이 블로그에서,우리는 시나리오 기반의 예제와 함께 매우 평신도 용어로 아파치 스파크의 지속성의 개념을 이해하려고합니다.
참고:시나리오는 당신의 쉬운 이해를 위한 것입니다.

스파크 아키텍처

참고:캐시 메모리는 실행자간에 공유 할 수 있습니다.

지속/캐싱이란 무엇을 의미합니까?

스파크 지속성은 캐시 메모리에 저장되는 최적화 기법이다. 이를 사용하여 중간 결과를 저장하여 필요한 경우 더 이상 사용할 수 있습니다. 계산 오버 헤드를 줄입니다.

각 노드는 메모리에서 계산하는 파티션을 저장하고 해당 노드의 다른 작업에서 재사용합니다. 이를 통해 미래의 행동이 훨씬 빨라질 수 있습니다(종종 10 배 이상). 캐싱은 반복 알고리즘 및 빠른 대화 형 사용을위한 핵심 도구입니다.

persist()또는cache()메서드를 사용하여 지속될를 표시할 수 있습니다. 액션에서 처음으로 계산되면 노드의 캐시 메모리에 유지됩니다. 스파크의 캐시는 내결함성이 있습니다.

이 변환이 있다고 가정 해 봅시다.–

RDD3 => RDD2 => RDD1 => Text FileRDD4 => RDD3RDD5 => RDD3

이 두 가지 방법은 다음과 같습니다. 우리가 할 때마다 변환 에 루피 3,다음 루피 2 과 루피 1 다시 다시 계산해야합니다.

RDD4.collect()RDD5.collect()

여기서 전체 변환 체인을 두 번 계산해야합니다.

그러나 우리는 작업자 노드의 캐시 메모리에이 작업을 유지할 수 있습니다.

RDD3.cache()RDD4.collect()//The first action which involves RDD3 will store it in cache memoryRDD5.collect()

여기서,캐시 메모리로부터 스파크를 판독하고 결과를 생성한다. 이 문제를 해결하려면 다음 단계를 수행하십시오.캐시()는 다음과 같습니다.지속성()

지속성 수준

저장 위치

–메모리 _만(기본값)–캐시
과 동일합니다.지속(저장 수준.이 문제를 해결하는 방법은 무엇입니까?메모리 및 디스크–메모리에 맞지 않는 파티션을 디스크에 저장합니다.지속(저장 수준.이 경우 모든 파티션은 디스크에만 저장됩니다.지속(저장 수준.메모리 전용(기본값)-가장 간단하고 사용하는 것이 가장 좋습니다. 그것은 모든 파티션을 캐시 메모리에 저장합니다.이 경우,그 결과,메모리 사용량이 감소되고,메모리 사용량이 감소되고,메모리 사용량이 감소되고,메모리 사용량이 감소되고,메모리 사용량이 감소되고,메모리 사용량이 감소되고,메모리 사용량이 감소되고,메모리 사용량이 감소되고,메모리 사용량이 감소되고,메모리 사용량이 감소되고,메모리 사용량이 감소되고,메모리 사용량이 감소되고,메모리 사용량이 감소되고,메모리 사용량이 감소되고,메모리 사용량이 감소되고,메모리 사용량이 감소되고,메모리 사용량이 감소되고,메모리 사용량이 감소되고,메모리 사용량이 감소되고,메모리 사용량이 감소되고,메모리 사용량이 감소되고,메모리 사용량이 감소되고,메모리 사용량이 감소되고,메모리 사용량이 감소되고,메모리 사용량이 감소되고,메모리 사용량이 감소되고,메모리 사용량이 감소되고,메모리 사용량이 감소되고,메모리 사용량이 감소되고, 이 경우 디스크에 저장할 수 있습니다.

디스크에 저장하는 지점이 무엇인지 궁금 할 것입니다.

확실히,만약 우리가 다음 입출력을 디스크에 저장 하면,시간이 많이 걸리는 발생 합니다. 하지만 입출력이 오래 걸리는지,아니면 다시 계산이 더 오래 걸리는지 확인해야 합니다. 이제 입출력이 더 적은 시간을 소비한다는 것을 알 수 있다면,이 경우에는 디스크로 입출력을 저장하는 것이 좋습니다.

따라서 다음 변환에서 다음 번에 필요한 경우 스파크는 입출력 작업을 수행하여 실행 프로그램의 메모리로 가져옵니다.

지속(저장 수준.실행 프로그램의 메모리에 3 개의 메모리(캐시 없음)가 있고 사용 가능한 메모리가 남아 있지 않다고 가정 해 봅시다. 그 사이에,또 다른 한개가 들어왔다. 그래서 스파크는 집행자의 메모리에서 가장 최근에 사용 된 루틴을 제거하고 새로운 루틴이 들어올 수있는 공간을 만들 것입니다(이 경우 루틴이 들어올 것입니다).

이제,3 개의 메모리 캐시가 메모리에 캐시되고,4 개의 메모리 캐시가 도착하면 작업자 노드의 캐시 메모리에서 모든 메모리 캐시가 제거되지 않는다고 가정해 보겠습니다. 그리고 움 문제가있을 수 있습니다.하지만 메모리 및 디스크 지속성 수준을 캐시 메모리에서 충분한 공간을 찾지 못하면 디스크에 저장됩니다.

지속(저장 수준.또한 캐시 메모리가 부족하고 캐시 메모리가 부족하면 메모리 메모리에 맞지 않는 나머지 파티션은 메모리 _디스크를 사용하면 디스크에 유출됩니다.

여기서 다시 도전 과제는 입출력 작업입니다.

참고:디스크에 보관된 데이터는 다음 위치에 저장됩니다.

메모리 형식

직렬화–캐시 메모리에 저장된 데이터를 직렬화하도록 선택할 수 있습니다.

MEMORY_ONLY_SER 및 MEMORY_AND_DISK_SER

지속 RDD 에서 직렬화(binary)형태로 도움의 크기를 줄이기 위해 RDD,따라서 공간을 만들기 위해 더 많은 RDD 면에서 지속 캐시 메모리. 이 두 가지 메모리 형식은 공간 효율적입니다.

하지만 이 문제는 데이터 역직렬화와 관련된 시간 비용이 발생해야 하기 때문에 시간 효율성이 낮다는 것입니다.

따라서 성능이 중요한지 스토리지가 중요한지 개발자의 선택입니다. 확실히,성능에 미치는 영향은별로 없을 것,하지만 분 하나가 될 것입니다.

파티션 복제

파티션을 두 노드에 저장합니다.

DISK_ONLY_2
MEMORY_AND_DISK_2
MEMORY_ONLY_2
MEMORY_AND_DISK_SER_2
MEMORY_ONLY_SER_2

이 옵션은 복제된 복사본도 다른 작업자 노드의 캐시 메모리에 저장합니다.

디스크의 복제된 데이터는 파티션을 다시 만드는 데 사용됩니다. 다른 작업자 노드가 다운될 경우 루프타임을 다시 계산하는 데 도움이 됩니다.

그래서 우리는 아파치 스파크에서 캐시 메모리로 작업 할 수 있습니다.

이것은이 블로그의 모든 것입니다,당신이 그것을 즐기시기 바랍니다 그리고 그것은 당신을 도왔습니다!! 더 많은 미래의 블로그를 위해 연결 상태를 유지하십시오. 감사합니다!!

답글 남기기

이메일 주소는 공개되지 않습니다.