
아파치 스파크란 무엇입니까?
Spark 제작자가 설립한 Databricks는 자신의 저서 Gentle Intro to Apache Spark 에서 최고의 Apache Spark 기능을 정리했습니다.
“Apache Spark는 컴퓨터 클러스터의 데이터 병렬 처리를 위한 라이브러리 세트를 갖춘 완전한 컴퓨팅 시스템입니다. Spark는 현재 이러한 문제를 해결하기 위해 가장 활발하게 개발된 오픈 소스 도구로 간주되므로 빅 데이터에 관심이 있는 모든 개발자 또는 연구 전문가에게 유용한 도구 입니다 . Spark는 널리 사용되는 프로그래밍 언어(Python, Java, Scala 및 R)는 물론 SQL부터 스트리밍, 기계 학습에 이르는 작업을 위한 라이브러리를 지원하며 노트북이나 1,000개 서버 클러스터에서 실행할 수 있습니다.덕분에 Apache Spark는 독립적인 작업을 시작하고 믿을 수 없을 만큼 큰 규모의 빅데이터 처리에 유입되는 편리한 시스템입니다. ”
빅데이터란 무엇인가?
Gartner가 제시한 빅 데이터의 대중적인 정의를 살펴보겠습니다. 이는 Spark가 실시간 빅 데이터 작업과 관련된 여러 가지 흥미로운 문제를 어떻게 해결하는지 이해하는 데 도움이 됩니다.
"빅 데이터는 대용량, 고속 및/또는 다양성이 특징이며 비용 효율적이고 혁신적인 형태의 정보 처리가 필요하여 이해도가 향상되고 의사 결정이 개선되며 프로세스 자동화가 이루어지는 정보 자산입니다."

