아파치 스파크 최적화 기술 및 성능 튜닝

찬단 가우|빅 데이터 엔지니어링/05,2020 년 10 월

아파치 스파크란?

2012 년 아파치는 분산 클러스터에서 읽기 전용 분산 데이터 세트를 사용하는 복원력 있는 분산 데이터 세트(아파치 스파크의 경우)기반을 설명하고 이를 아파치 스파크라고 명명했다. 데이터 프레임 및 데이터 프레임 스트리밍에 대한 자세한 내용은 데이터 프레임 및 데이터 프레임 스트리밍을 참조하십시오. 이 문서에서는 최고의 아파치 스파크 최적화 기술을 나열합니다.

아파치 스파크는 더 많은 계산과 스트림 처리를 수행하기 위해 개발된 빠른 클러스터 컴퓨팅 플랫폼이다. 스파크는 여러 시스템을 실행하고 지원해야하는 기존 시스템에 비해 다양한 워크로드를 처리 할 수 있습니다. 데이터 분석 파이프라인은 생산을 위해 필요한 다른 가공 유형의 조합에 있는 불꽃에 의해 촉진됩니다. 아파치 스파크는 원사 또는 독립 실행 형 관리자와 같은 외부 클러스터 관리자와 함께 작동하도록 만들어집니다.

아파치 스파크의 특징

아파치 스파크의 일부 기능은 다음과 같습니다:-

  • 빅 데이터 응용 프로그램을 작성하기위한 통합 플랫폼.
  • 개발의 용이성.
  • 매우 접근하기 쉽도록 설계되었습니다.
  • 불꽃은 자주적으로 달릴 수 있습니다. 따라서 유연성을 제공합니다.
  • 비용 효율적.

제노스택은 사물 인터넷,모니터링,예방 및 예측 유지 관리를 위해 데이터 스트림을 신속하고 효율적으로 수집,처리 및 분석하는 실시간 및 스트림 분석 서비스와 솔루션을 제공합니다.

기사,스트리밍 및 실시간 분석 서비스에서

아파치 스파크 최적화의 작동 방식을 이해?

아파치 스파크 최적화가 어떻게 작동하는지 이해하기 위해서는 먼저 아키텍처를 이해할 필요가 있으며 후속 섹션에서 동일한 내용을 자세히 설명 할 것입니다.

아파치 스파크의 아키텍처

스파크의 런타임 아키텍처는 세 부분으로 구성됩니다-

스파크 드라이버(마스터 프로세스)

스파크 드라이버는 프로그램을 작업으로 변환하고 실행자의 작업을 예약합니다. 작업 스케줄러는 드라이버의 일부이며 실행자에게 작업을 배포하는 데 도움이됩니다.

스파크 클러스터 관리자

클러스터 관리자는 실행 프로그램을 실행할 수 있는 스파크의 핵심이며 때로는 드라이버도 시작할 수 있습니다. 스파크 스케줄러는 클러스터 관리자 자체에 피포 방식으로 스파크 응용 프로그램의 작업 및 작업을 예약합니다. 또한 아파치 공기 흐름에 대해 읽어야합니다.

실행자(슬레이브 프로세스)

실행자는 작업의 개별 작업이 실행되는 개별 엔터티입니다. 실행자는 일단 실행되면 스파크 응용 프로그램의 수명 주기까지 항상 실행됩니다. 실패한 실행자는 스파크 작업의 실행을 중지하지 않습니다.

RDD(탄산 데이터 집합)

RDD 데이터베이스의 컬렉션을 변경할 수 없는 데이터에 분산된 노드 클러스터입니다. 하나 또는 여러 개의 파티션으로 분할됩니다. 그러나 생물 과학과 같은 다른 분야에 대한 어플리케이션도 있습니다.. 응용 프로그램 내에서 병렬 처리를 달성하기 위해 파티션은 해당 파티션의 단위입니다. 다시 분할 또는 병합 변환은 파티션 수를 유지하는 데 도움이 될 수 있습니다. 데이터 액세스는 셔플을 사용하여 최적화됩니다. 스파크는 데이터에 가깝기 때문에 다양한 노드를 통해 데이터를 전송하고 필요에 따라 필요한 파티션을 만듭니다.

다그(지시 비순환 그래프)

