Azure Synapse Analytics에서 Apache Spark를 사용하여 데이터 분석 - Training
<div|Apache Spark is a core technology for large-scale data analytics. Learn how to use Spark in Azure Synapse Analytics to analyze and visualize data in a data lake. </div|
learn.microsoft.com
Apache Spark는 대규모 데이터 분석을 위한 핵심 기술이다. Azure Synapse Analytics에서 Spark를 사용하여 데이터 레이크의 데이터를 분석하고 시각화하는 방법을 알아본다.
학습 목표
- Apache Spark의 핵심 특성 및 기능을 식별한다.
- Azure Synapse Analytics에서 Spark 풀을 구성한다.
- 코드를 실행하여 Spark Notebook에서 데이터를 로드, 분석, 시각화한다.
Apache Spark 알아보기
- Apache Spark는 클러스터의 여러 처리 노드에서 작업을 조정하여 대규모 데이터 분석을 지원하는 분산 데이터 처리 프레임워크
[Spark 작동 방식]
- Apache Spark 애플리케이션은 클러스터의 독립 프로세스 집합으로 실행되며 기본 프로그램(드라이버)에서 SparkContext 개체에 의해 조정된다.
- SparkContext는 Apache Hadoop YARN 구현을 사용하여 애플리케이션 간에 리소스를 할당하는 클러스터 관리자에 연결한다.
- 일단 연결되면 Spark는 애플리케이션 코드를 실행하기 위해 클러스터의 노드에서 실행기를 얻는다.
- SparkContext는 클러스터 노드에서 주 함수 및 병렬 작업을 실행한 다음 작업 결과를 수집한다. 노드는 파일 시스템에서 데이터를 읽고 쓰고 메모리 내 변환된 데이터를 RDD(복원력 있는 분산 데이터 세트)로 캐시한다.
- SparkContext는 애플리케이션을 DAG(방향성 비순환 그래프)로 변환하는 작업을 담당한다. 그래프는 노드의 실행기 프로세스 내에서 실행되는 개별 작업으로 구성된다. 각 애플리케이션은 전체 애플리케이션의 기간에 대해 유지하고 여러 스레드에서 작업을 실행하는 자체 실행기 프로세스를 가져온다.
[Azure Synapse Analytics의 Spark 풀]
- Azure Synapse Analytics에서 클러스터는 Spark 작업에 대한 런타임을 제공하는 Spark 풀로 구현된다.
- Azure portal을 사용하여 Azure Synapse Analytics 작업 영역에서 또는 Azure Synapse Studio에서 하나 이상의 Spark 풀을 만들 수 있다. Spark 풀을 정의할 때 다음을 포함하여 풀에 대한 구성 옵션을 지정할 수 있다.
- Spark 풀 이름
- 하드웨어 가속 GPU 사용 노드를 사용하는 옵션을 포함하여 풀의 노드에 사용되는 VM의 크기
- 풀의 노드 수, 풀 크기가 고정되었는지 여부 또는 개별 노드를 온라인으로 동적으로 가져와 자동 스케일링할 수 있는 지 여부. 이 경우 활성 노드의 최소 및 최대 수를 지정할 수 있다.
- 풀에서 사용할 Spark 런타임의 버전. Pyton, Java 및 설치되는 다른 구성 요소와 같은 개별 구성 요소의 버전
- Azure Synapse Analytics 작업 영역의 Spark 풀은 서버리스. 요청 시 시작되고 유휴 상태일 때 중지된다.
Azure Synapse Analytics에서 Spark 사용
- Python 또는 Scala 스크립트의 코드, JAR(자바 보관 파일)로 컴파일된 Java 코드 등 다양한 종류의 애플리케이션을 Spark에서 실행할 수 있다.
- Spark는 일반적으로 다음과 같은 두자기 종류의 워크로드에서 사용된다.
- 데이터를 수집, 정리, 변환하기 위한 일괄 처리 또는 스트림 처리 작업으로 자동화된 파이프라인의 일부로 실행되는 경우가 많다.
- 데이터를 검색, 분석, 시각화하는 대화형 분석 세션
[Notebook에서 Spark 코드 실행]
- Azure Synapse Studio에는 Spark 작업을 위한 통합 Notebook 인터페이스가 포함되어 있다.
- Notebook은 데이터 과학자 및 데이터 분석가가 일반적으로 사용하는 Markdown 노트와 코드를 결합하는 직관적인 방법을 제공한다.
- Azure Synapse Studio 내에 통합된 Notebook 환경의 디자인과 분위기는 널리 사용되는 오픈소스 Notebook 플랫폼인 Jupyter Notebook과 비슷하다.
* Notebook은 일반적으로 대화형으로 사용되는 반면 자동화된 파이프라인에 포함되고 무인 스크립트(?)로 실행할 수 있다.
- Notebook은 각각 코드 또는 Markdown 을 포함하는 하나 이상의 셀로 구성된다. Notebook의 코드 셀에는 다음을 포함하여 생산성을 높이는데 도움이 되는 몇가지 기능이 있다.
- 구문 강조 표시 및 오류 지원
- 코드 자동 완성
- 대화형 데이터 시각화
- 결과 내보내기 기능
[Synapse Spark풀에서 데이터 액세스]
- Azure Synapse Analytics 작업 영역에 대한 기본 스토리지 계정을 기반으로 하는 데이터 레이크이다.
- 작업 영역에서 연결된 서비스로 정의된 스토리지를 기반으로 하는 데이터 레이크
- 작업 영역의 전용 또는 서버리스 SQL 풀
- Azure SQL 또는 SQL Server 데이터베이스 (SQL Server용 Spark 커넥터 사용)
- 연결된 서비스로 정의되고 Cosmos DB용 Azure Synapse Link를 사용하여 구성된 Azure Cosmos DB분석 데이터베이스
- 작업 영역에서 연결된 서비스로 정의된 Azure Data Explorer Kusto 데이터베이스
- 작업 영역에서 연결된 서비스로 정의된 외부 Hive 메타스토어
- Spark의 가장 일반적인 용도 중 하나는 데이터 레이크의 데이터로 작업하는 것. 여기서는 구분된 텍스트, Parquet, Avro 등을 포함하여 일반적으로 사용되는 여러 형식으로 파일을 읽고 쓸 수 있다.
Azure Synapse Analytics에서 Spark 사용
- Spark를 사용하는 이점 중 하나는 다양한 프로그래밍 언어로 코드를 작성하고 실행하여 이미 가지고 있는 프로그래밍 기술을 사용하고 지정된 작업에 가장 적합한 언어를 사용할 수 있다는 것.
- 새 Azure Synapse Analytics Spark Notebook의 기본 언어는 데이터 조작 및 시각화에 대한 강력한 지원으로 인해 데이터 과학자 및 분석가가 일반적으로 사용하는 Spark 최적화 버전의 Pyton인 PySpark
- Scala( 대화형으로 사용할 수 있는 Java 파생 언어 )및 SQL 과 같은 언어를 사용할 수 있다.
- 소프트웨어 엔지니어는 Java 및 .NET 과 같은 프레임워크를 사용하여 Spark에서 실행되는 컴파일된 솔루션을 만들 수도 있다.
[Synapse Spark풀에서 데이터 액세스]
- 기본적으로 Spark는 RDD(복원력 있는 분산 데이터 세트)라는 데이터 구조를 사용
- RDD에서 직접 작동하는 코드를 작상할 수 있지만 Spark에서 정형 데이터를 사용하기 위해 가장 일반적으로 사용되는 데이터 구조는 Spark SQL 라이브러리의 일부로 제공되는 데이터 프레임
- Spark의 데이터 프레임은 유비쿼터스 Pandas Pyton 라이브러리의 데이터 프레임과 비슷하지만 Spark의 분산 처리 환경에서 작동하도록 최적화
* Spark SQL은 데이터 프레임 API외에도 Java 및 Scala에서 지원되는 강력한 형식의 데이터 세트 API를 제공한다. 본 모듈에서는 Dataframe API에 중점을 둔다.
[데이터 프레임에 데이터 로드]
- %%pyspark : 매직, 이 셀에 사용되는 언어가 PySpark임을 Spark에게 알린다.
- Notebook 인터페이스의 도구 모음에서 기본값으로 사용할 언어를 선택한 다음 매직을 사용하여 특정 셀에 대해 선택한 언어를 재정의할 수 있다.
[데이터 프레임 스키마 지정]
[데이터 프레임 필터링 및 그룹]
Spark에서 SQL 식 사용
- Dataframe API는 데이터 분석가가 SQL 식을 사용하여 데이터를 쿼리하고 조작할 수 있도록 하는 Spark SQL 라이브러리의 일부
[Spark 카탈로그에서 데이터베이스 개체 만들기]
- Spark 카탈로그는 뷰 및 테이블과 같은 관계형 데이터 개체에 대한 메타스토어
- Spark 런타임은 카탈로그를 사용하여 Spark 지원언어로 작성된 코드를 일부 데이터 분석가 또는 개발자에게 더 자연스러운 SQL 식과 원활하게 통합할 수 있다.
* 참고
- spark.catalog.createTable 메서드 : 빈 테이블을 만들 수 있다. 테이블은 카탈로그와 연결된 스토리지 위치에 기본 데이터를 저장하는 메타데이터 구조이다. 테이블을 삭제하면 기본 데이터도 삭제된다.
- saveAsTable 메서드 : 데이터 프레임을 테이블로 저장할 수 있다.
- spark.catalog.createExternalTable 메서드 : 외부 테이블 만들 수 있다. 외부 테이블은 카탈로그에서 메타데이터를 정의하지만 외부 스토리지 위치(보통 데이터 레이크의 폴더)에서 기본 데이터를 가져온다. 외부 테이블을 삭제해도 기본 데이터는 삭제되지 않는다.
[Spark SQL API를 사용하여 데이터 쿼리]
[SQL 코드 사용]
- %%sql
Spark를 사용하여 데이터 시각화
- Azure Synapse Analytics의 Notebook은 사용자 인터페이스에서 몇 가지 기본 차트 기능을 제공
- Pyton 그래픽 라이브러리 중 하나를 사용하여 Notebook에서 데이터 시각화를 만들고 표시할 수 있다.
[기본 제공 Notebook 차트 사용]
- 데이터 프레임을 표시하거나 Azure Synapse Analytics의 Spark Notebook에서 SQL 쿼리를 실행하면 결과가 코드 셀 아래에 표시된다.
- Notebook의 기본 제공 차트 기능은 기존 그룹화 또는 집계를 포함하지 않는 쿼리 결과를 사용하여 작업하고 데이터를 시각적으로 빠르게 요약햐려는 경우에 유용
[코드에서 그래픽 패키지 사용]
- 기본 Matplotlib 라이브러리 기반
- 그래픽 라이브러리의 출력은 Notebook에서 렌더링할 수 있으므로 코드를 결합하여 인라인 데이터 시각화 및 Markdown 셀을 사용하여 데이터를 수집하고 조작하여 설명을 제공할 수 있다.