모든 데이터 과학자가 알아야 할 5가지 스파크 최적화 기술
게시 됨: 2020-06-12소규모 스타트업이든 대기업이든 데이터는 어디에나 있습니다. 이 데이터는 고객 로그, 사무실 청구서, 비용 시트 및 직원 데이터베이스와 같은 다양한 소스에서 수집됩니다. 회사는 이러한 데이터 청크를 수집하고 분석하여 패턴과 추세를 결정합니다. 이러한 패턴은 비즈니스 향상을 위한 중요한 결정을 내리는 데 도움이 됩니다.
하지만 이러한 데이터 분석과 수치해석은 엑셀 시트를 통해서만 가능한 것은 아닙니다. 여기에서 데이터 처리 소프트웨어 기술이 등장합니다. 가장 빠르고 널리 사용되는 데이터 처리 프레임워크 중 하나는 Apache Spark입니다. Spark 최적화 기술 은 성능을 최대한 활용하도록 조정하는 데 사용됩니다.
우리는 기술에 대해 조금 배울 것입니다. 이 소프트웨어 프레임워크의 기본 사항에 대해 살펴보겠습니다.
목차
아파치 스파크란?
Apache Spark는 회사에서 방대한 데이터 세트를 처리하는 데 사용되는 세계적으로 유명한 오픈 소스 클러스터 컴퓨팅 프레임워크 입니다. Apache Spark를 사용하면 이러한 방대한 데이터 세트를 처리하고 여러 시스템에 배포하는 것이 쉽습니다. 프로그래머와 개발자의 삶을 쉽게 만들어주는 간단한 API를 제공합니다.
Spark는 Python, R, Scala 및 Java와 같은 프로그래밍 언어에 대한 기본 바인딩을 제공합니다. 기계 학습, 그래프 처리 및 SQL 데이터베이스 를 지원합니다 . 이러한 놀라운 이점으로 인해 Spark는 은행, 기술 회사, 금융 기관, 통신 부서 및 정부 기관에서 사용됩니다. Apache Spark에 대해 자세히 알아보려면 유명 대학의 데이터 과학 과정을 확인하십시오.
아파치 스파크의 아키텍처
Apache Spark의 런타임 아키텍처는 다음 구성 요소로 구성됩니다.
Spark 드라이버 또는 마스터 프로세스
이것은 프로그램을 작업으로 변환한 다음 실행자(슬레이브 프로세스)를 위해 일정을 잡습니다. 작업 스케줄러 는 이러한 작업을 실행자에게 배포합니다.
클러스터 관리자
Spark 클러스터 관리자 는 실행기 및 드라이버 실행을 담당합니다. 클러스터의 여러 호스트 시스템에 리소스를 예약하고 할당합니다.
집행자
슬레이브 프로세스라고도 하는 실행자는 작업의 작업이 실행되는 엔터티입니다. 실행된 후에는 Spark 애플리케이션의 수명 주기가 끝날 때까지 실행됩니다. 실행기가 실패해도 Spark 작업의 실행은 중지되지 않습니다.
탄력적인 분산 데이터 세트(RDD)
이것은 변경 불가능하고 Spark 클러스터의 노드에 배포되는 데이터 세트의 모음입니다. 특히 클러스터는 Spark를 설치할 수 있는 분산 시스템의 모음입니다. RDD는 여러 파티션으로 나뉩니다. 또한 데이터 오류 발생 시 데이터 문제를 해결할 수 있기 때문에 탄력적이라고 합니다.
Spark에서 지원하는 RDD 유형은 다음과 같습니다.
- Hadoop 분산 파일 시스템 의 파일에서 빌드된 Hadoop 데이터 세트
- Scala 컬렉션을 기반으로 할 수 있는 병렬 컬렉션
DAG(방향성 비순환 그래프)
Spark는 코드가 Spark 콘솔에 입력되는 즉시 그래프를 생성합니다. 어떤 작업(작업 실행을 위한 명령)이 트리거되면 이 그래프가 DAGScheduler 에 제출됩니다 .
이 그래프는 일련의 데이터 작업으로 간주될 수 있습니다. DAG는 정점과 가장자리로 구성됩니다. 정점은 RDD를 나타내고 가장자리는 해당 특정 RDD에서 수행할 계산을 나타냅니다. 그래프 내에 루프나 사이클이 없기 때문에 방향성 그래프라고 합니다.
스파크 최적화 기법
Spark 최적화 기술 은 리소스가 적절하게 활용되고 작업이 빠르게 실행되도록 Spark의 설정 및 속성을 수정하는 데 사용됩니다. 이 모든 것이 궁극적으로 데이터를 효율적으로 처리하는 데 도움이 됩니다.
가장 널리 사용되는 Spark 최적화 기술 은 다음과 같습니다.
1. 데이터 직렬화
여기에서 메모리 내 개체는 파일에 저장하거나 네트워크를 통해 보낼 수 있는 다른 형식으로 변환됩니다. 이렇게 하면 분산 응용 프로그램의 성능이 향상됩니다. 데이터를 직렬화하는 두 가지 방법은 다음과 같습니다.
- 자바 직렬화 – ObjectOutputStream 프레임 워크는 개체 직렬화에 사용됩니다. java.io.Externalizable을 사용하여 직렬화 성능을 제어할 수 있습니다. 이 프로세스는 가벼운 지속성을 제공합니다.
- Kyro 직렬화 – Spark는 Kryo 직렬화 라이브러리(v4) 를 사용하여 Java 직렬화보다 빠르고 더 컴팩트한 프로세스인 개체를 직렬화합니다. 성능을 향상시키려면 registerKryoClasses 메소드를 사용하여 클래스를 등록해야 합니다.
2. 캐싱
데이터가 더 자주 필요할 때 사용되는 효율적인 기술입니다. Cache() 및 지속()은 이 기술에서 사용되는 메서드입니다. 이러한 메서드는 RDD, DataSet 및 DataFrame의 계산을 저장하는 데 사용됩니다. 그러나 cache()는 이를 메모리에 저장하고 지속()은 사용자 정의 저장소 수준에 저장합니다.

