초보자를 위한 Apache Spark 스트리밍 자습서: 작업, 아키텍처 및 기능
게시 됨: 2020-02-27우리는 현재 초당 엄청난 양의 데이터가 빠른 속도로 생성되는 세상에 살고 있습니다. 이 데이터는 정확하게 분석된다면 의미 있고 유용한 결과를 제공할 수 있습니다. 또한 적시에 많은 산업 분야에 솔루션을 제공할 수 있습니다.
이는 여행 서비스, 소매, 미디어, 금융 및 건강 관리와 같은 산업에서 매우 유용합니다. 다른 많은 상위 기업들은 Amazon이 플랫폼에서 수행한 다양한 종류의 제품과의 고객 상호 작용 추적 또는 Netflix에서 제공하는 실시간으로 개인화된 추천을 받는 뷰어와 같은 데이터 분석을 채택했습니다.
많은 양의 데이터를 사용하는 모든 비즈니스에서 사용할 수 있으며 비즈니스의 전체 프로세스를 개선하고 고객 만족도와 사용자 경험을 향상시키는 이점을 위해 분석할 수 있습니다. 더 나은 사용자 경험과 고객 만족은 장기적으로 조직에 이익을 제공하여 비즈니스를 확장하고 수익을 창출합니다.
목차
스트리밍이란?
데이터 스트리밍은 정보가 연속적이고 안정적인 스트림으로 전송되는 방법입니다. 인터넷이 발달하면서 스트리밍 기술도 발전하고 있습니다.
스파크 스트리밍이란?
데이터가 바인딩되지 않은 시퀀스로 계속 도착하면 데이터 스트림이라고 합니다. 입력 데이터는 꾸준히 흐르며 스트리밍으로 나뉩니다. 데이터의 추가 처리는 개별 단위로 분할된 후 수행됩니다. 짧은 대기 시간으로 데이터를 분석하고 데이터를 처리하는 것을 스트림 처리라고 합니다.
2013년에는 Apache Spark가 Spark Streaming과 함께 추가되었습니다. TCP 소켓, Amazon Kinesis, Apache Flume 및 Kafka와 같이 데이터 수집이 발생할 수 있는 많은 소스가 있습니다. 정교한 알고리즘의 도움으로 데이터 처리가 완료됩니다. 윈도우, 조인, 리듀스, 맵과 같은 고급 기능을 사용하여 처리를 표현합니다. 라이브 대시보드, 데이터베이스 및 파일 시스템은 처리된 데이터를 파일 시스템으로 푸시하는 데 사용됩니다.

