Spark vs Hadoop : 최고의 빅 데이터 프레임 워크는 무엇입니까?



이 블로그 게시물은 apache spark와 hadoop에 대해 설명합니다. 다양한 시나리오에서 선택할 수있는 올바른 빅 데이터 프레임 워크에 대한 아이디어를 제공합니다.

두 프레임 워크에 대한 올바른 컨텍스트를 설정하기 위해 먼저 Hadoop과 Spark를 소개하여 Apache Spark vs Hadoop 블로그를 시작하겠습니다. 그런 다음 계속해서 서로 다른 매개 변수에서 두 빅 데이터 프레임 워크를 비교하여 강점과 약점을 분석합니다.그러나 비교 결과가 무엇이든간에 Spark와 Hadoop은 모두 .

Apache Spark vs Hadoop : Hadoop 소개

Hadoop은 먼저 분산 환경에 빅 데이터를 저장하여 병렬로 처리 할 수있는 프레임 워크입니다. Hadoop에는 기본적으로 두 가지 구성 요소가 있습니다.





HDFS

HDFS는 리소스 추상화를 생성하므로 단순화하겠습니다. 가상화와 유사하게 HDFS를 논리적으로 빅 데이터를 저장하는 단일 단위로 볼 수 있지만 실제로는 분산 방식으로 여러 노드에 데이터를 저장합니다. 여기에는 마스터-슬레이브 아키텍처가 있습니다. HDFS에서 Namenode는 마스터 노드이고 Datanode는 슬레이브입니다.

네임 노드

DataNode (슬레이브 노드)를 유지 관리하는 마스터 데몬입니다. 클러스터에 저장된 모든 파일의 메타 데이터를 기록합니다. 저장된 블록의 위치, 파일의 크기, 권한, 계층 등. 파일 시스템 메타 데이터에 발생하는 모든 변경 사항을 기록합니다.



예를 들어, HDFS에서 파일이 삭제되면 NameNode는 즉시 EditLog에이를 기록합니다. 클러스터의 모든 데이터 노드로부터 하트 비트 및 블록 보고서를 정기적으로 수신하여 데이터 노드가 활성 상태인지 확인합니다. HDFS의 모든 블록과 이러한 블록이 저장된 노드에 대한 기록을 유지합니다.

데이터 노드

이들은 각 슬레이브 머신에서 실행되는 슬레이브 데몬입니다. 실제 데이터는 DataNode에 저장됩니다. 클라이언트의 읽기 및 쓰기 요청을 처리합니다. 또한 네임 노드가 내린 결정에 따라 블록 생성, 블록 삭제 및 동일한 복제를 담당합니다.

HDFS-Apache Spark 대 Hadoop-Edureka

YARN은 리소스를 할당하고 작업을 예약하여 모든 처리 활동을 수행합니다. 두 가지 주요 데몬이 있습니다. ResourceManagerNodeManager .



ResourceManager

클러스터 수준 (각 클러스터에 대해 하나씩) 구성 요소이며 마스터 시스템에서 실행됩니다. 리소스를 관리하고 YARN 위에서 실행되는 애플리케이션을 예약합니다.

NodeManager

노드 수준 구성 요소 (각 노드에 하나씩)이며 각 슬레이브 시스템에서 실행됩니다. 컨테이너 관리 및 각 컨테이너의 리소스 사용률 모니터링을 담당합니다. 또한 노드 상태 및 로그 관리를 추적합니다. 최신 상태를 유지하기 위해 ResourceManager와 지속적으로 통신합니다. 따라서 MapReduce를 사용하여 HDFS에서 병렬 처리를 수행 할 수 있습니다.

Hadoop에 대해 자세히 알아 보려면 다음을 참조하십시오. 블로그. 이제 Hadoop 소개가 모두 준비되었으므로 Spark 소개로 이동하겠습니다.

Apache Spark vs Hadoop : Apache Spark 소개

Apache Spark는 분산 컴퓨팅 환경에서 실시간 데이터 분석을위한 프레임 워크입니다. 메모리 내 계산을 실행하여 데이터 처리 속도를 높입니다. 인 메모리 계산 및 기타 최적화를 활용하므로 대규모 데이터를 처리하는 데 더 빠릅니다. 따라서 높은 처리 능력이 필요합니다.

RDD (Resilient Distributed Dataset)는 Spark의 기본 데이터 구조입니다. 불변의 분산 된 객체 모음입니다. RDD의 각 데이터 세트는 클러스터의 다른 노드에서 계산 될 수있는 논리 파티션으로 나뉩니다. RDD는 사용자 정의 클래스를 포함하여 모든 유형의 Python, Java 또는 Scala 객체를 포함 할 수 있습니다. Spark 구성 요소는 빠르고 안정적입니다. Apache Spark에는 다음 구성 요소가 있습니다.

