spark 등장

  1. 버클리 대학의 AMPLab에서 아파치 오픈소스 프로젝트로 2013년 시작
  2. 나중에 Databricks라는 스타트업 창업
  3. 하둡의 뒤를 잇는 2세대 빅데이터 기술
    1) YARN등을 분산환경으로 사용
    2) Scala로 작성됨
  4. 빅데이터 처리 관련 *다양한* 기능 제공

spark 3.0의 구성

  1.  **Spark Core:**
       - Apache Spark의 핵심 엔진으로, 분산 데이터 처리의 기본 기능을 담당합니다.
       - 클러스터에서 데이터를 로딩하고, 분산 데이터셋을 생성하며, 다양한 연산 및 변환을 수행하는 데 사용됩니다.

  2.  **Spark SQL:**
       - 구조화된 데이터 처리를 위한 모듈로, SQL 쿼리를 사용하여 데이터에 대한 쿼리 및 분석을 수행합니다.
       - Hive 쿼리 및 데이터 프레임 API를 지원하여 SQL을 사용하여 대화식으로 데이터를 다룰 수 있습니다.

  3.  **Spark ML / Spark MLlib:**
       - 머신러닝을 위한 라이브러리로, Spark MLlib은 고전적인 머신러닝 알고리즘과 기계 학습 파이프라인을 제공
       - Spark ML은 DataFrame API를 기반으로 한 머신러닝 라이브러리로, 풍부한 기능을 제공하며 머신러닝 모델의 구축과 평가를 지원합니다.

  4.  **Spark Streaming:**
       - 실시간 데이터 스트림 처리를 지원하는 모듈로, 초당 수천 개의 이벤트를 처리할 수 있습니다.
       - 스트리밍 데이터에 대한 윈도우 기반의 연산 및 처리를 제공하여 실시간으로 결과를 생성합니다.

  5.  **Spark GraphX:**
       - 그래프 처리를 위한 라이브러리로, 복잡한 그래프 알고리즘을 처리할 수 있습니다.
       - 그래프 구조를 다루며, 그래프 상의 연산 및 알고리즘을 제공하여 소셜 네트워크 분석 등 다양한 그래프 기반 작업

주로 하둡과 kubernetes가 쓰인다.

 

Spark vs. MapReduce

  1.  **Spark은 기본적으로 메모리 기반:**
       - Spark은 데이터를 메모리에 캐싱하여 빠른 데이터 처리를 가능케 합니다.
       - 메모리 부족 시에는 디스크를 사용하므로 MapReduce에 비해 성능이 향상될 수 있습니다.

  2.  **MapReduce는 디스크 기반:**
       - MapReduce는 대부분의 데이터를 디스크에 저장하고 읽어오기 때문에 IO 오버헤드가 발생할 수 있습니다.
       - 디스크를 주로 활용하기 때문에 상대적으로 처리 속도가 느릴 수 있습니다.

  3.  **MapReduce는 하둡(YARN)위에서만 동작:**
       - MapReduce는 주로 하둡 클러스터의 YARN 위에서 동작합니다.
       - Spark은 하둡의 YARN 외에도 Mesos, Kubernetes와 같은 다른 분산 컴퓨팅 환경에서도 실행될 수 있습니다.

  4.  **Spark은 판다스 데이터프레임과 개념적으로 동일한 데이터 구조 지원:**
       - Spark는 DataFrame API를 통해 데이터를 처리하며, 이는 판다스 데이터프레임과 유사한 구조를 가지고 있습니다.
       - MapReduce는 키-값 쌍의 형태로 데이터를 처리하는데 비해, Spark은 풍부한 데이터 구조를 지원하여 다양한 데이터 처리 작업을 수행할 수 있습니다.

  5.  **Spark은 다양한 방식의 컴퓨팅을 지원:**
       - Spark은 배치 데이터 처리, 스트리밍 데이터 처리, SQL 쿼리, 머신 러닝, 그래프 분석 등 다양한 컴퓨팅 모델을지원
       - MapReduce는 주로 대용량 데이터의 배치 처리에 적합한데 반해, Spark은 다양한 작업에 유연하게 대응

