본문 바로가기
데이터 엔지니어링

MapReduce vs Spark | 맵리듀스와 스파크의 차이점

by 내기록 2022. 8. 13.
반응형

 

Traditional MapReduce (left) vs. Tez/Impala/Spark optimized engines (right) (Source: hortonworks.com)

 

 


위 그림에서 볼 수 있듯이 기존 MapReduce 엔진(왼쪽)에 비해 최신 처리 프레임워크(Tez, Impala 및 Spark)의 주요 특징은 HDFS에 중간 결과를 쓰지 않고 실행 그래프를 최적화한다는 것입니다. 또 실행 그래프 전체에 걸쳐 로컬 노드의 메모리에서 데이터를 처리/캐싱합니다..

 

실제로 Hadoop MapReduce와 Spark의 주요 차이점은 처리 방식에 있습니다. Spark는 메모리 내에서 처리할 수 있지만 Hadoop MapReduce는 디스크에서 읽고 써야 합니다. 이에 따라 처리 속도가 크게 달라지며 Spark가 최대 100배 더 빠를 수 있습니다. 하지만 Hadoop MapReduce는 Spark보다 훨씬 큰 데이터셋을 작업할 수 있습니다.

 

* 참고: Tez
Apache Tez는 HDFS에 대한 중간 쓰기를 방지하기 위해 복잡한 실행 그래프를 단일 작업으로 최적화하는 Apache Yarn을 기반으로 하는 더 빠른 MapReduce 엔진입니다. Hortonworks Hadoop 배포에서 Apache Pig 및 Apache Hive(Hadoop을 기반으로 하는 대규모 데이터 웨어하우스 솔루션)를 지원하는 기본 실행 엔진입니다.

 

 

Spark vs MapReduce : Performance

Hadoop MapReduce는 디스크에서 작업을 수행하기 때문에 상대적으로 느리고 데이터에서 거의 실시간 분석을 제공할 수 없습니다.

반면 Spark는 데이터를 디스크 I/O가 아닌 메모리 내로 변환하여 처리 시간을 단축하도록 설계되었습니다. Spark는 실제로 메모리 내에서 100배, 디스크에서 10배 더 빠르며, MapReduce와 달리 실시간 처리를 처리할 수 있습니다.

Hadoop MapReduce는 모든 Map 또는 Reduce 작업 후에 데이터를 디스크에 다시 저장해야 합니다.

Spark가 효과적으로 작동하려면 많은 RAM이 필요합니다. Spark는 프로세스를 메모리에 저장하고 다른 지침이 제공되지 않으면 메모리에 유지합니다. Spark를 다른 리소스 요구 서비스와 함께 사용하면 성능이 현저히 저하될 수 있습니다. 또한 데이터 소스가 너무 커서 메모리에 완전히 들어갈 수 없는 경우 Spark의 성능이 저하됩니다.

MapReduce는 데이터 캐싱을 제공하지 않지만 다른 서비스는 완료되는 즉시 작업을 종료하므로 성능 저하가 거의 없다고 볼 수 있습니다.

MapReduce와 Spark는 모두 성능 면에서 이점이 있습니다. Spark는 보유한 메모리 공간에 데이터를 수용할 수 있거나 전용 클러스터가 있는 경우 가장 적합한 선택입니다. 반면에 MapReduce는 메모리에 수용 불가능한 대용량 데이터이며 다른 서비스와 조정하기 위한 데이터 프레임워크가 필요한 경우 더 좋은 선택지가 될 수 있습니다.

 

Spark vs MapReduce : Cost

Hadoop은 오픈 소스 소프트웨어로 실행 비용이 상대적으로 저렴하며, 더 많은 저장 공간을 필요로 하는데 비용 효율적인 상품인 하드 디스크를 주로 사용합니다. 반면, Spark는 더 많은 RAM(램)을 필요로 하기 때문에, Spark 클러스터를 구축하는 데 드는 비용이 더 높을 수 있습니다.

 

최적의 성능을 위해선 메모리 공간에 데이터를 수용할 수 있어야 하기 때문에 Spark 클러스터의 메모리는 최소 처리 데이터의 양만큼 확보되어야 합니다. 따라서 매우 많은 양의 데이터를 처리해야 하는 경우 하드 디스크 공간이 메모리 공간보다 훨씬 저렴하기 때문에 Hadoop이 더 저렴한 옵션이 될 수 있습니다.

반면 Spark와 MapReduce의 "성능"을 고려했을 때, Spark가 더 저렴한 옵션이 될 수 있습니다. 동일한 데이터라는 조건에서 Spark는  작업을 훨씬 더 빠르게 수행하기 때문에 컴퓨팅 성능이 사용량에 따라 지불되는 클라우드에서 더 적은 리소스를 사용하기 때문에 장기적으로 봤을 때 비용 절감이 가능합니다.

 