자바의 피보나치 시리즈 코드

  1. 스파크 코어 – Spark Core는 대규모 병렬 및 분산 데이터 처리를위한 기본 엔진입니다. 또한 코어 위에 구축 된 추가 라이브러리는 스트리밍, SQL 및 기계 학습을위한 다양한 워크로드를 허용합니다. 메모리 관리 및 장애 복구, 클러스터에서 작업 예약, 배포 및 모니터링, 스토리지 시스템과의 상호 작용을 담당합니다.
  2. 스파크 스트리밍 – Spark Streaming은 실시간 스트리밍 데이터를 처리하는 데 사용되는 Spark의 구성 요소입니다. 따라서 핵심 Spark API에 유용한 추가 기능입니다. 실시간 데이터 스트림의 높은 처리량 및 내결함성 스트림 처리를 가능하게합니다.
  3. Spark SQL : Spark SQL은 Spark의 함수 프로그래밍 API와 관계형 처리를 통합하는 Spark의 새로운 모듈입니다. SQL 또는 Hive 쿼리 언어를 통한 데이터 쿼리를 지원합니다. RDBMS에 익숙한 사용자에게 Spark SQL은 기존의 관계형 데이터 처리의 경계를 확장 할 수있는 이전 도구에서 쉽게 전환 할 수 있습니다.
  4. GraphX : GraphX는 그래프 및 그래프 병렬 계산을위한 Spark API입니다. 따라서 탄력적 인 분산 속성 그래프로 Spark RDD를 확장합니다. 개략적으로 GraphX는 탄력적 인 분산 속성 그래프를 도입하여 Spark RDD 추상화를 확장합니다. 즉, 각 꼭지점과 가장자리에 속성이 연결된 유 방향 다중 그래프입니다.
  5. MLlib (머신 러닝) : MLlib는 머신 러닝 라이브러리를 의미합니다. Spark MLlib는 Apache Spark에서 기계 학습을 수행하는 데 사용됩니다.

보시다시피 Spark에는 R, SQL, Python, Scala, Java 등의 지원을 포함하여 고수준 라이브러리가 포함되어 있습니다. 이러한 표준 라이브러리는 복잡한 워크 플로에서 원활한 통합을 향상시킵니다. 이를 통해 MLlib, GraphX, SQL + 데이터 프레임, 스트리밍 서비스 등과 같은 다양한 서비스 세트를 통합하여 기능을 향상시킬 수 있습니다.

Apache Spark에 대해 자세히 알아 보려면 다음을 참조하십시오. 블로그. 이제 Apache Spark와 Hadoop의 기반이 모두 설정되었습니다. 계속해서 Apache Spark와 Hadoop을 서로 다른 매개 변수에서 비교하여 장점을 이해해 보겠습니다.

Apache Spark와 Hadoop : 비교할 매개 변수

공연

Spark는 메모리 내 처리 기능이 있기 때문에 빠릅니다. 또한 메모리에 모두 맞지 않는 데이터에 디스크를 사용할 수도 있습니다. Spark의 인 메모리 프로세싱은 거의 실시간 분석을 제공합니다. 따라서 Spark는 신용 카드 처리 시스템, 기계 학습, 보안 분석 및 사물 인터넷 센서에 적합합니다.

Hadoop은 원래 데이터 유형에 대해 걱정하지 않고 여러 소스에서 데이터를 지속적으로 수집하고 분산 환경에 저장하도록 설정되었습니다. MapReduce는 일괄 처리를 사용합니다. MapReduce는 실시간 처리를 위해 구축 된 적이 없으며 YARN의 기본 아이디어는 분산 데이터 세트에 대한 병렬 처리입니다.

둘을 비교하는 문제는 처리를 다르게 수행한다는 것입니다.

사용의 용이성

Spark는 Scala, Java, Python 및 Spark SQL을위한 사용자 친화적 인 API와 함께 제공됩니다. Spark SQL은 SQL과 매우 유사하므로 SQL 개발자가 더 쉽게 배울 수 있습니다. Spark는 개발자가 다른 작업을 쿼리 및 수행하고 즉각적인 피드백을받을 수있는 대화 형 셸도 제공합니다.