Spark 프로그래밍 API

  • **RDD (Resilient Distributed Dataset):**
    - **로우레벨 프로그래밍 API:** RDD는 Apache Spark의 핵심 데이터 구조로, 분산된 클러스터에서 데이터를 나타냅니다. 이는 높은 수준의 추상화를 제공하지 않고, 개발자에게 세밀한 제어를 허용합니다.
    - **세밀한 제어 가능:** RDD를 사용하면 데이터의 파티션을 직접 제어하고, 변환 및 액션을 수행할 수 있습니다. 하지만 이로 인해 코딩의 복잡도가 증가할 수 있습니다.

  • **DataFrame & Dataset:**
    - rdd 대비 하이레벨 프로그래밍 API인 DataFrame 및 Dataset은 RDD보다 더 높은 수준의 추상화를 제공하는 API로, 구조화된 데이터를 처리하는 데 특화되어 있습니다.
    - **구조화 데이터 조작:** 판다스의 데이터프레임과 유사한 인터페이스를 제공하며, SQL과 유사한 쿼리를 사용하여 데이터를 처리할 수 있습니다.
    - **Spark SQL 사용 추세:** 많은 사용자들이 구조화된 데이터를 다루기 위해 Spark SQL을 사용하며, DataFrame/Dataset API를 선호합니다.
    - **DataFrame/Dataset이 필요한 경우는?
      - ML 피쳐 엔지니어링이나 Spark ML을 사용하는 경우에는 DataFrame/Dataset이 더 편리할 수 있습니다.
      - SQL로는 수행하기 어려운 복잡한 데이터 조작이 필요한 경우에도 유용합니다.

    최근에는 DataFrame 및 Dataset을 활용한 데이터 처리가 증가하고 있으며, 세밀한 제어가 필요한 경우에는 여전히 RDD를 사용할 수 있습니다.

Spark SQL

  • 구조화된 데이터 처리를 SQL로 처리:** Spark SQL은 구조화된 데이터를 다루기 위한 모듈로, SQL 쿼리를 사용하여 데이터를 처리할 수 있습니다.

  • 데이터프레임을 SQL로 처리 가능:
      - 데이터프레임은 테이블처럼 SQL로 처리할 수 있습니다.
      - 판다스와 비슷한 기능을 제공하여 데이터를 SQL 쿼리로 조작할 수 있습니다.

  • Hive 쿼리보다 최대 100배까지 빠른 성능을 보장:
      - Spark SQL은 Hive 쿼리에 비해 최대 100배까지 빠른 성능을 제공한다고 알려져 있습니다.
      - Hive가 디스크에서 데이터를 읽어오는 방식에 비해, Spark는 메모리에서 데이터를 읽어오는 방식을 채택하여 성능 향상을 이루었습니다.

  • 실제로는 그렇지 않음:
      - 사실은 Hive도 최근 버전에서는 메모리를 사용하여 성능을 향상시키고 있습니다.
      - Spark는 기본적으로 메모리를 활용하지만, 큰 데이터셋의 경우 디스크를 활용하기도 합니다.
      - Presto와 같은 다른 분산 쿼리 엔진들도 메모리와 디스크를 적절히 조합하여 성능을 극대화하려고 합니다.
      - 세 방식 모두 비슷한 방식, 비슷한 기능으로 가고 있음

 Spark ML

  • 머신러닝 관련 다양한 알고리즘, 유틸리티로 구성된 라이브러리:**
      - Spark ML은 Spark의 머신러닝 라이브러리로, 다양한 머신러닝 알고리즘과 유틸리티로 구성되어 있습니다.
      - Classification, Regression, Clustering, Collaborative Filtering 등 다양한 머신러닝 작업을 지원합니다.

  • 전체 리스트는 링크 참고. 딥러닝 지원은 미약:**
      - Spark ML의 머신러닝 알고리즘 및 기능은 계속해서 업데이트되고 있습니다.
      - 딥러닝 지원은 현재로서는 미약하지만, 라이브러리의 발전에 따라 향후 지원이 강화될 수 있습니다.

  • RDD 기반과 데이터프레임 기반의 두 버전이 존재:**
      - `spark.mllib`와 `spark.ml` 두 가지 버전이 존재합니다.
      - `spark.mllib`는 RDD 기반에서 동작하는 이전 버전의 머신러닝 라이브러리로 더 이상 업데이트되지 않음
      - 이제 `spark.ml`이 대세. 데이터프레임 기반에서 동작하며, 최신 기능과 개선된 API를 제공. 
      - `import pyspark.ml`를 사용하여 `spark.ml` 모듈을 가져와야 한다.

    Spark ML의 데이터프레임 기반 버전은 더 간편하고 효율적인 API를 제공하며, RDD 기반 버전은 호환성 유지를 위해 여전히 사용 가능하지만, 더 이상의 업데이트가 이루어지지 않습니다.

 

