취미가 좋다
[ 데이터 인프라 ] Spark, Python, Hive 본문
이전에 살펴본 Workflow Manager는 큰 빅데이터를 다룰 때, 분산해서 처리해야하는 작업이 이루어져야 한다. Airflow는 Task를 실행하는 엔진일 뿐, 실제 작업은 Spark에서 이루어진다.

1. Python Libs
pandas로 데이터를 분석하는 코드를 작성하고, Dart나 Ray로 분산하여 처리할 수 있다.
1.1) Pandas
표(DataFrame)로 된 데이터를 다루는 툴이다.
SQL과 비슷하지만, 파이썬 코드로 데이터를 조작할 수 있다는 점이 다르다.

- DataFrame의 원하는 데이터를 가져와서, 새로운 DataFrame을 만들 수 있다.
- DataFrame을 원하는 그래프 등의 형태로 나타낼 수 있다.
- 원하는 데이터끼리 연산하여 새로운 행/열을 만들 수 있다.
- 기본적인 통계(평균, 최대값 등)을 쉽게 계산해준다.
- 데이터 구조를 pivot하거나 melt 할 수 있다.
- 여러 개의 테이블을 join, merge 할 수 있다.
1.2) Boto3
파이썬으로 여러 클라우드 컴퓨팅 서비스(AWS ec2, S3)에 접속할 수 있도록 하여, 리소스를 사용할 수 있도록 하는 라이브러리이다.
1.3) Dask
파이썬 코드를 병렬로 여러 대의 서버에서 돌아갈 수 있도록 도와주는 도구이다.

1.4) Ray
파이썬 코드로 분산 컴퓨팅할 수 있도록 도와주는 도구이다.
Dask와 비슷하지만, 스케줄링 방식이 조금 달라 더 빠른 속도를 가진다.
2. Spark Platform
: 대규모 데이터 처리를 위한 빠르고 범용적인 통합 분석 엔진
: 쉽게 말하면, 빅데이터를 다룰 때, 여러 서버에 나누어서 작업하는 것을 가능하게 해주는 프레임워크이다.
vs Hadoop

MapReduce 는 처리해야할 일을, 마스터 서버가 쪼개서 여러 서버에 나누어주면, 수행해서 다시 합하여 올리는 작업이다.
2.0) Spark의 핵심
아래의 링크가 Spark를 이해하는 데 도움이 된다.
https://www.slideshare.net/yongho/rdd-paper-review
하둡은 이미 legacy(낡은 기술)라고 할 정도로, 요즘 Spark 분산 프레임워크가 핫하다.
2.1) RDD (Resilient Distributed Datasets)
MapReduce가 빅데이터 분석을 쉽게 만들어주긴 했지만, 복잡하거나(머신러닝, 그래프) interactive한 것들을 잘 못한다.
특히, 데이터를 HDFS(하둡 파일 시스템)에 자꾸 읽고 쓰니까 느리고 비효율적이다.
그래서 더 빠른 RAM에서 모든 것을 처리하도록 하였다. 하지만 램에서 데이터는 깨지기 쉽다.
RDD는 RAM을 read-only로 사용하여 이를 해결하였다. (Resilient : 쉽게 복원되는)
그래서 RDD는 한번 만들어지면 수정이 되지 않는다. (Immutable)
어떻게 만들어졌는지 기록하여, 이 데이터가 어떤 처리가 되어 만들어졌는지 기록한다.
이 계보(lineage)를 DAG로 디자인한다.
2.2) Lazy-execution
RDD operator에는 transformations & actions 가 있다.
transformations 내용을 코딩만 해놓고, action 하면 그제서야 작업을 수행한다.
자원이 배치될 상황을 미리 고려해서 최적의 코스로 돌 수 있다. 즉, 최적화가 가능하다.
워커들이 도는 모습은 기존과 비슷하다.
성능이 대폭 상승하였고, MapReduce로 하던 기능보다 더 많은 것을 수행한다.
2.3) 특징
Spark는 Hadoop의 MapReduce보다 100배 빠르다.
내부는 Scala로 구현되었지만, Java, Scala, Python, R, SQL 로 개발할 수 있다.
2.4) Generality
Spark Core는 RDD를 처리하는 로직이고, 그 위에 Spark SQL, Spark Streaming, MLlib, GraphX가 붙는다.
Spark SQL은 RDD를 기반으로 SQL 문장을 처리하는 것이다. 이를 위해서 RDD 기반의 새로운 데이터 구조(DataFrame)를 만든다.
dstream이라고 하는 RDD 기반의 stream 처리 개체를 만든다. ML과 Graph도 마찬가지다.

처음 RDD에서 Pandas에서 사용하는 DataFrame을 가져다가, RDD 기반의 DataFrame을 만들어서 처리한다.
추가로 Dataset 개념을 넣어서 2016년에 DataFrame, DataSet을 다 지원하는 구조를 만든다.

정리하자면, Spark에는 RDD 기반으로 분산처리 로직이 있고, 분산해서 다양한 것(SQL, Streaming...)을 빠르게 처리할 수 있는 범용적인 컴퓨팅 엔진이다.
2.5) databricks
Spark 기반의 데이터 분석 플랫폼으로, 아래와 같이 오픈 소스 Spark에 여러 서비스를 추가한 것이다.
최적화가 잘 되어 있기 때문에, 직접 Spark를 사용하는 것보다 databricsks를 사용하는 것이 더 빠르다.

Azure와 AWS에서 각 클라우드 서비스와 함께 databricks를 사용할 수 있다.
Spark로 솔루션화 해서 올려놨기 때문에, 이것들을 사용하면 더 편하게 작업할 수 있다.
2.6) Amazon EMR
Spark 뿐 아니라 Hive를 비롯한 여러 프레임워크를 돌릴 수 있도록 하는 데이터 플랫폼이다.
databricks와 비슷하지만, 더 폭 넓다고 볼 수 있다.
3. Batch Query Engine - HIVE
HDFS에 있는 데이터를 쿼리하기 위한 엔진이다.
하둡을 통해 데이터를 쿼리하려면 MapReduce job을 짜야하지만, HIVE는 SQL을 MapReduce로 변환시켜준다.
Meta store를 통해, 자신이 가지고 있는 데이터 베이스의 메타 데이터를 가지고 있다는 장점이 있다.
Spark SQL과 연결되어, Spark가 이 메타 데이터를 사용할 수 있다.
또한 다양한 데이터베이스(Thrift, JDBC, ODBC)와 연결되어 있고, 마찬가지로 Spark를 이용해서 쓸 수 있다.
즉, 서로 대체하지 않고 보완해서 사용할 수 있다.
참고
https://youtube.com/playlist?list=PLL-_zEJctPoJ92HmbGxFv1Pv_ugsggGD2
최신 데이터 인프라 이해하기
www.youtube.com
'Data Engineer > 데이터 인프라' 카테고리의 다른 글
[ 데이터 인프라 ] Kafka Streams, kSQL, ksqlDB, Apache Flink, Spark Structured Streaming (0) | 2021.08.25 |
---|---|
[ 데이터 인프라 ]Kafka, Pulsar, Kinesis (0) | 2021.08.25 |
[ 데이터 인프라 ] Data Modeling, Worflow Manager (0) | 2021.08.24 |
[ 데이터 인프라 ] ETL/ELT 도구들 (Connectors) (0) | 2021.08.24 |
[ 데이터 인프라 ] 데이터 소스 (0) | 2021.08.23 |