복잡한 빅데이터의 세계
참고: 핵심 내용은 빅 데이터에서 '빅'이라는 단어가 단지 양만을 의미하는 것이 아니라는 점입니다. 많은 양의 데이터를 받을 뿐만 아니라 실시간으로 매우 빠르게, 다양하고 복잡한 형식으로, 다양한 소스로부터 제공됩니다. 여기서 빅데이터의 3V인 볼륨(Volume), 속도(Velocity), 다양성(Variety)이 나옵니다.
스파크를 사용하는 이유
이 문제에 대한 본인의 예비 연구를 바탕으로 나는 Apache Spark가 빅 데이터를 효율적으로 작업하는 데 있어 선두주자가 되는 세 가지 주요 구성 요소를 가지고 있다는 결론을 내렸습니다. 이는 많은 대기업이 구조화되지 않은 대규모 데이터 세트로 작업하여 Apache Spark가 기술 스택에 포함됩니다.
- Spark는 빅데이터를 위한 올인원 솔루션입니다 . “Spark는 변하지 않는 API 세트와 동일한 컴퓨팅 도구를 사용하여 간단한 데이터 로딩 및 SQL 쿼리부터 기계 학습 및 스트리밍 컴퓨팅에 이르기까지 광범위한 데이터 분석 작업을 해결하도록 설계되었습니다. 이 소프트웨어 멀티태스킹의 주요 통찰력은 Jupyter Notebook과 같은 도구의 대화형 분석이든 애플리케이션 릴리스를 위한 간단한 프로그래밍이든 실제 데이터 분석 작업에는 다양한 유형의 처리 및 라이브러리의 조합이 필요한 경향이 있다는 것입니다. Spark의 전체적인 특성 덕분에 이러한 작업이 더 쉽고 효율적으로 이루어집니다.” ( Databricks 책에서 발췌)). 예를 들어 SQL 쿼리를 사용하여 데이터를 로드한 다음 Spark ML 라이브러리를 사용하여 기계 학습 모델을 평가하는 경우 엔진은 이러한 모든 단계를 단일 데이터 전달로 결합할 수 있습니다. 또한 데이터 과학자는 모델링 시 통합 라이브러리 세트(예: Python 또는 R)를 사용하여 이점을 얻을 수 있고, 웹 개발자는 Node.js 또는 Django와 같은 통합 프레임워크의 이점을 누릴 수 있습니다.
- Spark는 효율적인 컴퓨팅을 위해 머신 코어를 최적화합니다.- “즉, Spark는 스토리지 시스템에서 데이터 로드를 관리하고 이에 대한 계산을 수행할 뿐이지 그 자체가 최종 영구 스토리지는 아닙니다. Azure Storage 및 Amazon S3와 같은 클라우드 기반 시스템, Apache Hadoop과 같은 분산 파일 시스템, Apache Cassandra와 같은 주요 스토리지 공간, Apache Kafka와 같은 메시지 시퀀스를 포함하여 다양한 영구 스토리지 시스템을 처리할 때 Spark를 사용할 수 있습니다. 그러나 Spark는 자체적으로 데이터를 영구적으로 저장하지 않으며 이러한 시스템도 지원하지 않습니다. 여기서 가장 큰 이유는 대부분의 데이터가 이미 여러 스토리지 시스템에 있기 때문입니다. 데이터를 이동하는 데 비용이 많이 들기 때문에 Spark는 데이터가 어디에 있든 계산 작업으로만 데이터를 처리합니다.” (책에서데이터브릭스 ). Sparks는 컴퓨팅에 중점을 두어 Apache Hadoop과 같은 이전의 빅 데이터 소프트웨어 플랫폼과 차별화됩니다. 이 소프트웨어에는 스토리지 시스템(HFS, Defining Spark 4 제품 서버 클러스터의 저비용 스토리지용으로 제작됨)과 컴퓨팅 시스템(MapReduce)이 모두 포함되어 있습니다. 그들은 서로 아주 잘 통합됩니다. 그러나 이는 다른 부분 없이 한 부분만으로 구현하기 어렵습니다. 더 중요한 것은 다른 곳에 저장된 데이터에 액세스하는 애플리케이션을 작성하는 것입니다. Spark는 현재 Hadoop 아키텍처가 적합하지 않은 환경에서도 널리 사용되고 있습니다. 예를 들어 퍼블릭 클라우드(처리와 별도로 스토리지를 구매할 수 있음) 또는 스트리밍 애플리케이션에 있습니다.
- Spark 라이브러리는 매우 광범위한 기능을 제공합니다 . 오늘날 Spark 표준 라이브러리는 이 오픈 소스 프로젝트의 주요 부분입니다. Spark 코어 자체는 출시 이후 크게 변경되지 않았지만 라이브러리는 더욱 많은 기능을 추가하도록 성장했습니다. 그래서 Spark는 다기능 데이터 분석 도구로 발전했습니다. Spark에는 SQL 및 구조화된 데이터(Spark SQL), 기계 학습(MLlib), 스트림 처리(Spark Streaming 및 최신 구조적 스트리밍) 및 그래프 분석(GraphX)을 위한 라이브러리가 있습니다. 이러한 라이브러리 외에도 커넥터와 함께 작동하는 라이브러리부터 다양한 스토리지 시스템 및 기계 학습 알고리즘을 위한 옵션에 이르기까지 수백 개의 공개 타사 라이브러리가 있습니다.
Apache Spark 또는 Hadoop MapReduce… 어느 것이 귀하에게 더 좋습니까?
간단히 대답하자면 선택은 당연히 비즈니스의 특정 요구 사항에 따라 달라집니다. 내 연구를 요약하면 10개 사례 중 7개 사례에서 Spark가 선택된다고 말씀드리겠습니다. 대규모 데이터 세트의 선형 처리는 Hadoop MapReduce의 장점입니다. Spark는 빠른 성능, 반복 처리, 실시간 분석, 그래프 처리, 기계 학습으로 유명 하지만 그게 전부는 아닙니다.
좋은 소식은 Spark가 Hadoop 생태계와 완벽하게 호환되며 HDFS(Hadoop 분산 파일 시스템) 는 물론 Apache Hive 및 기타 유사한 시스템과도 잘 작동한다는 것입니다. 따라서 Spark가 메모리에 보관하기에는 데이터 볼륨이 너무 큰 경우 Hadoop은 파일 시스템 기능을 사용하여 이러한 어려움을 극복하는 데 도움을 줄 수 있습니다. 다음은 이 두 시스템이 어떻게 함께 작동할 수 있는지에 대한 예입니다.

