spark 등장
- 버클리 대학의 AMPLab에서 아파치 오픈소스 프로젝트로 2013년 시작
- 나중에 Databricks라는 스타트업 창업
- 하둡의 뒤를 잇는 2세대 빅데이터 기술
1) YARN등을 분산환경으로 사용
2) Scala로 작성됨 - 빅데이터 처리 관련 *다양한* 기능 제공
spark 3.0의 구성
- **Spark Core:**
- Apache Spark의 핵심 엔진으로, 분산 데이터 처리의 기본 기능을 담당합니다.
- 클러스터에서 데이터를 로딩하고, 분산 데이터셋을 생성하며, 다양한 연산 및 변환을 수행하는 데 사용됩니다. - **Spark SQL:**
- 구조화된 데이터 처리를 위한 모듈로, SQL 쿼리를 사용하여 데이터에 대한 쿼리 및 분석을 수행합니다.
- Hive 쿼리 및 데이터 프레임 API를 지원하여 SQL을 사용하여 대화식으로 데이터를 다룰 수 있습니다. - **Spark ML / Spark MLlib:**
- 머신러닝을 위한 라이브러리로, Spark MLlib은 고전적인 머신러닝 알고리즘과 기계 학습 파이프라인을 제공
- Spark ML은 DataFrame API를 기반으로 한 머신러닝 라이브러리로, 풍부한 기능을 제공하며 머신러닝 모델의 구축과 평가를 지원합니다. - **Spark Streaming:**
- 실시간 데이터 스트림 처리를 지원하는 모듈로, 초당 수천 개의 이벤트를 처리할 수 있습니다.
- 스트리밍 데이터에 대한 윈도우 기반의 연산 및 처리를 제공하여 실시간으로 결과를 생성합니다. - **Spark GraphX:**
- 그래프 처리를 위한 라이브러리로, 복잡한 그래프 알고리즘을 처리할 수 있습니다.
- 그래프 구조를 다루며, 그래프 상의 연산 및 알고리즘을 제공하여 소셜 네트워크 분석 등 다양한 그래프 기반 작업

Spark vs. MapReduce
- **Spark은 기본적으로 메모리 기반:**
- Spark은 데이터를 메모리에 캐싱하여 빠른 데이터 처리를 가능케 합니다.
- 메모리 부족 시에는 디스크를 사용하므로 MapReduce에 비해 성능이 향상될 수 있습니다. - **MapReduce는 디스크 기반:**
- MapReduce는 대부분의 데이터를 디스크에 저장하고 읽어오기 때문에 IO 오버헤드가 발생할 수 있습니다.
- 디스크를 주로 활용하기 때문에 상대적으로 처리 속도가 느릴 수 있습니다. - **MapReduce는 하둡(YARN)위에서만 동작:**
- MapReduce는 주로 하둡 클러스터의 YARN 위에서 동작합니다.
- Spark은 하둡의 YARN 외에도 Mesos, Kubernetes와 같은 다른 분산 컴퓨팅 환경에서도 실행될 수 있습니다. - **Spark은 판다스 데이터프레임과 개념적으로 동일한 데이터 구조 지원:**
- Spark는 DataFrame API를 통해 데이터를 처리하며, 이는 판다스 데이터프레임과 유사한 구조를 가지고 있습니다.
- MapReduce는 키-값 쌍의 형태로 데이터를 처리하는데 비해, Spark은 풍부한 데이터 구조를 지원하여 다양한 데이터 처리 작업을 수행할 수 있습니다. - **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의 장점
- **원스톱 ML 프레임웍:**
- **데이터프레임과 SparkSQL을 이용한 전처리:** Spark ML은 데이터프레임과 SparkSQL을 이용하여 데이터의 전처리를 편리하게 수행할 수 있습니다. 구조화된 데이터를 다루는 강력한 도구들을 제공합니다.
- **Spark ML을 이용한 모델 빌딩:** 머신러닝 모델의 빌딩을 위해 다양한 알고리즘과 기능을 제공하며, 간단한 API를 통해 사용자 친화적으로 모델을 개발할 수 있습니다.
- **ML Pipeline을 통한 모델 빌딩 자동화:** ML Pipeline은 여러 단계의 데이터 처리 및 모델 학습 단계를 효과적으로 관리하고 자동화하는데 사용됩니다. - **MLflow로 모델 관리하고 서빙 (MLOps):**
- **MLflow를 통한 모델 관리:** MLflow는 모델의 라이프사이클을 관리하고 추적할 수 있는 플랫폼을 제공합니다. 실험 및 모델 버전 관리를 손쉽게 수행할 수 있습니다.
- **서빙 (MLOps):** MLflow를 사용하여 모델 서빙을 구축하고 관리할 수 있습니다. 이는 MLOps (Machine Learning Operations)의 한 부분으로 모델을 프로덕션 환경에 효과적으로 배포하고 관리하는 것을 의미합니다. - **대용량 데이터도 처리 가능:**
- Spark는 대용량의 데이터를 효과적으로 처리할 수 있는 분산 컴퓨팅 프레임워크이며, Spark ML은 이를 기반으로 머신러닝 모델을 처리할 수 있습니다.
- 클러스터 환경에서 병렬 처리를 통해 대용량의 데이터를 효율적으로 다룰 수 있으며, 성능과 확장성 면에서 강력한 기능을 제공합니다.
Spark 데이터 시스템 사용 예
- 대용량 비구조화된 데이터 처리 (ETL 혹은 ELT):**
- 시나리오:** 대용량의 비구조화된 데이터를 추출(Extract), 변환(Transform), 적재(Load)하는 ETL 또는 ELT 프로세스를 구축할 때 사용될 수 있습니다.
- 예시:** 로그 데이터, 웹 클릭 데이터, 센서 데이터 등의 비구조화된 데이터를 Spark를 사용하여 처리하고, 구조화된 형태로 변환하여 데이터 웨어하우스에 적재합니다. - ML 모델에 사용되는 대용량 피쳐 처리 (배치/스트림):**
- 시나리오:** 머신러닝 모델의 학습을 위해 대용량의 피쳐 데이터를 처리하고 추출하는 작업이 필요할 때 사용됨
- 예시:** 사용자 행동 데이터, 이미지 데이터, 텍스트 데이터 등 다양한 형태의 데이터를 Spark를 사용하여 전처리하고 모델에 사용 가능한 형태로 변환합니다.(사용자가 들어오면 그 사용자의 데이터로 분석해 추천 강의 띄움) - 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 |