728x90
반응형
SMALL
13주차 목요일, 64일차 Today I Learned
빅데이터 처리 시스템, Hadoop Spark (4)
: Spark 내부 동작 이해하기
✏️ 학습 내용
1. 지원 파일 포맷
데이터는 디스크에 파일로 저장된다. Spark SQL이나 데이터프레임을 통해 데이터 처리를 한다면 입력 데이터는 대부분 HDFS에서 올 것이다. HDFS에 어떤 형식으로 저장되어 있느냐가 성능에 큰 영향을 끼친다.
- 비구조화 데이터 : text
- type이 없는 세미 구조화 데이터 : JSON, XML, CSV
- 구조화 데이터 : PARQUET, AVRO, ORC, SequenceFile
- PARQUET 란, Spark의 기본 파일 포맷이다. 하나의 데이터 블록은 하나의 Row Group으로 구성된다.
2. Execution Plan
Transformations
- Narrow Dependencies : 독립적인 Partition level 작업
- Wide Dependencies : Shuffling이 필요한 작업
Actions
- Read, Write, Show, Collect : Job을 실행시킴
- Lazy Execution
- Action -> Job -> 1+ Stages -> 1+ Tasks
- Action : Job을 하나 만들어내고 코드가 실제로 실행됨
- Job : 하나 혹은 그 이상의 Stage로 구성되며, 셔플링이 발생하는 경우 스테이지는 새로 생김
- Stage : DAG의 형태로 구성된 Task들 존재함. 여기 Task들은 병렬 실행 가능
- Task : 가장 작은 실행 유닛으로 Executor에 의해 실행됨
3. Bucketing과 File System Partitioning
HDFS 데이터를 처리 형태에 맞춰 최적화할 수 있다면, 처리 시간을 단축하고 리소스를 덜 사용할 수 있다. 두 가지 모두 Hive 메타스토어의 사용이 필요하다.
Bucketing
- 셔플링을 줄이는 것이 목적
- Aggregation 이나 Window 함수나 Join에서 많이 사용되는 컬럼이 있다면, 데이터를 이 특정 컬럼(들)을 기준으로 테이블에 저장하며, 이 때 버킷의 수도 지정하여 버킷 수만큼 파티션이 생겨난다.
- DataFrame을 특정 ID를 기준으로 나눠서 Spark 테이블로 저장한다. 다음부턴 이를 로딩하여 사용함으로써 반복 처리 시 시간을 단축할 수 있고, 데이터의 특성을 잘 알고 있는 경우 사용 가능하다.
File System Partitioning
- 데이터의 특정 컬럼(들)을 기준으로 폴더 구조를 만들어 데이터 저장 최적화
- 원래 Hive에서 많이 사용한다.
반응형
💡 배운 점
- Spark 파일 포맷으로 가장 최적인 것은 PARQUET 이라는 것을 알게 되었다.
- Spark Job 최적화를 위해서는 Execution Plan을 확인해야 한다.
- Bucketing과 File System Partitioning을 통해 입력 데이터 구조를 최적화할 수 있다.
☁️ 소감
새로운 파일 포맷과 개념들에 대해서 배우게 되었다. Spark의 내부 동작을 이해하기 위해서는 필요한 내용이니까 그림을 그려가며, 실습 내용을 살펴보며 공부해야 겠다고 생각했다.
728x90
반응형
LIST