https://www.quora.com/What-is-the-difference-between-Hadoop-and-Spark
이 이미지는 Spark가 Hadoop의 장점인 데이터 읽기 및 저장을 위한 HDFS, 추가 처리를 위한 MapReduce , 리소스 할당을 위한 YARN을 어떻게 사용하는지 명확하게 보여줍니다.
다음으로 Hadoop MapReduce에 비해 Spark의 많은 이점에 초점을 맞추려고 합니다. 이를 위해 간략하고 피상적인 비교를 해보겠습니다.

출처: https://data-flair.training/blogs/spark-vs-hadoop-mapreduce/
속도
- Apache Spark 는 빛의 속도로 실행되는 컴퓨팅 도구입니다. Spark는 디스크 읽기-쓰기를 줄이고 중간 데이터를 메모리에 저장함으로써 Hadoop보다 메모리에서 100배, 디스크에서 10배 빠르게 애플리케이션을 실행합니다.
- Hadoop MapReduce - MapReduce는 디스크를 읽고 쓰므로 처리 속도와 전반적인 효율성이 저하됩니다.
사용하기 쉬운
- Apache Spark - 많은 Spark 라이브러리를 사용 하면 RDD(Resilient Distributed Dataset / 탄력적 분산 데이터 세트 ) 를 사용하여 다수의 기본 상위 수준 작업을 쉽게 수행할 수 있습니다.
- Hadoop - MapReduce에서 개발자는 각 작업을 수동으로 작성해야 하며 이는 복잡한 프로젝트를 확장할 때 프로세스를 복잡하게 만듭니다.
대규모 데이터 세트 처리
- Apache Spark - Spark는 대부분의 데이터를 디스크가 아닌 메모리에 저장하여 속도와 계산 효율성에 최적화되어 있기 때문에 데이터 크기가 너무 커져 RAM이 부족해지는 경우 Hadoop MapReduce보다 성능이 떨어질 수 있다는 문제가 있습니다.
- Hadoop —Hadoop MapReduce를 사용하면 대규모 데이터 세트를 병렬로 처리할 수 있습니다. 이는 서로 다른 데이터 노드에서 각각을 개별적으로 처리하기 위해 큰 체인을 작은 조각으로 나눕니다. 결과 데이터세트에 RAM에서 사용할 수 있는 것보다 더 많은 것이 필요한 경우 Hadoop MapReduce가 Spark보다 더 잘 작동할 수 있습니다. 따라서 처리 속도가 중요하지 않고 밤에 작업을 해결하여 아침에 결과를 준비할 수 있는 경우에는 Hadoop을 선택해야 합니다 .
기능성
Apache Spark는 이 범주에서 꾸준히 승리하고 있습니다. 아래에는 Spark가 성능 측면에서 Hadoop을 능가하는 최고의 빅 데이터 분석 작업이 나열되어 있습니다.
- 반복 처리. 문제로 인해 데이터를 계속해서 처리해야 하는 경우 Spark는 Hadoop MapReduce를 무력화합니다. Spark RDD는 메모리에서 많은 작업을 활성화하는 반면 Hadoop MapReduce는 중간 결과를 디스크에 기록해야 합니다.
- 거의 실시간으로 처리됩니다. 비즈니스에 즉각적인 통찰력이 필요한 경우 Spark와 해당 인메모리 처리를 사용하는 것이 좋습니다.
- 그래프 처리. Spark의 컴퓨팅 모델은 그래프 처리에 자주 필요한 반복 계산에 적합합니다. 그리고 Apache Spark에는 그래프 계산을 위한 API인 GraphX가 있습니다.
기계 학습 . Spark에는 내장형 기계 학습 라이브러리인 MLlib가 있지만 Hadoop에는 동일한 기능을 위해 타사가 필요합니다. MLlib에는 메모리에도 구현되는 "기본 제공" 알고리즘(추가 소프트웨어, 드라이버 등을 설치할 필요 없이 장치를 상자에서 꺼낸 직후에 장치를 연결하는 기능)이 있습니다.
- 데이터 세트 병합. 속도 덕분에 Spark는 모든 조합을 더 빠르게 생성할 수 있는 반면, Hadoop은 많은 순서 섞기와 정렬이 필요한 매우 큰 데이터 세트를 병합하는 데 탁월합니다.
다음은 Spark의 다양한 기능과 다른 빅 데이터 도구 및 프로그래밍 언어와의 호환성을 시각적으로 요약한 것입니다.