스트림 작업
다음은 내부 작업입니다. Spark 스트리밍은 라이브 입력 데이터 스트림을 일괄 처리로 나눕니다. Spark Engine은 이러한 배치를 처리하여 결과적으로 최종 스트림 배치를 생성하는 데 사용됩니다.
스트림의 데이터는 작은 배치로 나뉘며 Apache Spark Discretized Stream(Spark DStream)으로 표시됩니다. Spark RDD는 DStream을 빌드하는 데 사용되며 이것이 Spark의 핵심 데이터 추상화입니다. Spark SQL 및 Spark MLib와 같은 Apache Spark의 모든 구성 요소는 Spark Streaming과 원활하게 쉽게 통합될 수 있습니다.
Spark Streaming은 라이브 데이터 스트림을 확장하는 데 도움이 됩니다. 핵심 Spark API의 확장 중 하나입니다. 또한 내결함성 스트림 및 높은 처리량을 처리할 수 있습니다. Spark Streaming을 사용하면 라이브 데이터의 실시간 처리 및 스트리밍이 수행됩니다. Pinterest, Netflix, Uber 등 세계 주요 Top 기업들이 Spark Streaming 서비스를 이용하고 있습니다.
Spark Streaming은 또한 실시간으로 데이터 분석을 제공합니다. 데이터의 실시간 및 빠른 처리는 Spark Streaming의 단일 플랫폼에서 수행됩니다.
Apache Spark 아키텍처 도 읽어 보세요.
왜 스파크 스트리밍인가?
Spark Streaming은 Facebook, Stock Market, Geographical Systems와 같은 다양한 소스에서 실시간 데이터를 스트리밍하고 강력한 분석을 수행하여 비즈니스를 장려하는 데 사용할 수 있습니다.
Spark Streaming을 독특하게 만드는 5가지 중요한 측면이 있으며 다음과 같습니다.
1. 통합
그래프 처리, 기계 학습, SQL과 같은 고급 라이브러리를 쉽게 통합할 수 있습니다.
2. 조합
스트리밍되는 데이터는 대화형 쿼리 및 정적 데이터 세트와 함께 수행할 수 있습니다.
3. 로드 밸런싱
Spark Streaming은 부하의 완벽한 균형을 유지하므로 매우 특별합니다.
4. 리소스 사용
Spark Streaming은 사용 가능한 리소스를 매우 최적의 방식으로 사용합니다.
5. 낙오자와 실패로부터의 회복
Spark Streaming은 모든 종류의 실패 또는 낙오자로부터 빠르게 복구할 수 있습니다.
Apache Spark에서 스트리밍의 필요성
연속 연산자 모델은 전통적으로 데이터를 처리하기 위해 스트림을 처리하는 시스템을 설계하는 동안 사용됩니다. 시스템 작동은 다음과 같습니다.
- 데이터 소스는 데이터를 스트리밍하는 데 사용됩니다. 다양한 종류의 데이터 소스에는 IoT 장치, 시스템 원격 측정 데이터, 라이브 로그 등이 있습니다. 이러한 스트리밍 데이터는 Amazon Kinesis, Apache Kafka 등과 같은 데이터 수집 시스템으로 수집됩니다.
- 클러스터에서는 데이터에 대해 병렬 처리가 수행됩니다.
- Kafka, Cassandra, HBase와 같은 다운스트림 시스템은 결과를 전달하는 데 사용됩니다.
작업자 노드 세트는 몇 가지 연속 연산자를 실행합니다. 스트리밍된 데이터의 레코드 처리는 한 번에 하나씩 수행됩니다. 그런 다음 문서는 파이프라인의 다음 운영자에게 전달됩니다.
소스 운영자는 수집 시스템에서 데이터를 수신하는 데 사용됩니다. 싱크 연산자는 다운스트림 시스템에 출력을 제공하는 데 사용됩니다.
일부 연산자는 연속형입니다. 이들은 자연스럽고 직선적인 모델입니다. 대규모로 수행되는 실시간 복잡한 데이터의 분석과 관련하여 기존 아키텍처는 현대 세계에서 몇 가지 문제에 직면하며 다음과 같습니다.
빠른 장애 복구
오늘날의 시스템 장애는 병렬 노드에서 누락된 정보를 계산하여 손실된 정보를 복구함으로써 신속하게 동반되고 수용됩니다. 따라서 기존 시스템에 비해 복구 속도가 훨씬 빨라집니다.
로드 밸런서
로드 밸런서는 노드 간에 리소스와 데이터를 보다 효율적으로 할당하여 리소스가 대기하거나 아무것도 하지 않고 노드 전체에 데이터가 고르게 분산되도록 합니다.
대화형, 일괄 및 스트리밍 워크로드의 통합
스트리밍 데이터에 쿼리를 만들어 스트리밍 데이터와 상호 작용할 수도 있습니다. 정적 데이터 세트와 결합할 수도 있습니다. 연속 연산자용으로 설계되지 않았기 때문에 새 연산자를 사용하여 임시 쿼리를 수행할 수 없습니다. 단일 엔진을 사용하여 대화형, 스트리밍 및 일괄 쿼리를 결합할 수 있습니다.
ML을 사용한 SQL 쿼리 및 분석
공통 데이터베이스 명령으로 시스템을 개발하면 개발자의 삶이 다른 시스템과의 협업을 쉽게 수행할 수 있습니다. 커뮤니티는 SQL 쿼리를 널리 받아들입니다. 시스템이 고급 분석 목적으로 사용할 수 있는 기계 학습용 모듈 및 라이브러리를 제공하는 경우.
스파크 스트리밍 개요
Spark Streaming은 실시간 데이터를 처리하는 데 사용되는 RDD 세트를 사용합니다. 따라서 Spark Streaming은 일반적으로 실시간 데이터 스트림을 처리하는 데 일반적으로 사용됩니다. Spark Streaming은 데이터의 라이브 스트림에 대한 내결함성과 높은 처리량 처리를 제공합니다. 핵심 스파크 API와 함께 제공되는 추가 기능입니다.
스파크 스트리밍 기능
- 비즈니스 분석 : Spark Streaming을 사용하여 청중의 행동도 배울 수 있습니다. 이러한 학습은 나중에 기업의 의사 결정에 사용될 수 있습니다.
- 통합: 실시간 및 일괄 처리가 Spark와 통합됩니다 .
- 내결함성 – Spark의 고유한 기능은 장애를 효율적으로 복구할 수 있다는 것입니다.
- 속도: 낮은 대기 시간은 Spark에 의해 달성됩니다 .
- 확장: 노드는 Spark를 통해 수백 개까지 쉽게 확장할 수 있습니다.
스파크 스트리밍 기초
1. 스트리밍 컨텍스트
Spark에서 데이터 스트림은 스트리밍 컨텍스트에 의해 소비되고 관리됩니다. Input 스트리밍을 등록하여 생성되는 Receiver의 객체를 생성합니다. 따라서 Akka Actor, Twitter 및 ZeroMQ와 같은 다양한 소스에 대한 기본 워크플로를 제공하는 많은 컨텍스트를 제공하므로 시스템의 중요한 진입점이 되는 주요 Spark 기능입니다.