스파크는 콘솔을 스파크하기 위해 코드를 입력 할 때 연산자 그래프를 생성하는 경향이 있습니다. 스파크가 트리거될 때,스파크는 그 그래프를 다그쉐듈러에게 제출합니다. 그런 다음 그 연산자 그래프를 다그 슈듈러 내부의 작업 단계로 나눕니다. 모든 단계에는 들어오는 데이터의 여러 파티션을 기반으로 한 작업이 포함될 수 있습니다. 다그슈듈러는 개별 연산자 그래프를 함께 파이프라인합니다. 예를 들어,단일 단계에 대한 연산자 그래프 일정을 매핑하고 이러한 단계에 전달. 실행을 위해 클러스터 관리자의 작업 스케줄러. 이 작업은 슬레이브에서 이러한 작업을 실행하는 작업 또는 실행자의 작업입니다.

파티션을 효율적으로 사용하는 분산 처리

클러스터의 실행자 수를 늘리면 처리 스파크 작업의 병렬 처리도 증가합니다. 그러나이를 위해서는 파티셔닝을 통해 해당 데이터가 해당 실행 프로그램간에 배포되는 방법에 대한 적절한 정보가 있어야합니다. 이 경우 이러한 실행 프로그램을 통해 데이터 셔플에 대한 트래픽은 무시할 수 있습니다. 이것은 수학적으로 정확한 유형 계층구조인,강력한 타입을 정의합니다. 스파크는 이 경우 명시적 제어가 없기 때문에 키 집합이 항상 동일한 노드에 함께 표시되도록 보장합니다.

아파치 스파크 보안은 공유 암호를 통해 인증을 지원합니다. 스파크 인증은 인증을 구성할 수 있는 구성 매개 변수입니다. 스파크 통신 프로토콜이 공유 암호를 사용하여 인증을 수행하는지 여부를 확인하는 매개 변수입니다.

이 기사에서 아파치 스파크 보안

스파크 응용 프로그램을 작성하는 동안 피해야 할 실수

감소 바이키 또는 그룹 바이키

그룹 바이키와 감소 바이키 모두 동일한 대답을 생성하지만 결과를 생성하는 개념은 다릅니다. 왜냐하면 스파크에서는 데이터를 섞기 전에 각 파티션에 대한 공유 키와 출력을 결합하기 때문입니다. 다른 쪽에서는 그룹비키가 모든 키-값 쌍을 섞습니다. 그룹바이키는 불필요한 셔플과 네트워크를 통한 데이터 전송을 야기합니다.

셔플 블록의 필요한 크기 유지

기본적으로 스파크 셔플 블록은 2 기가바이트를 초과할 수 없습니다. 더 나은 사용은 파티션을 증가시키고 셔플 블록 크기를 줄일 파티션 당~128 메가바이트에 용량을 줄이는 것입니다. 우리는 다시 파티션을 사용하거나 일반 응용 프로그램에서 병합 할 수 있습니다. 큰 파티션으로 인해 2 기가바이트의 한계에 프로세스가 느리게,몇 파티션은 작업을 확장하고 병렬 처리를 달성 할 수 없습니다.

파일 형식 및 구분 기호

각 데이터 관련 사양에 적합한 파일 형식을 선택하는 것은 어려운 일입니다. 수집 유형,중간 유형 및 최종 출력 유형에 대한 데이터 형식을 현명하게 선택해야합니다. 우리는 또한 여러 가지 방법으로 각 유형에 대한 데이터 파일 형식을 분류 할 수 있습니다. 마루는 고도로 압축 된 메타 데이터 정보를 저장하는 데 사용할 수 있습니다.

작은 데이터 파일

브로드캐스팅은 작은 데이터 파일 또는 데이터 세트를 메모리 블록으로 로드하여 데이터 셔플 링의 오버헤드가 적은 더 큰 데이터 세트와 결합할 수 있도록 하는 기술입니다. 예를 들어,작은 데이터 파일을 블록 수에 저장할 수 있으며 대용량 데이터 파일을 병렬로 이러한 블록간에 배포 할 수 있으므로 향후 대용량 데이터 파일을 이러한 데이터 블록에 연결할 수 있습니다.

작업 단계 모니터링 없음

다그는 다양한 작업 단계를 그래프 형식으로 설명하는 스파크에 사용되는 데이터 구조입니다. 대부분의 개발자는 코드를 작성하고 실행하지만 작업 작업을 모니터링하는 것이 필수적입니다. 이 모니터링은 다그를 관리하고 단계를 줄임으로써 가장 잘 수행됩니다. 20 단계의 작업은 3-4 단계의 작업에 비해 연장됩니다.

