Ingestion and Tranformation (continued)
4. Spark Platform
- Apache Spark(Platform이 아니라 오픈 소스 라이브러리)
- 정의
- unified analytics engine for large-scale data processing
- open source distributed general-purpose cluster-computing framework
- 머신러닝을 돌리기 위해 여러 대의 서버에 나눠서 처리할 때 사용하는 프레임워크
- Component
- Apache Spark Core: RDD를 처리하는 로직. 이하의 것들을 실핼할 수 있도록 도와줌
- Spark SQL: RDD 기반으로 SQL을 실행. RDD는 여러 대의 서버에 올려 빠르게 처리 가능(Dataframe이라고 부름)
- Spark Streaming: RDD 기반의 streaming 처리 (Streaming이 뭐지..?)
- MLlib: RDD 기반으로 머신러닝 처리
- GraphX: RDD 기반의 그래프 개체
- 그냥 다 RDD 기반으로 데이터 처리를 얹은 것임!! 분산이라 다 빠름!!!
- Hadoop의 Map Reduce vs Spark
- MapReduce는 Batch processing만 가능, Spark는 Batch/real-time/iterative/interactive/graph 등 다양하게 사용 가능
- MapReduce는 HDFS에서 데이터를 가져오고, Spark는 Memory(Ram)에서 caching해서 사용 -> Apache가더 빠름
- Spark의 작동 원리 - RDD (참고자료: 이곳)
- 기존 Hadoop의 MapReduce는 iteration을 돌 때마다 스테이지간 자료공유가 HDFS를 거치기 때문에 느림(iteration 돌 때마다 Read와 Write 반복)
- 이러한 점을 극복하기 위해 Spark는 쿼리할 때마다 처음부터 읽어오지 않고, 한 번 Ram에 올려 놓고, 그 다음에 쿼리를 한꺼번에 실행
- 하지만 Ram은 빠른 대신 꺼지면 날아가는 문제가 있었음 -> RAM을 Read-only로만 사용(RDD의 탄생)
- RDD(Resilient Distributed Datasets): 쉽게 복원이 되는 분산 데이터셋
- 특성: Immutable(수정 불가능=Read-only), lineage(계보)를 가지고 있기 때문에 그것만 가지고도 어디서 error가 났는지 쫓아갈 수 있게 됨
- lineage(계보)를 DAG(directed acyclic graph)로 디자인
- RDD operator: transformations, actions
- transformation
- map, reduce, join 등 데이터를 변형하는 operator
- map, reduce만 있던 MapReduce보다 명령어가 풍부함
- Action
- 말미에 모든 transformation된 결과를 실행하는 명령어
- lazy execution이라고 부름. 자원이 배치된, 배치될 상황을 미리 고려해서 최적의 코스로 돌 수 있음
- transformation
- spark platform과 workflow manager의 관계
- workflow manager에서는 task를 실행하는데, 이 task가 빅데이터 관련일 경우 엄청난 양의 계산을 필요로 하기 때문에 여러 대의 기기에서 분산 처리해서 분석해야 함. 그 때 분산 처리를 잘 managing하기 위해 spark를 사용 (사실 spark가 먼저 나왔고, 이 workflow를 제어하기 위해 airflow(workflow manager)가 나온 것임)
- 정의
- DataBricks
- Spark를 만든 개발자들이 차린 Spark Platform 회사
- Spark를 기본엔진으로 하여 BI Tool과의 연계, 자체 notebook과 dashboard, clowd storage나 data warehouse, data lakes와의 연계 등을 지원하는 솔루션
- 직접 spark를 구성해서 올리는 것보다 databricks를 이용하는 것이 훨씬 최적화되어있기 때문에 빠름
- Azure Databricks - Azue 클라우드 서비스에 Databricks를 올려 기존 Azure의 데이터 서비스, 분석 도구 등등을 가능하게 함
- Databricks on AWS - Azure Databricks와 마찬가지로 AWS 위에 Databricks를 올린 것
- EMR
- Spark 뿐 아니라 Apache Hive, Apache Hbase, Apache Flink, Apache Hudi, Presto까지 가능한 Data platform
5. Python Libs
- Pandas
- tabular data(테이블 데이터)를 다루는 python library
- csv, xls, html 등을 dataframe으로 만들어 분석할 수 있게 해주는 도구
- dataframe의 일부 컬럼, 일부 row만 가져오거나, 새로운 row나 column을 추가하거나, pivot하거나, join하거나 merge하는 작업을 함
- sql이 하는 것을 대부분 할 수 있음. 하지만 sql문장은 개발자가 sql을 편하게 코드로 실행할 수 있다는
- Boto 3
- python에서 amazon에 접속해서 aws의 수많은 클라우드 서비스(S3, EC2 등)에 접근할 수 있도록 해줌
- Dask
- python을 native scaling하는 라이브러리
- 병렬 처리가 가능하게 해줌
- 파이썬은 대부분 로컬에서 혼자 돌아가는 라이브러리임.
- Dask는 파이썬을 여러 대의 서버에서 동시에 처리하도록 해주어서 속도를 높임
- Ray
- Dask와 마찬가지로 python을 분산처리하도록 도와주는 오픈소스 라이브러리
- Dask와의 차이점
- Dask는 centralized scheduler가 있고, Ray는 local scheduler를 사용함(분산 bottom up scaling)
- local scheduler: local scheduler에 task를 주고, local scheduler는 그 task를 다시 local worker들에게 다시 분산. 그렇게 처리한 것들을 다시 forward
- Dask에서 task latency나 throughput(지정된 시간 내에 전송된/처리된 정보량)을 개선한 것이 Ray
- Dask는 여러 대의 서버에서 분산 처리를 할 때 사용하고, Ray는 여러 대의 서버에서 머신러닝을 돌릴 때 씀
6. Batch Query Engine
- Hive
- 하둡의 HDFS의 데이터를 query하기 위한 엔진
- 원래 HDFS의 데이터를 query하기 위해서는 MapReduce Job을 짜야 하는데, Hive는 SQL Job을 MapReduce Job으로 바꿔줌
- Hive는 Metadata를 가지고 있고 이를 Spark가 그대로 이용할 수 있어서 Metadata에 접근하기 좋음
- Hive를 실행하는 엔진으로써 Spark를 사용하면 더 빠르게 Hive Query를 실행할 수 있음
- Spark와 Hive는 대치되기보다 서로 보완됨
더 알아볼 것
- cloud storage와 data warehouse는 어떻게 다른 것인가...?
- RDD 뒷부분 자세하게 알아보기
- Apache Spark와 Apache Hive, Hbase, Flink, Hudi, Presto는 모두 비슷한 역할을 하는 것인가요? (분산 데이터 프레임워크?)
- Metadata란?
'Data science > ML' 카테고리의 다른 글
| 긱뉴스 - 최신 데이터 인프라 이해하기 #6 Kafka, Pulsar, Kinesis (0) | 2022.05.18 |
|---|---|
| 긱뉴스 - 최신 데이터 인프라 이해하기 #4 데이터 모델링과 워크플로우 매니저 (0) | 2022.04.13 |
| 긱뉴스 - 최신 데이터 인프라 이해하기 #3 ETL/ELT 도구들 (0) | 2022.04.13 |
| 긱뉴스 - 최신 데이터 인프라 이해하기 #2 데이터 소스 (0) | 2022.04.13 |
| 긱뉴스 - 최신 데이터 인프라 이해하기 #1 기본 개념과 단어 설명 (0) | 2022.04.13 |