Fault Tolerance

MapReduce는 엄밀히 말하면 영구 저장소를 사용하는 디스크 기반입니다. 둘 다 어느 정도의 처리 실패를 제공하지만 Spark의 내결함성은 주로 RDD(Resilient Distributed Dataset, 복원력 있는 분산 데이터셋) 작업을 기반으로 합니다. RDD는 Apache Spark의 빌딩 블록입니다. Hadoop은 여러 노드에 걸쳐 데이터를 복제하도록 설계되었기 때문에 자연스럽게 내결함성이 있습니다.

MapReduce는 RAM 대신 하드 디스크를 사용하기 때문에 Spark보다 장애 후 복구에 더 적합합니다. Spark가 데이터 처리 활동 중 충돌 후 다시 온라인 상태가 되면 처음부터 다시 시작해야 하는데, 이 경우 더 많은 시간이 필요합니다.

MapReduce는 작업을 수행하는 동안 실패하면 다시 시작할 때 중단된 위치에서 다시 시작됩니다. MapReduce는 하드디스크를 기반으로 하기 때문에 작업 중간에 실패해도 제자리를 유지할 수 있습니다.
Spark와 Hadoop MapReduce는 모두 높은 내결함성을 갖지만 Hadoop MapReduce가 조금 더 높은 안정성을 가집니다.

 

MapReduce를 사용하면 좋은 상황

 

거대한 데이터셋 선형 처리 Linear processing of huge data sets

Hadoop MapReduce를 사용하면 방대한 양의 데이터를 병렬로 처리할 수 있습니다. 큰 chunk를 더 작은 chunk로 나누어 여러 데이터 노드에서 각각 처리하고 그 결과를 자동으로 수집하여 단일 결과를 반환합니다.

 

즉각적인 결과가 필요하지 않는 경우 경제적인 솔루션

Hadoop 팀은 처리 속도가 중요하지 않은 경우 MapReduce를 좋은 솔루션으로 간주합니다. 예를 들어, 야간에 데이터 처리가 가능하다면 Hadoop MapReduce 사용을 고려하는 것이 좋습니다.

 

Spark를 사용하면 좋은 상황

 

빠른 데이터 처리

Spark는 인메모리 프로세싱을 사용하기 때문에 Hadoop MapReduce보다 빠르게 데이터를 처리할 수 있습니다. 메모리(RAM) 내에서 데이터를 처리하면 MapReduce에 비해 최대 100배 더 빠를 수 있으며, 디스크 기반 스토리지에서 데이터를 처리하면 인메모리 처리만큼 빠르지는 않지만, 최대 10배 더 빠른 성능을 낼 수 있습니다.


반복 처리

반복 처리 과정에서, 데이터를 지속적으로 처리해야 하는 작업의 경우, Spark가 Hadoop MapReduce보다 우수한 성능을 제공합니다. Spark의 RDD(Resilient Distributed Datasets)는 메모리에서 여러 맵 작업을 효율적으로 수행할 수 있게 해주는 반면, Hadoop MapReduce는 중간 결과를 디스크에 저장해야만 합니다.

 

Near real-time processing

비즈니스에 실시간 프로세싱이 필요한 경우 인메모리 Spark를 선택하는 것이 좋습니다.


그래프 처리

그래프 처리에 있어서, Spark의 계산 모델은 반복적 계산을 수행하는 데 특히 적합합니다. 그리고 Apache Spark는 그래프 계산을 위해 설계된 API인 GraphX를 제공합니다.


기계 학습

Spark에는 내장된 기계 학습 라이브러리인 MLlib가 있으며, MLlib에는 메모리에서도 실행되어 즉시 사용 가능한 알고리즘이 있습니다.

 

Joining datasets

데이터셋 결합 시, Spark는 빠른 처리 속도 덕분에 다양한 조합을 빠르게 생성할 수 있습니다. 그러나 매우 큰 데이터셋을 결합하여 많은 셔플링(shuffling)과 정렬(sorting)이 필요한 경우 Hadoop Reduce가 더 효과적일 수 있습니다.

 

 

 

References

http://www.differencebetween.net/technology/difference-between-mapreduce-and-spark/

https://www.analyticsvidhya.com/blog/2022/06/apache-spark-vs-hadoop-mapreduce-top-7-differences/

http://chaosmail.github.io/hadoop/2019/01/31/intro-to-bigdata-hadoop-and-spark/

반응형

댓글