Spark ML의 장점

  1. **원스톱 ML 프레임웍:**
       - **데이터프레임과 SparkSQL을 이용한 전처리:** Spark ML은 데이터프레임과 SparkSQL을 이용하여 데이터의 전처리를 편리하게 수행할 수 있습니다. 구조화된 데이터를 다루는 강력한 도구들을 제공합니다.
       - **Spark ML을 이용한 모델 빌딩:** 머신러닝 모델의 빌딩을 위해 다양한 알고리즘과 기능을 제공하며, 간단한 API를 통해 사용자 친화적으로 모델을 개발할 수 있습니다.
       - **ML Pipeline을 통한 모델 빌딩 자동화:** ML Pipeline은 여러 단계의 데이터 처리 및 모델 학습 단계를 효과적으로 관리하고 자동화하는데 사용됩니다.

  2.  **MLflow로 모델 관리하고 서빙 (MLOps):**
       - **MLflow를 통한 모델 관리:** MLflow는 모델의 라이프사이클을 관리하고 추적할 수 있는 플랫폼을 제공합니다. 실험 및 모델 버전 관리를 손쉽게 수행할 수 있습니다.
       - **서빙 (MLOps):** MLflow를 사용하여 모델 서빙을 구축하고 관리할 수 있습니다. 이는 MLOps (Machine Learning Operations)의 한 부분으로 모델을 프로덕션 환경에 효과적으로 배포하고 관리하는 것을 의미합니다.

  3. **대용량 데이터도 처리 가능:**
       - Spark는 대용량의 데이터를 효과적으로 처리할 수 있는 분산 컴퓨팅 프레임워크이며, Spark ML은 이를 기반으로 머신러닝 모델을 처리할 수 있습니다.
       - 클러스터 환경에서 병렬 처리를 통해 대용량의 데이터를 효율적으로 다룰 수 있으며, 성능과 확장성 면에서 강력한 기능을 제공합니다.

Spark 데이터 시스템 사용 예

  1. 대용량 비구조화된 데이터 처리 (ETL 혹은 ELT):**
       - 시나리오:** 대용량의 비구조화된 데이터를 추출(Extract), 변환(Transform), 적재(Load)하는 ETL 또는 ELT 프로세스를 구축할 때 사용될 수 있습니다.
       - 예시:** 로그 데이터, 웹 클릭 데이터, 센서 데이터 등의 비구조화된 데이터를 Spark를 사용하여 처리하고, 구조화된 형태로 변환하여 데이터 웨어하우스에 적재합니다.
  2. ML 모델에 사용되는 대용량 피쳐 처리 (배치/스트림):**
       - 시나리오:** 머신러닝 모델의 학습을 위해 대용량의 피쳐 데이터를 처리하고 추출하는 작업이 필요할 때 사용됨
       - 예시:** 사용자 행동 데이터, 이미지 데이터, 텍스트 데이터 등 다양한 형태의 데이터를 Spark를 사용하여 전처리하고 모델에 사용 가능한 형태로 변환합니다.(사용자가 들어오면 그 사용자의 데이터로 분석해 추천 강의 띄움)
  3. Spark ML을 이용한 대용량 훈련 데이터 모델 학습:**
       - 시나리오:** 대규모 데이터셋을 사용하여 머신러닝 모델을 훈련하고 학습시키는 작업을 수행할 때 사용될 수 있다.
       - 예시:** Spark ML의 기능을 활용하여 분산 환경에서 대용량의 데이터로부터 머신러닝 모델을 학습시키는 작업을 수행합니다. 클러스터 환경에서 분산 처리를 통해 높은 확장성을 제공합니다.

    이러한 예시들은 Spark를 사용하여 다양한 데이터 처리 및 분석 작업을 수행하는데 활용할 수 있는 일부 시나리오입니다. Spark는 배치 처리, 스트림 처리, 머신러닝 등의 다양한 기능을 통합하여 대용량의 데이터를 효과적으로 다루는 데 도움을 줍니다.

'하둡,spark' 카테고리의 다른 글

spark 데이터 처리  (0) 2024.01.18
Spark 프로그램 실행 환경  (0) 2024.01.18
맵리듀스(MapReduce) 문제점  (0) 2024.01.18
하둡 설치 +맵리듀스(wordcount) 실습  (0) 2024.01.18
MapReduce(맵리듀스) 프로그래밍  (0) 2024.01.17

+ Recent posts