읽기: 빅 데이터에서 Apache Spark의 역할 및 고유한 이유
스파크 컨텍스트 개체는 스파크 클러스터와의 연결을 나타냅니다. Spark Streaming 개체가 StreamingContext 개체에 의해 생성되는 경우 누산기, RDD 및 브로드캐스트 변수도 SparkContex 개체를 생성할 수 있습니다.
2. 체크포인트, 브로드캐스트 변수 및 누산기
체크포인트
체크포인트는 게임에서와 같이 시스템의 상태를 저장하는 체크포인트와 유사하게 작동합니다. 이 경우 체크포인트는 리소스 손실을 줄이고 시스템 고장에 대한 복원력을 높이는 데 도움이 됩니다. 검사점 방법론은 복구 시 시스템을 쉽게 되돌릴 수 있도록 시스템 상태를 추적하고 저장하는 더 좋은 방법입니다.
브로드캐스트 변수
네트워크 노드에 작업의 전체 복사본을 제공하는 대신 항상 읽기 전용 변수를 잡아서 존재하는 다른 작업의 노드를 확인하고 개별 노드의 전송 및 계산 비용을 줄입니다. 따라서 중요한 입력 세트를 보다 효율적으로 제공할 수 있습니다. 또한 고급 알고리즘을 사용하여 브로드캐스트 변수를 네트워크의 다른 노드에 배포합니다. 따라서 통신 비용이 절감됩니다.
어큐뮬레이터
누산기는 다양한 목적에 맞게 사용자 정의할 수 있는 변수입니다. 그러나 카운터 및 합계 누산기와 같이 이미 정의된 누산기가 존재합니다. 또한 각 노드를 추적하는 추적 누적기가 있으며 여기에 몇 가지 추가 기능을 추가할 수도 있습니다. Numeric Accumulators는 Spark에서도 지원하는 많은 디지털 기능을 지원합니다. 사용자가 요구하는 맞춤형 Accumulator도 생성할 수 있습니다.
디스트림
DStream은 이산화된 스트림을 의미합니다. Spark Streaming은 DStream(Discretized Stream)이라고 하는 필요한 추상화를 제공합니다. DStream은 연속적으로 스트리밍되는 데이터입니다. 데이터 소스에서 DStream이 수신됩니다. 처리된 데이터 스트림에서 얻을 수도 있습니다. 입력 스트림의 변환은 처리된 데이터 스트림을 생성합니다.
지정된 간격 후에 데이터가 RDD에 포함됩니다. RDD의 끝없는 시리즈는 DStream을 나타냅니다.
캐싱
개발자는 DStream을 사용하여 스트림의 데이터를 메모리에 캐시할 수 있습니다. 이는 데이터가 DStream에서 여러 번 계산되는 경우에 유용합니다. DStream에서 지속() 메서드를 사용하여 달성할 수 있습니다.
데이터 복제는 시스템의 오류에 저항할 수 있는 복원력 있는 시스템을 갖는 안전성을 보장하기 위해 수행되어 시스템의 오류(예: Kafka, Sockets, Flume 등)를 허용할 수 있습니다.
Spark 스트리밍의 이점 및 아키텍처
한 번에 하나의 데이터 스트림을 처리하는 것은 때때로 번거로울 수 있습니다. 따라서 Spark Streaming은 데이터를 쉽게 관리할 수 있는 작은 하위 배치로 이산화합니다. Spark 작업자는 Spark Streaming 수신기에서 병렬로 허용하는 데이터 버퍼를 가져오기 때문입니다. 따라서 전체 시스템은 일괄 처리를 병렬로 실행한 다음 최종 결과를 누적합니다. 그런 다음 이러한 짧은 작업은 Spark 엔진에서 일괄 처리되고 결과는 다른 시스템에 제공됩니다.
Spark Streaming 아키텍처에서 계산은 노드에 정적으로 할당 및 로드되지 않고 리소스의 데이터 지역성과 가용성을 기반으로 합니다. 따라서 이전의 기존 시스템에 비해 로딩 시간이 단축됩니다. 따라서 데이터 지역성 원리를 사용하면 오류 감지 및 복구가 더 쉽습니다.
Spark의 데이터 노드는 일반적으로 Resilient Distribution Dataset인 RDD로 표현됩니다.
스파크 스트리밍의 목표
다음은 Spark 아키텍처가 달성한 목표입니다.
1. 동적 부하 분산
이것은 데이터 스트림이 로드 밸런서에 의해 동적으로 할당되는 Spark Streaming의 필수 기능 중 하나입니다. 로드 밸런서는 여기에 정의된 특정 규칙을 사용하여 데이터 할당 및 리소스 계산을 담당합니다. 로드 밸런싱의 주요 목표는 작업자 간에 워크로드의 균형을 효율적으로 유지하고 모든 것을 병렬 방식으로 배치하여 사용 가능한 리소스 낭비가 없도록 하는 것입니다. 또한 시스템의 작업자 노드에 리소스를 동적으로 할당합니다.
2. 실패 및 복구
기존 시스템과 마찬가지로 작동 오류가 발생하면 전체 시스템에서 해당 부분을 다시 계산하여 손실된 정보를 다시 가져와야 합니다. 그러나 문제는 한 노드가 이 모든 복구를 처리하고 전체 시스템이 완료될 때까지 기다리게 할 때 발생합니다. 반면 Spark에서는 손실된 정보가 다른 무료 노드에 의해 계산되고 기존 방법과 같이 추가 대기 없이 추적할 시스템을 다시 가져옵니다.
또한 실패한 작업은 시스템의 모든 노드에 고르게 분산되어 기존 방법보다 빠르게 오류를 다시 계산하고 복구합니다.
3. 배치 및 대화형 쿼리
Spark의 RDD 집합은 스트리밍 워크로드와 배치 간의 관계를 제공하는 Spark의 DStream이라고 합니다. 이러한 일괄 처리는 Spark의 메모리에 저장되어 여기에 있는 데이터를 쿼리하는 효율적인 방법을 제공합니다.
Spark의 가장 좋은 점은 Spark 시스템에서 필요할 때 사용할 수 있는 다양한 라이브러리가 포함되어 있다는 것입니다. 라이브러리의 이름은 기계 학습을 위한 MLlib, 데이터 쿼리를 위한 SQL, GraphX 및 Data Frame인 반면 Dataframe 및 질문은 DStreams에 의해 동등한 SQL 문으로 변환될 수 있습니다.
4. 성능
스파크 시스템은 처리량을 향상시키는 작업의 병렬 분배를 사용하므로 최대 몇 밀리초만큼 짧은 대기 시간을 달성할 수 있는 스파크 엔진을 활용합니다.
Spark 스트리밍은 어떻게 작동합니까?
스트림의 데이터는 Spark Streaming에서 DStreams라고 하는 작은 배치로 나뉩니다. 내부적으로는 일련의 RDD입니다. Spark API는 RDDS에서 데이터를 처리하는 데 사용되며 결과적으로 배송이 반환됩니다. Spark Streaming의 API는 Python, Java 및 Scala에서 사용할 수 있습니다. 최근 Spark 1.2에 도입된 Python API에는 많은 기능이 부족합니다.
상태 저장 계산을 스트림의 수신 데이터를 기반으로 Spark Streaming에서 유지 관리하는 상태라고 합니다. 스트림에 흐르는 데이터는 시간 프레임 내에서 처리됩니다. 이 시간 프레임은 개발자가 지정해야 하며 Spark Streaming에서 허용해야 합니다. 시간 창은 작업이 완료되어야 하는 시간 프레임입니다. 시간 창은 창의 슬라이딩 간격이라고도 하는 시간 간격 내에서 업데이트됩니다.
스파크 스트리밍 소스
입력 DStream과 관련된 Receiver 객체는 수신된 데이터를 처리를 위해 Sparks Memory에 저장합니다.
내장 스트리밍에는 두 가지 범주가 있습니다.
1. 기본 소스
Streaming API에서 사용 가능한 소스(예: 소켓 연결 및 파일 시스템).
2. 고급 소스
고급 소스 수준은 Kinesis, Flume 및 Kafka 등입니다.
스트리밍 작업
Spark RDDS에서 지원하는 작업에는 두 가지 유형이 있으며 다음과 같습니다.
1. Apache Spark의 출력 작업
출력 작업은 DStream의 데이터를 파일 시스템이나 데이터베이스와 같은 외부 시스템으로 내보내는 데 사용됩니다. 출력 작업을 통해 변환된 데이터를 외부 시스템에서 사용할 수 있습니다. 모든 DStreams 변환은 실제로 외부 시스템에 의해 수행되는 트리거링에 의해 실행됩니다.
다음은 현재 출력 작업입니다.
foreachRDD(함수), [접미사]), saveAsHadoopFiles(접두사, [접미사]), saveAsObjectFiles(접두사, [접미사])”prefix-TIME_IN_MS[.suffix]”, saveAsTextFiles(접두사, print()
RDD는 출력 작업을 느리게 실행합니다. 출력의 DStream 작업 내에서 RDD 작업은 수신된 데이터를 처리하기 위해 강제로 취해집니다. 출력 작업의 실행은 한 번에 하나씩 수행됩니다. Spark 애플리케이션은 출력 작업의 성능 순서를 정의합니다.
2. 스파크 변환
Spark 변환은 RDD가 Spark에서 지원하므로 DStream의 데이터도 변경합니다. Spark RDD와 마찬가지로 DStream에서 많은 변경을 지원합니다.

다음은 가장 일반적인 변환 작업입니다.
Window(), updateStateByKey(), transform(), [numTasks]), cogroup(otherStream, [numTasks]), join(otherStream, reduceByKey(func, [numTasks]), countByValue(), reduce(), union(otherStream ), count(), repartition(numPartitions), filter(), flatMap(), map().
결론
오늘날의 데이터 중심 세계에서 데이터를 저장하고 분석하는 도구는 비즈니스 분석 및 성장의 핵심 요소임이 입증되었습니다. 빅 데이터 및 관련 도구 및 기술에 대한 수요가 증가하는 것으로 입증되었습니다. 이와 같이 Apache Spark는 훌륭한 시장을 보유하고 있으며 고객과 기업에 훌륭한 기능을 제공합니다.
빅 데이터에 대해 더 알고 싶다면 PG 디플로마 빅 데이터 소프트웨어 개발 전문화 프로그램을 확인하세요. 이 프로그램은 실무 전문가를 위해 설계되었으며 7개 이상의 사례 연구 및 프로젝트를 제공하고 14개 프로그래밍 언어 및 도구, 실용적인 실습을 다룹니다. 워크샵, 400시간 이상의 엄격한 학습 및 최고의 기업과의 취업 지원.
세계 최고의 대학에서 온라인으로 소프트웨어 개발 과정 을 배우십시오 . 이그 제 큐 티브 PG 프로그램, 고급 인증 프로그램 또는 석사 프로그램을 획득하여 경력을 빠르게 추적하십시오.