[Alex] 데이터 장인의 블로그

Spark 프로그래밍 - RDD, DataFrame 본문

Hadoop & Spark

Spark 프로그래밍 - RDD, DataFrame

Alex, Yoon 2021. 5. 1. 23:31

Spark는 Mapreduce의 대체자

  • MapReduce의 경우 Disk에서 매번 데이터를 처음부터 읽어야한다. (-> RDD는 데이터를 처음부터 읽을 필요가 없게 만들어준다.)
  • Spark는 데이터를 메모리에 올려서 연산 방식 데이터를 처음부터 읽어야할 필요가 없다. Spark는 반복적인 데이터 처리 작업에서 MapReduce보다 속도가 빠르다

Spark 의 활용사례 (장단점)

장점(사용 가능 바운더리)

  1. 데이터 전처리 집계
  2. 스트리밍 데이터 처리, 프로세싱 
  3. 머신러닝 분석 

단점(한계점)

  1. 단독 로컬 사용보다는 클러스터 환경에서 효과를 보임. (하둡, 카프카 등)
  2. Database를 대체할 수는 없음.
  3. 메모리 뿐만 아니라 CPU/GPU 스펙도 중요. 

RDD 

  • Resilient Distributed Dataset의 줄임말 (탄력있는 분산된 데이터셋)
  • 2014년 정식 출시된 스파크 v1은 RDD API 를 이용하여 데이터를 처리 -> 이후 Dataframe의 개념이 등장하여 Python, R에서 활용됨. 
  • RDD는 인메모리 데이터 처리를 통하여처리 속도를 높일 수 있었지만, 테이블 조인 효율화 같은 처리를 사용자가 직접 제어해야 했기 때문에 최적화에 어려움을 겪음
  • Lineage(계보) 를 통해 Fault Tolerant 를 보장한다 

DataFrame

  • 데이타프레임은 스파크 1.3에서 처리 속도 증가를 위한 프로젝트 텅스텐의 일부로 소개.
  • 데이터를 스키마 형태로 추상화 하고, 카탈리스트 옵티마이저가 쿼리를 최적화하여 처리
  • Spark를 사용하는 대표 이유인 sparkSQL을 활용할 때, DataFrame으로 데이터 처리가 가능.
  • RDD의 특성을 모두 상속받은 후, 스키마의 특징까지 가지고 있는 형태라고 생각하면 이해하기 편함. 

Spark에서 데이터 프레임을 사용하는 이유 -> SQL을 이용하여 데이터 처리가 가능함.


스파크 컨텍스트 (RDD 초기화)

RDD는 외부 데이터를 읽어서 처리하거나, 자체적으로 컬렉션 데이터를 생성하여 처리할 수 있습니다. 데이터 처리는 파티션 단위로 분리하여 작업을 처리

RDD는 트랜스포메이션(transformation), 액션(action) 두가지 타입의 연산을 가짐.

 

  • 트랜스포메이션은 필터링 같은 작업으로 RDD에서 새로운 RDD를 반환. 액션은 RDD로 작업을 처리하여 결과를 반환. 스파크는 지연 처리(lazy evalution)를 지원하여 트랜스포메이션을 호출할 때는 작업을 처리하지 않고, 액션을 호출하는 시점에 작업을 처리하여 작업의 효율성을 제공.

ex) Spark의 데이터 처리 방법론

  1. Data Source(HIVE 등등)로부터 데이터 호출(RDD화)
  2. Transformation (RDD1 -> TF -> RDD2 -> TF)
  3. Action (Lazy - Execution "지연 처리 동작" : 효율적으로 데이터 처리를 진행) if. 작업의 처리 결과를 재사용하고 싶다면 persist() 메소드를 사용하여 결과를 메모리에 유지하도록 할 수 있음.

Spark 의 개본개념 및 구조

Driver : Python, R, Scala 등 Spark를 실행하는 프로그램. 

Spark Context를 통해 스파크와 연결하여 Executor에게 작업을 할당한다. 
Executer와 Driver 가 통신하는 데, port 가 랜덤으로 할당. -> 이에 대한 질문 및 해결방법에 대한 논의들이 많음. 

Executor : Driver 프로세스가 할당한 작업을 수행. Driver가 할당한 코드를 실행, 진행 사항을 Driver Node에 다시 보고하는 2가지 역할을 수행.

Task : 실제로 할당된 업무를 수행하는 객체. 각 Excutor의 캐쉬를 공유하여 작업 속도를 향상 

Spark는 사용가능한 자원을 지속적으로 파악하기 위해 Cluster Manager 사용. 

DAGs

  • RDD를 변경하는 순서를 Lineage(계보). 
  • Lineage는 DAG(Directed Acyclic Graph)의 형태를 가짐
  • 노드간의 순환이 없으며 일정한 방향성을 가짐. 순서가 중요함
  • Lineage는 DAG(Directed Acyclic Graph)의 형태를 가짐
  • RDD연산 과정에서 DAG그래프를 복귀하여 다시 계산하고 복구할 수 있음 (Fault-tolerant)
반응형
Comments