바이키,재파티션 또는 셔플을 트리거하는 기타 작업

대부분의 경우 우리는 데이터가 많은 곳에서 셔플할 수 있는 만큼 셔플을 피해야 하며,때로는 이러한 셔플에서 확장성을 얻는 것이 매우 복잡해집니다. 그룹 바이키는 귀중한 자산이 될 수 있지만 그 필요성을 먼저 설명해야합니다.

강화 학습

강화 학습은 더 나은 기계 학습 환경을 얻기 위한 개념일 뿐만 아니라 더 나은 방법으로 결정을 처리하는 개념이다. 전환 모델 및 보상 모델이 데이터 세트에 올바르게 구축되고 에이전트가 결과를 추정 할 수있을만큼 충분한 경우 스파크에서 심층 강화 학습을 적용해야합니다.

아파치 스파크 최적화 요소 및 기술

아파치 스파크 최적화의 가장 큰 특징 중 하나는 메모리 내 데이터 계산에 도움이된다는 것이다. 이러한 스파크 최적화 계산의 병목 현상은 중앙 처리 장치,메모리 또는 클러스터의 모든 리소스가 될 수 있습니다. 데이터를 직렬화 할 필요가 이러한 경우에 발생할 수있는 메모리를 줄일 수 있습니다. 스파크 최적화를위한 이러한 요소는 적절하게 사용되는 경우 다음을 수행 할 수 있습니다–

  • 장기 실행 작업 프로세스 제거
  • 수정 실행 엔진
  • 리소스 관리로 성능 시간 향상

13 아파치 스파크 최적화를 위한 간단한 기술

축전지는 결합 및 교환 연산을 통해서만 추가할 수 있는 실행자에 대한 전역 변수입니다. 따라서 병렬로 효율적일 수 있습니다. 누산기는 카운터(맵 축소와 동일)또는 다른 작업을 구현하는 데 사용할 수 있습니다.

기본적으로 스파크는 숫자 축전지를 지원하지만 프로그래머는 새로운 유형에 대한 지원을 추가 할 수있는 이점이 있습니다. 스파크는 각 작업의 업데이트가 누적 변수에 한 번만 적용되도록합니다. 변환 중에 사용자는 작업 단계가 다시 실행되는 경우 각 작업의 업데이트를 두 번 이상 적용 할 수 있으므로 각 작업의 업데이트를 인식해야합니다.

하이브 버킷팅 성능

버킷팅 결과는 버킷이있는 버킷 수를 지정할 때 고정 된 수의 파일을 사용합니다. 하이브는 해시를 계산하고 특정 버킷에 레코드를 할당,필드를했다. 버킷팅은 필드의 카디널리티가 높고 데이터 처리가 크며 레코드가 모든 버킷에 균등하게 분산되는 반면 파티셔닝은 파티션 필드의 카디널리티가 낮을 때 작동합니다.

버킷팅은 파일 정렬의 오버헤드를 줄여줍니다. 예를 들어,동일한 수의 버킷을 가진 두 개의 테이블을 조인하는 경우 스파크는 이미 정렬 된 버킷의 키로 데이터를 직접 조인합니다. 버킷 파일 수는 여러 버킷으로 여러 파티션으로 계산할 수 있습니다.

조건자 푸시 다운 최적화

조건자 푸시 다운은 필요한 데이터 만 처리하는 기술입니다. 조건자는 여기서 조건에 필터를 정의하여 스파크에 적용할 수 있습니다. 쿼리 설명 명령을 사용하여 쿼리 처리 단계를 확인할 수 있습니다. 모든 조건자가 참 또는 거짓을 반환할 때 필요한 데이터만 선택하도록 최적화되어 있습니다.

쿼리 계획에서 푸시된 필터가 없으면 여기서 조건을 캐스팅하는 것이 좋습니다. 따라서 디스크 입출력 시작 메모리 내 분석이 줄어듭니다. 조건자 푸시 다운을 사용하여 버킷의 데이터를 쿼리하면 셔플 횟수가 줄어들어 결과가 더 빨라집니다.

아파치 화살표를 사용한 제로 데이터 직렬화/역 직렬화

아파치 화살표는 분석 쿼리 엔진의 메모리 내 런타임 형식으로 사용됩니다. 화살표는 공유 메모리를 통해 데이터 직렬화/역 직렬화 제로 셔플을 제공합니다. 화살표 비행 네트워크를 통해 큰 데이터 세트를 보냅니다. 화살표는 디스크에 데이터에 제로 복사 랜덤 액세스를 허용하는 화살표 파일 형식을 가지고있다. 화살표는 모든 스파크 응용 프로그램에 대한 표준 데이터 액세스 계층을 가지고.