쉘을 사용하거나 Sqoop, Flume 등과 같은 여러 도구와 통합하여 Hadoop에서 데이터를 쉽게 수집 할 수 있습니다. YARN은 처리 프레임 워크 일 뿐이며 Hive 및 Pig와 같은 여러 도구와 통합 할 수 있습니다. HIVE는 SQL과 유사한 인터페이스를 사용하여 분산 환경에서 대용량 데이터 세트를 읽고, 쓰고, 관리하는 데이터웨어 하우징 구성 요소입니다. 당신은 이것을 통과 할 수 있습니다 Hadoop 생태계 블로그에서 Hadoop과 통합 할 수있는 다양한 도구에 대해 알아 봅니다.

소송 비용

Hadoop과 Spark는 모두 Apache 오픈 소스 프로젝트이므로 소프트웨어 비용이 없습니다. 비용은 인프라와 만 관련이 있습니다. 두 제품 모두 낮은 TCO로 상용 하드웨어에서 실행될 수 있도록 설계되었습니다.

이제 그들이 어떻게 다른지 궁금 할 것입니다. Hadoop의 스토리지 및 처리는 디스크 기반이며 Hadoop은 표준 메모리 양을 사용합니다. 따라서 Hadoop을 사용하려면 더 빠른 디스크뿐만 아니라 많은 디스크 공간이 필요합니다. Hadoop은 또한 디스크 I / O를 분산하기 위해 여러 시스템이 필요합니다.

Apache Spark의 메모리 처리 기능으로 인해 많은 메모리가 필요하지만 표준 속도와 디스크 양을 처리 할 수 ​​있습니다. 디스크 공간은 비교적 저렴한 상품이며 Spark는 처리를 위해 디스크 I / O를 사용하지 않기 때문에 메모리의 모든 것을 실행하기 위해 많은 양의 RAM이 필요합니다. 따라서 Spark 시스템은 더 많은 비용이 발생합니다.

하지만 명심해야 할 한 가지 중요한 점은 Spark의 기술이 필요한 시스템 수를 줄여 준다는 것입니다. 더 많은 비용이 드는 훨씬 적은 수의 시스템이 필요합니다. 따라서 Spark가 추가 RAM 요구 사항이 있어도 계산 단위당 비용을 줄이는 시점이 있습니다.

데이터 처리

데이터 처리에는 일괄 처리와 스트림 처리의 두 가지 유형이 있습니다.

일괄 처리와 스트림 처리

일괄 처리 : 일괄 처리는 빅 데이터 세계에서 매우 중요했습니다. 간단히 말해서 일괄 처리는 일정 기간 동안 수집 된 많은 양의 데이터로 작동합니다. 일괄 처리에서는 데이터가 먼저 수집 된 다음 처리 된 결과가 이후 단계에서 생성됩니다.

일괄 처리는 대용량 정적 데이터 세트를 효율적으로 처리하는 방법입니다. 일반적으로 보관 된 데이터 세트에 대해 일괄 처리를 수행합니다. 예를 들어, 한 국가의 평균 소득을 계산하거나 지난 10 년간 전자 상거래의 변화를 평가합니다.

스트림 처리 : 스트림 처리는 빅 데이터 세계의 현재 추세입니다. 시간의 필요성은 속도와 실시간 정보이며, 이것이 스팀 처리가하는 일입니다. 배치 처리는 기업이 변화하는 비즈니스 요구에 실시간으로 신속하게 대응할 수 있도록 허용하지 않으며, 스트림 처리는 수요가 급격히 증가했습니다.

이제 Apache Spark와 Hadoop으로 돌아 오면 YARN은 기본적으로 일괄 처리 프레임 워크입니다. 작업을 YARN에 제출하면 클러스터에서 데이터를 읽고 작업을 수행하고 결과를 클러스터에 다시 씁니다. 그런 다음 업데이트 된 데이터를 다시 읽고 다음 작업을 수행하고 결과를 클러스터에 다시 씁니다.

Spark는 유사한 작업을 수행하지만 메모리 내 처리를 사용하고 단계를 최적화합니다. GraphX를 통해 사용자는 그래프 및 컬렉션과 동일한 데이터를 볼 수 있습니다. 사용자는 RDD (Resilient Distributed Dataset)를 사용하여 그래프를 변환하고 결합 할 수도 있습니다.

결함 허용