이러한 방법은 반복 계산이 사용됨에 따라 비용을 절감하고 시간을 절약하는 데 도움이 될 수 있습니다.
읽기: Apache PySpark의 데이터 프레임: 종합 자습서
3. 데이터 구조 조정
오버헤드를 추가할 수 있는 특정 Java 기능을 조정하여 Spark를 사용하는 동안 메모리 소비를 줄일 수 있습니다. 이것은 다음과 같은 방법으로 가능합니다.
- 키에 대한 문자열 대신 열거형 개체 또는 숫자 ID를 사용합니다.
- 많은 개체와 복잡한 중첩 구조를 사용하지 마십시오.
- 메모리 크기가 32GB 미만인 경우 JVM 플래그를 xx:+UseCompressedOops로 설정합니다.
4. 가비지 컬렉션 최적화
가비지 수집기를 최적화하려면 Spark 애플리케이션을 실행하는 데 G1 및 GC를 사용해야 합니다. G1 수집기는 증가하는 힙을 관리합니다. GC 튜닝은 생성된 로그에 따라 응용 프로그램의 예기치 않은 동작을 제어하는 데 필수적입니다. 그러나 그 전에 프로그램의 논리와 코드를 수정하고 최적화해야 합니다.
G1GC는 프로세스 간의 일시 중지 시간을 최적화하여 작업 실행 시간을 줄이는 데 도움이 됩니다.
5. 메모리 관리
조인, 셔플, 정렬 및 집계와 같은 계산을 저장하는 데 사용되는 메모리를 실행 메모리라고 합니다. 스토리지 메모리는 클러스터에 저장된 데이터를 캐싱하고 처리하는 데 사용됩니다. 두 메모리 모두 통합 영역 M을 사용합니다.
실행 메모리가 사용되지 않을 때 저장 메모리는 공간을 사용할 수 있습니다. 마찬가지로 저장 메모리가 유휴 상태일 때 실행 메모리가 공간을 활용할 수 있습니다. 이것은 가장 효율적인 Spark 최적화 기술 중 하나입니다 .
또한 읽기: Apache Spark의 6가지 획기적인 기능
결론
다양한 Spark 최적화 기술 에서 처리 시간을 줄이고 데이터를 더 빠르게 처리하는 데 도움이 되는 방법을 이해할 수 있습니다. 개발자와 전문가는 응용 프로그램과 해당 데이터의 양에 따라 이러한 기술을 적용합니다.
스파크 최적화 , 데이터 과학에 대해 자세히 알아보려면 작업 전문가를 위해 만들어졌으며 10개 이상의 사례 연구 및 프로젝트, 실용적인 실습 워크샵, 업계 멘토링을 제공하는 IIIT-B & upGrad의 데이터 과학 경영자 PG 프로그램을 확인하십시오. 전문가, 업계 멘토와의 1:1 학습, 최고의 기업과의 400시간 이상의 학습 및 직업 지원.
Spark 최적화 기술이란 무엇입니까?
Apache Spark를 사용하면 기업에서 데이터를 신속하게 처리하고 복잡한 데이터 문제를 쉽게 해결할 수 있습니다. 모든 프로그램을 개발하는 동안 성능을 관리하는 것이 매우 중요하다는 것은 분명합니다. Spark 최적화 기술은 메모리 내 데이터 계산에 도움이 됩니다. 이러한 계산을 방해할 수 있는 유일한 것은 메모리, CPU 또는 기타 리소스입니다.
모든 스파크 최적화 기술은 다른 목적으로 사용되며 특정 작업을 수행합니다. 널리 사용되는 스파크 최적화 기술은 다음과 같습니다.
1. 직렬화
2. API 선택
3. 어드밴스 변수
4. 캐시 및 지속
5. ByKey 조작
6. 파일 형식 선택
7. 가비지 컬렉션 튜닝
8. 병렬 처리 수준
언제 Spark 사용을 고려해서는 안 됩니까?
Apache Spark에는 많은 사용 사례가 있지만 목적을 달성하기 위해 다른 빅 데이터 엔진이 필요한 특정 특수 요구 사항이 있습니다. 이러한 경우 Spark를 사용하는 대신 다른 기술을 사용하는 것이 좋습니다. 다음은 Spark 사용을 고려해서는 안 되는 사용 사례입니다.
1. 낮은 컴퓨팅 용량 – Apache Spark의 기본 처리는 클러스터 메모리에서 발생합니다. 가상 머신이나 클러스터의 컴퓨팅 용량이 적은 경우 Apache Hadoop과 같은 다른 대안으로 이동해야 합니다.
2. 게시-구독 모델의 데이터 수집 – 이 경우 수백만 개의 데이터가 짧은 시간에 이동되는 여러 소스와 여러 대상이 있습니다. 여기서는 Spark를 사용하지 않고 Apache Kafka를 사용합니다.
Pandas가 Apache Spark보다 빠릅니까?
Pandas DataFrame과 Spark DataFrame의 계산 속도를 비교하면 Pandas DataFrame의 성능이 작은 데이터 세트에서 약간 더 우수함을 알 수 있습니다. 반면 데이터의 크기가 커지면 Spark DataFrame은 Pandas DataFrame을 능가할 만큼 충분히 성능이 있음을 알 수 있습니다. 따라서 데이터 양에 따라 많이 달라집니다.