출처: https://www.quora.com/Is-Spark-a-comComponent-of-the-Hadoop-ecosystem
- Spark Core는 대규모 병렬 및 분산 데이터 처리를 위한 기본 도구입니다. 또한 커널 위에 구축된 추가 라이브러리도 있습니다. 이를 통해 스트리밍, SQL 및 기계 학습에 대한 워크로드를 분리할 수 있습니다. 메모리 관리 및 오류 복구, 클러스터 작업의 예약, 배포 및 모니터링은 물론 스토리지 시스템과의 상호 작용을 담당합니다.
- 클러스터 관리 - 클러스터 제어는 문제 해결에 필요한 클러스터 리소스를 확보하는 데 사용됩니다. Spark Core는 Hadoop YARN, Apache Mesos, Amazon EC2 및 Spark의 내장 클러스터 관리자를 포함한 다양한 클러스터 컨트롤러에서 실행됩니다. 이 서비스는 Spark 애플리케이션 간의 리소스 배포를 제어합니다. 또한 Spark는 HDFS, Cassandra, HBase, Hive, Alluxio 및 모든 Hadoop 데이터 저장소의 데이터에 액세스할 수 있습니다.
- Spark Streaming은 스트리밍 데이터를 실시간으로 처리하는 데 필요한 Spark의 구성 요소입니다.
- Spark SQL은 Spark의 새로운 모듈입니다. Spark의 함수형 프로그래밍 API와 관계형 처리를 통합합니다. SQL 및 Hive 쿼리 언어를 통해 데이터 검색을 지원합니다. Spark SQL의 DataFrame 및 Dataset API는 구조화된 데이터에 대해 최고 수준의 추상화를 제공합니다.
- GraphX - 그래프 및 그래프 병렬 컴퓨팅을 위한 Spark API입니다. 따라서 탄력적인 분산 속성 그래프를 갖춘 Spark RDD의 확장입니다.
- MLlib (기계 학습): MLlib는 기계 학습 라이브러리를 나타냅니다. Apache Spark에서 기계 학습을 구현하는 데 필요합니다.
결론
빅 데이터가 대량으로 채택되고 컴퓨팅 성능이 기하급수적으로 증가함에 따라 Apache Spark 및 기타 빅 데이터 분석 소프트웨어와 같은 도구는 곧 데이터 과학자에게 없어서는 안될 도구가 될 것이며 빠르게 빅 데이터 분석을 구현하고 복잡한 비즈니스를 해결하기 위한 업계 표준이 될 것입니다. 실시간으로 문제가 발생합니다.
이러한 모든 외부 기능 뒤에 있는 기술에 대해 자세히 알아보고 싶다면 Databricks 책 A Gentle Intro to Apache Spark 또는 Big Data Analytics on Apache Spark를 확인하세요.
'Data Engineer' 카테고리의 다른 글
데이터 웨어하우스(Data Warehouse)와 데이터 레이크(Data Lake)의 차이점 (0) | 2023.09.15 |
---|---|
정형 데이터 vs 반정형 데이터 vs 비정형 데이터 (0) | 2023.09.15 |
카프카(Kafka)란? (0) | 2023.09.07 |
NoSQL이란? (0) | 2023.09.06 |
Docker CLI 명령어 (0) | 2023.08.17 |