Hadoop과 Spark는 모두 내결함성을 제공하지만 둘 다 다른 접근 방식을 가지고 있습니다. HDFS 및 YARN 모두의 경우 마스터 데몬 (즉, 각각 NameNode 및 ResourceManager)은 슬레이브 데몬 (즉, 각각 DataNode 및 NodeManager)의 하트 비트를 확인합니다. 슬레이브 데몬이 실패하면 마스터 데몬은 보류 중이거나 진행중인 모든 작업을 다른 슬레이브로 다시 예약합니다. 이 방법은 효과적이지만 단일 실패가있는 작업의 완료 시간도 크게 늘릴 수 있습니다. Hadoop은 상용 하드웨어를 사용하므로 HDFS가 내결함성을 보장하는 또 다른 방법은 데이터를 복제하는 것입니다.

위에서 논의했듯이 RDD는 Apache Spark의 구성 요소입니다. RDD는 Spark에 내결함성을 제공합니다. HDFS, HBase, 공유 파일 시스템과 같은 외부 스토리지 시스템에있는 모든 데이터 세트를 참조 할 수 있습니다. 병렬로 작동 할 수 있습니다.

RDD는 작업 전반에 걸쳐 메모리에 데이터 세트를 유지할 수 있으므로 향후 작업이 10 배 더 빨라집니다. RDD가 손실되면 원래 변환을 사용하여 자동으로 다시 계산됩니다. 이것이 Spark가 내결함성을 제공하는 방법입니다.

보안

Hadoop은 인증을 위해 Kerberos를 지원하지만 처리하기가 어렵습니다. 그럼에도 불구하고 인증을 위해 LDAP (Lightweight Directory Access Protocol)와 같은 타사 공급 업체도 지원합니다. 또한 암호화를 제공합니다. HDFS는 기존 파일 권한과 ACL (액세스 제어 목록)을 지원합니다. Hadoop은 클라이언트가 작업 제출에 대한 올바른 권한을 갖도록 보장하는 서비스 수준 인증을 제공합니다.

피보나치 수 C ++

Spark는 현재 공유 비밀을 통한 인증을 지원합니다. Spark는 HDFS와 통합 할 수 있으며 HDFS ACL 및 파일 수준 권한을 사용할 수 있습니다. Spark는 Kerberos 기능을 활용하여 YARN에서 실행할 수도 있습니다.

Hadoop이 가장 적합한 사용 사례 :

  • 아카이브 데이터 분석. YARN을 사용하면 방대한 양의 데이터를 병렬 처리 할 수 ​​있습니다. 데이터의 일부는 서로 다른 DataNode에서 병렬 및 개별적으로 처리되며 각 NodeManager의 결과를 수집합니다.
  • 즉각적인 결과가 필요하지 않은 경우. Hadoop MapReduce는 일괄 처리를위한 훌륭하고 경제적 인 솔루션입니다.

Spark가 가장 적합한 사용 사례 :

실시간 빅 데이터 분석 :

실시간 데이터 분석은 Twitter 데이터와 같이 초당 수백만 개의 이벤트 속도로 들어오는 실시간 이벤트 스트림에 의해 생성 된 데이터를 처리하는 것을 의미합니다. Spark의 강점은 분산 처리와 함께 데이터 스트리밍을 지원하는 능력에 있습니다. 이는 거의 실시간에 가까운 데이터 처리를 제공하는 유용한 조합입니다. MapReduce는 대량의 데이터에 대해 일괄 분산 처리를 수행하도록 설계 되었기 때문에 이러한 이점이 부족합니다. 실시간 데이터는 여전히 MapReduce에서 처리 할 수 ​​있지만 속도는 Spark와 비슷하지 않습니다.

Spark는 데이터를 MapReduce보다 100 배 빠르게 처리하고 디스크를 사용하면 10 배 더 빠르게 처리한다고 주장합니다.

그래프 처리 :

페이지 순위와 같은 대부분의 그래프 처리 알고리즘은 동일한 데이터에 대해 여러 반복을 수행하며이를 위해서는 메시지 전달 메커니즘이 필요합니다. 동일한 데이터에 대한 여러 반복을 처리하려면 MapReduce를 명시 적으로 프로그래밍해야합니다. 대략 다음과 같이 작동합니다. 디스크에서 데이터를 읽고 특정 반복 후에 결과를 HDFS에 쓴 다음 다음 반복을 위해 HDFS에서 데이터를 읽습니다. 이는 내결함성을 위해 클러스터 전반에 걸쳐 대량의 I / O 작업 및 데이터 복제를 포함하는 디스크에 데이터를 읽고 쓰는 작업을 포함하므로 매우 비효율적입니다. 또한 각 MapReduce 반복은 대기 시간이 매우 길며 다음 반복은 이전 작업이 완전히 완료된 후에 만 ​​시작할 수 있습니다.

