일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- docker
- query history
- bar cahrt
- KubernetesPodOperator
- proerty
- 크롤링
- UI for kafka
- k9s
- 파이썬
- 도커
- 모바일
- ksql
- 동적 차트
- 윈도우
- kafka
- mysql
- Java
- spring boot
- freshness
- spark
- Materializations
- Python
- airflow
- numpartitions
- dbt_project
- 카프카
- CDC
- 쿠버네티스
- DBT
- polars
- Today
- Total
데이터 엔지니어 이것저것
Spark란? 본문
아파치 스파크란?
대규모 데이터 처리를 위한 빠른 엔진이다.
스파크는 스크립트를 입력하여, 대량의 데이터를 어떻게 변환하고, 분석하고 싶은지를 작성하면 된다.
이를 스파크가 전체 클러스터에 병렬화를 위한 엔진인다.
여러개의 로그파일을 입력해서 정로를 추출하고 이를 다른곳에 전송을 한다면,
스파크가 전체 클러스터에 걸쳐 어떻게 작업할지 파악하여 실행한다.
핵심은, 스파크에선 머신 하나의 연산력만 사용하는것이 아닌, 방대한 양의 데이터를 전체 컴퓨터 내에서 동시에 병렬적으로 실행되도록 데이터 처리를 분배한다.
이러한 분할 점령의 접근법으로 방대한 데이터셋을 처리하고 빅데이터를 처리한다
시스템 구성 측면에서는 드라이버(작성 프로그램, 스크립트)가 클러스터 매니저에게 전달하고
이를 클로스터 매니저(하둡 클러스터 또는 Yarn 클러스터)가 전체 클러스터를 조정합니다.
각각의 머신에는 각기 다른 노드가 있고, 각 노드들은 또 다른 executor를 실행합니다
이 모든 과정은 전체 클러스터에 걸쳐 분배되고, 각자의 캐시, task를 가진다.
이를 클러스터 매니저를 통해 전달하거나, 직접 명령을 내릴수있다.
executor는 서로간 통신 및 동기화를 한다.
이러한 데이터를 모아 최종 결과물을 전달한다.
그럼 왜 스파크가 인기일까?
스파크는 하둡의 맵 리듀스를 대체하는데, 충분한 양의 메모리가 있다면 최대 100배의 속도 향상을 낼수있기 때문이다.
이러한 이유로는 DAG 엔진 덕분이다.
작성한 스크립트에 설명한 workflow를 토대로 최적화를 한다.
맵 리듀스의 경우는 딱 한가지의 방법을 처리할 데이터에 맞춰 끼우는 형태이다.
스파크는 병렬적으로 작업하고, 결과를 합치고 최종 결과에 정의를 한다.
좀 더 유연하게 처리하고, 복잡한 워크플로우를 최적화 할수있다.
스파크는 Spark DataSets, DataFrames 기능이 있는데 모두 SQL statement가 작동되는 방식과 비슷하다.
SQL에 직접 명령도 내릴 수 있다 ( Spark SQL)
하지만 모든 데이터 분석 및 변환이 SQL로 정의되지 않기때문에 더 low level로 작업 할 수 있다.
Spark API는 RDD(Resilient Distributed Dataset)이라 불리는데, Spark Core에 직접 코드를 입력하여 작업한다.
고수준의 API도 있다 eg) spark streaming
스파크는 Scala를 위주로 사용하는데
1. 스파크자체가 스킬라로 작성되어 있다.
2. 스칼라가 함수형 프로그래밍이기 때문에 분산 처리에 적합하다.
출처
Apache Spark™ - Unified Engine for large-scale data analytics
Run now Installing with 'pip' $ pip install pyspark $ pyspark QuickStart Machine Learning Analytics & Data Science df = spark.read.json("logs.json") df.where("age > 21").select("name.first").show() # Every record contains a label and feature vector df = sp
spark.apache.org
'오픈소스 > Spark' 카테고리의 다른 글
Spark Broadcast (0) | 2023.01.30 |
---|---|
Spark Session (0) | 2023.01.08 |
Spark SQL (0) | 2023.01.08 |
spark groupByKey vs reduceByKey (0) | 2022.12.05 |
RDD (0) | 2022.12.03 |