그것은 모든 데이터가 상주하고 화살표 특정 형식으로 공통 위치를 가지고 있기 때문에 데이터를 셔플에 대한 세르 작업에 대한 오버 헤드를 줄일 수 있습니다.가비지 수집기를 튜닝할 때는 먼저 스파크 응용 프로그램을 실행하는 것이 좋습니다. 가비지 콜렉터는 스파크와 함께 흔히 볼 수 있는 성장 힙을 완전히 처리합니다. 더 높은 처리량과 더 낮은 대기 시간을 제공하기 위해 더 적은 옵션이 필요합니다. 다양한 응용 프로그램의 예측 불가능한 특성 및 동작을 제어하려면 생성된 로그에 따라 튜닝을 마스터해야 합니다.

이 전에 프로그램의 논리 및 코드에 스트리밍 및 실시간 분석 솔루션과 같은 다른 최적화 기술을 적용해야합니다. 따라서 보다 안정적인 시스템으로 작업 실행 시간이 단축됩니다.

메모리 관리 및 튜닝

셔플 링,정렬 등과 같은 계산의 경우 실행 메모리가 사용되는 반면 캐싱 목적에는 내부 데이터를 전파하는 저장 메모리가 사용됩니다. 작업이 캐시를 사용하지 않는 경우가 있을 수 있습니다. 캐시된 작업은 실행 요구 사항에 따라 데이터를 제거할 수 없는 저장 공간을 항상 적게 적용합니다. 또한,아파치 스파크와 실시간 스트리밍 응용 프로그램을 수행 할 수 있습니다.

우리는 스파크를 설정할 수 있습니다.메모리.스파크 실행 메모리에 사용되는 힙 공간을 결정합니다. 일반적으로 60%가 기본값입니다. 실행기 메모리는 가비지 수집이 지연될 수 있으므로 가능한 한 적게 유지해야 합니다. 이 사실은 여러 작업이 단일 인스턴스에서 실행될 수 있으므로 소규모 실행자에게도 적용됩니다.

데이터 지역성

아파치 스파크에서 처리 작업은 실행 코드를 데이터 지역성이라고 하는 처리된 데이터에 가깝게 배치함으로써 최적화된다. 때때로 처리 작업은 데이터를 사용할 수 없기 때문에 데이터를 가져 오기 전에 기다려야합니다. 그러나,때 불꽃의 시간.지역.대기 만료,스파크는 적은 로컬 레벨,즉 노드에 로컬을 시도하여 랙에 연결합니다.

디스크 간 데이터 전송은 비용이 많이 들기 때문에 대부분의 작업은 데이터가 있는 위치에서 수행해야 합니다. 그것은 단지 작은로드하는 데 도움이되지만 아파치 스파크에 대한 테스트 중심의 개발과 함께 데이터의 양을 요구했다.

배치된 조인 사용

배치된 조인은 재배포 및 브로드캐스트를 결정합니다. 방송을보다 효율적으로 사용하기 위해 여러 메모리 블록에 위치 할 작은 데이터 세트를 정의 할 수 있습니다. 두 데이터 세트에 조인을 적용하는 동안 먼저 두 데이터 세트의 데이터를 키별로 정렬하고 병합합니다.

그러나,우리는 또한 그들을 결합하기 전에 또는 이러한 데이터 프레임을 만드는 동안 정렬 파티션 키를 적용 할 수 있습니다. 이렇게 하면 정렬할 불필요한 함수 호출이 없으므로 쿼리의 런타임이 최적화됩니다.

스파크에서 캐싱

아파치 스파크에서 캐싱은 우리가 몇 번이고 다시 데이터를 필요로 할 때 아파치 스파크 최적화를위한 최고의 기술이다. 그러나 데이터를 캐시하는 것은 항상 허용되지 않습니다.

우리는 다음과 같은 경우에 캐시를 사용해야합니다–

  • 기계 학습 알고리즘과 같은 반복 루프가있는 경우.
  • 단일 작업 또는 작업에서 여러 번 액세스할 때.