또한 메시지 전달에는 특정 노드의 점수를 평가하기 위해 인접 노드의 점수가 필요합니다. 이러한 계산에는 MapReduce에없는 메커니즘 인 이웃 (또는 작업의 여러 단계에 걸친 데이터)의 메시지가 필요합니다. 그래프 처리 알고리즘을위한 효율적인 플랫폼에 대한 요구를 해결하기 위해 Pregel 및 GraphLab과 같은 다양한 그래프 처리 도구가 설계되었습니다. 이러한 도구는 빠르고 확장 가능하지만 복잡한 다단계 알고리즘의 생성 및 사후 처리에는 효율적이지 않습니다.

Apache Spark의 도입으로 이러한 문제가 크게 해결되었습니다. Spark에는 우리의 삶을 단순화하는 GraphX라는 그래프 계산 라이브러리가 포함되어 있습니다. 내장 된 그래프 지원과 함께 메모리 내 계산은 기존 MapReduce 프로그램에 비해 1 ~ 2도 정도 알고리즘 성능을 향상시킵니다. Spark는 Netty와 Akka의 조합을 사용하여 실행기 전체에 메시지를 배포합니다. Hadoop 및 Spark를 사용하는 PageRank 알고리즘의 성능을 나타내는 몇 가지 통계를 살펴 보겠습니다.

반복적 인 기계 학습 알고리즘 :

거의 모든 기계 학습 알고리즘이 반복적으로 작동합니다. 앞서 살펴본 것처럼 반복 알고리즘은 MapReduce 구현에서 I / O 병목 현상을 수반합니다. MapReduce는 반복 알고리즘에 비해 너무 무거운 거친 작업 (작업 수준 병렬 처리)을 사용합니다. 분산 시스템 커널 인 Mesos의 도움으로 Spark는 각 반복 후 중간 데이터 세트를 캐시하고이 캐시 된 데이터 세트에서 여러 반복을 실행하여 I / O를 줄이고 알고리즘을 내결함성 방식으로 더 빠르게 실행할 수 있습니다.

Spark에는 반복을 활용하고 MapReduce에서 가끔 사용되는 1 회 통과 근사값보다 더 나은 결과를 제공하는 고품질 알고리즘이 포함 된 MLlib라는 확장 가능한 기계 학습 라이브러리가 내장되어 있습니다.

  • 빠른 데이터 처리. 아시다시피 Spark는 메모리 내 처리를 허용합니다. 결과적으로 Spark는 RAM 데이터의 경우 최대 100 배, 스토리지 데이터의 경우 최대 10 배 더 빠릅니다.
  • 반복 처리. Spark의 RDD를 사용하면 중간 데이터 세트를 디스크에 쓸 필요없이 메모리에서 여러지도 작업을 수행 할 수 있습니다.
  • 거의 실시간 처리. Spark는 즉각적인 비즈니스 통찰력을 제공하는 훌륭한 도구입니다. 이것이 Spark가 신용 카드의 스트리밍 시스템에 사용되는 이유입니다.

'Apache Spark : Apache Hadoop의 킬러 또는 구세주?'

이에 대한 답 – Hadoop MapReduce와 Apache Spark는 서로 경쟁하지 않습니다. 사실, 그들은 서로를 아주 잘 보완합니다. Hadoop은 상품 시스템에서 방대한 데이터 세트를 제어합니다. Spark는이를 필요로하는 데이터 세트에 대해 실시간 인 메모리 처리를 제공합니다. Apache Spark의 기능 (예 : 빠른 처리 속도, 고급 분석 및 상용 하드웨어에서 Hadoop의 저비용 운영과의 다중 통합 지원)을 결합하면 최상의 결과를 얻을 수 있습니다. Hadoop은 Apache Spark 기능을 보완합니다. Spark는 Hadoop을 완전히 대체 할 수 없지만 좋은 소식은 Spark에 대한 수요가 현재 사상 최고 수준이라는 것입니다! 지금이 Spark를 마스터하고 자신에게 다가오는 경력 기회를 최대한 활용할 수있는 적절한시기입니다. 지금 시작하세요!

질문이 있으십니까? 댓글 섹션에 언급 해 주시면 빠른 시일 내에 답변 드리겠습니다.

Spark를 배우고 Spark 도메인에서 경력을 쌓고 RDD, Spark Streaming, SparkSQL, MLlib, GraphX ​​및 Scala를 Real Life 사용 사례와 함께 사용하여 대규모 데이터 처리를 수행하려면 대화 형 라이브 온라인을 확인하세요. 여기, 연중 무휴 지원이 제공되어 학습 기간 내내 안내합니다.