본문 바로가기

Data science/ML

긱뉴스 - 최신 데이터 인프라 이해하기 #5 Spark, Python, Hive

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이라고 부름. 자원이 배치된, 배치될 상황을 미리 고려해서 최적의 코스로 돌 수 있음
    • 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란?