캐시()및 지속(저장 수준.메모리 _만)서로 대신 사용할 수 있습니다. 메모리에서 제거되는 모든 파티션은 여전히 매우 비싼 소스에서 다시 빌드해야합니다. 가장 좋은 솔루션 중 하나는 지속(저장 수준.작업자의 로컬 디스크로 파티션을 유출합니다. 이 경우 상대적으로 빠른 작업자의 로컬 드라이브에서 데이터를 가져 오기 만하면됩니다.

실행기 크기

메모리가 높은 실행기를 실행하면 가비지 수집이 과도하게 지연되는 경우가 많습니다. 집행자 당 코어 수를 집행자 당 5 개의 작업 이하로 유지해야합니다. 너무 작은 집행자는 단일 합작에서 여러 작업을 실행하는 측면에서 편리하지 않았습니다.

예를 들어,브로드캐스트 변수는 각 실행자에 대해 정확히 한 번 복제해야 하며,이로 인해 더 많은 데이터 복사본이 생성됩니다.

스파크 윈도우 함수

윈도우 함수는 테이블의 입력 행을 계산할 수 있는 프레임을 정의합니다. 개별 행 수준. 각 행은 명확한 프레임 워크를 가질 수 있습니다. 윈도우 잉을 사용하면 데이터 프레임에서 데이터에 대한 창을 정의 할 수 있습니다. 동일한 데이터 프레임에서 여러 행을 비교할 수 있습니다.

창 시간을 특정 간격으로 설정하여 이전 데이터와의 데이터 의존성 문제를 해결할 수 있습니다. 아파치 빔에 셔플은 우리가 창 간격에 대한 데이터를 유지로 이전에 처리 된 데이터에 적습니다.

워터마크 기술

워터마크는 아파치 스파크 최적화에 있어서 설계상 시스템을 제한하고 실행 중에 폭발하는 것을 방지하는 유용한 기술이다. 워터 마크는 두 개의 인수를 사용합니다–

  • 이벤트 시간 열 및
  • 늦은 데이터를 처리하는 데 필요한 기간을 지정하는 임계 시간

아파치 화살표 아키텍처의 쿼리는 데이터가 규정 된 임계 값 내에 속하면 자동으로 업데이트됩니다. 하나는 전체 모드는 먼저 결과 테이블에 모든 데이터를 지속하기 때문에 우리가 워터 마킹과 나란히 완료 모드 측면을 사용할 수 있다는 것을 기억해야합니다.

데이터 직렬화

아파치 스파크 최적화는 분석과 같은 일부 사용 사례 또는 데이터 이동을 위해 처리해야하는 데이터에 대해 작동합니다. 데이터가 더 나은 직렬화 된 형식 인 경우 이러한 데이터 또는 분석 이동을 잘 수행 할 수 있습니다. 아파치 스파크는 소스 또는 대상에 필요한 데이터 형식을 효과적으로 관리하기 위해 데이터 직렬화를 지원합니다. 기본적으로 아파치 스파크는 자바 직렬화를 사용하지만 크리오 직렬화를 지원합니다.

기본적으로 스파크는 자바의 객체 출력 스트림을 사용하여 데이터를 직렬화합니다. 구현은 자바를 통해 할 수 있습니다.이오직렬화 가능 클래스. 개체를 바이트 스트림으로 인코딩합니다. 그것은 경량 고집 및 가동 가능한 제공합니다. 그러나 그것이 사용되는 각 클래스에 대해 거대한 직렬화 된 형식으로 이어지기 때문에 속도가 느려집니다. 그것은 자바보다 더 컴팩트으로 스파크 자바 직렬화보다 거의 10 배 빠른 객체의 직렬화에 대한 크리오 직렬화 라이브러리(버전 4)를 지원합니다.

아파치 스파크 최적화: 포괄적 인 접근

아파치 스파크,오픈 소스 분산 컴퓨팅 엔진은 현재 또한 실시간 스트리밍을 지원하는 메모리 내 일괄 처리를위한 가장 인기있는 프레임 워크입니다. 고급 쿼리 최적화 및 실행 엔진으로,아파치 스파크 최적화 기술은 처리하고 매우 효율적으로 큰 데이터 세트를 분석 할 수 있습니다. 그러나 신중하게 조정하지 않고 아파치 스파크 조인 최적화 기술을 실행하면 성능이 저하 될 수 있습니다. 당신이 당신의 아파치 스파크 응용 프로그램의 전원을 활용하려는 경우,우리의 관리 아파치 스파크 서비스를 확인하십시오.

카테고리 :

빅 데이터 개발,빅 데이터 솔루션,스트리밍 데이터 분석,

공유:

You might also like

답글 남기기

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