- 스트리밍 도래
- 지금까지의 데이터 중 90퍼 이상이 최근 2년(2018) → 현재는 더 많음
- 자는 시간 빼면 하루종일 인터넷 사용
- 빠른 의사 결정 위한 실시간 처리
- 람다 vs 카파
- 단위별 배치분석, 스트리밍 솔루션으로 실시간 처리 후 반영
- 네이티브 스트리밍 vs 마이크로배치 - 차이 언급 필요
- 네이티브 : 스톰-트리덴트, 스톰, 플링크, 카프카, 삼자 등 앵간치
- 레코드 별로 처리, 지연율 적음
- 내결함성 보장을 위해 트래킹해야할게 있어서 처리량 비교적 낮음
- 상태관리 쉬움(왜?)
- https://www.upsolver.com/blog/batch-stream-a-cheat-sheet
- https://stackoverflow.com/questions/39715803/what-is-the-difference-between-mini-batch-vs-real-time-streaming-in-practice-no
- https://www.cloverdx.com/blog/real-time-data-processing-versus-micro-batch-processing
- 윈도우 집계
- 일정기간 처리한 작업들 살펴보는 것도 중요
- 텀블링 : 윈도우가 겹치지 않게
- 슬라이딩 : 좀 더 짧은 보고 기간으로
- 상태 기반 처리
- 이전에 처리했던 데이터를 활용해 이번 데이터 처리
- 더 많은 컴퓨팅 리소스 필요(중간값 유지) → 대부분의 요구사항이 상태 기반
- 비상태 기반 처리가 더 풍부한 처리가 어려울 것으로 생각됨(잘 모름) → 대신 더 안정적인 스트림 처리
- https://medium.com/@shivagarg91/state-management-stateful-stateless-aggregations-on-unbounded-data-in-structured-streaming-1-3-6cf95cc32724
- 타임스탬프 & 워터마크
- 데이터 생성된 시간/처리에 들어온 시간이 반드시 찍힘 → 타임스탬프
- 임베디드에서도 내부적으로 타이머 달려있으면 로그찍을때 거의 무조건 찍음
- 근데 실제로 생성된 시간에 맞춰 곧바로 처리되지는 않음 - 집계에서 반영 잘 안됨 → 워터마크 등장
- 무슨 경계값을 만들어내는데, 잘 모르겠음
- https://databricks.com/blog/2017/05/08/event-time-aggregation-watermarking-apache-sparks-structured-streaming.html
- Dstream
- 스파크에서 돌아가는 원조 스트리밍,
- https://spark.apache.org/docs/2.4.0/streaming-programming-guide.html
- 구조적 스트리밍
- 스팤sql 위에서 돌아가는 스트리밍 처리. sql의 최적화 기법들 다 상속받아서 동작
- https://spark.apache.org/docs/2.4.0/structured-streaming-programming-guide.html
- 스트림 플랫폼
- 사실 스파크(스톰-트리덴트) 빼고 전부 다 리얼타임 스트리밍
- 다들 지연율 낮고 처리량 높음 → 뭐가 다름?
- 많이 쓰여서 자료도 많고 mature 한 애들을 자주 사용하는듯
- 스톰: 하둡에코시스템 상에서의 근본 스트리밍. 조상님 격
- 카프카 : 스트림 라이브러리로 제공해서 개발자가 앱 배포할때 스트리밍 기능 추가. 대신 따로 클러스터를 두고 관리, 스팤 코어에서 돌아가는 mllib 등 연계 불가능
- 삼자: 카프카와 연결된 스트림처리 서비스, 카프카에서 데이터 가져와서 스트림처리하고 다시 카프카에 넣어놓는.
- https://www.popit.kr/tag/실시간-처리-플랫폼
- https://medium.com/@chandanbaranwal/spark-streaming-vs-flink-vs-storm-vs-kafka-streams-vs-samza-choose-your-stream-processing-91ea3f04675b
- 참고자료Apache Spark Streaming슬라이딩 윈도우(Sliding Window) > 도리의 디지털라이프
- 아파치 실시간 처리 프레임워크 비교분석 (1) | Popit
- 람다 아키텍처 (Lambda Architecture)
- 스트림 프로세싱 - 스톰, 카프카, 삼자, 플링크 등등
- Dstream vs Structured Streaming(좀 더 안정적이다)
- Streaming Context
- 마이크로배치
- 슬라이딩윈도우
- 내부적으로 동작하는 방식
- 실습 - 자바 / 스칼라 / 파이썬
- Resilient Distributed Datasets
- 스파크의 기본 데이터 구조
- 분산 변경 불가능한 객체 모음
- 스파크의 모든 작업은 새로운 RDD를 만들거나 존재하는 RDD를 변형하거나 결과 계산을 위해 RDD에서 연산하는 것을 표현하고 있음
- 스파크는 빠른 mapreduce 작업을 RDD개념을 이용해 사용
- HDFS에 접근하는 게 아닌 Memory에 보관하여 실행시간을 줄여줌
- 스트리밍: 실시간으로 끊임없이 들어오는 데이터
- Spark Streaming
- 실시간으로 들어오는 데이터를 처리하기 위한 모듈
- 다양한 데이터 소스(Kafka, HDFS 등)로부터 데이터를 받아서 실시간 스트리밍 처리를 함.
- 스트리밍 데이터를 구조적으로(테이블 형태) 사용하려면 Spark Structured Streaming을 사용
- Spark RDD와 사용방법이 유사
- lambda 아키텍쳐를 만들기 좋음
- Structured Streaming
- Spark2.X에서 새롭게 나온 Spark SQL 엔진 위에 구축된 Stream Processing Framework
- input으로 들어오는 stream 데이터에 대해 table 형식으로 append 할 수 있음
- DataFrame을 통해 streaming으로 들어오는 데이터를 질의하거나 집계하거나 변형하는 작업등이 가능
- Spark Streaming의 position은 micro-batch 영역
- in-stream으로 들어오는 데이터에 대해 작은 batch로 만들어서 RDD연산을 수행
- DStream
- 스파크 스트리밍에서 사용할 수 있도록 재구성한 데이터 형태
- Discretized Stream(DStream): 불연속적 스트림
- 데이터를 끊어서 연속된 RDD로 만들어 처리
- 데이터를 아주 짧은 주기로 처리
- 개발자가 지정한 단위의 시간동안 들어온 데이터를, 묶음으로 Batch 처리를 하게 됨
- Batch processing(일괄 처리) 컴퓨터 프로그램 흐름에 따라 순차적으로 자료를 처리하는 방식 개별적으로 어떤 요청이 있을 때마다 실시간으로 통시하는 것이 아닌 한꺼번에 일괄적으로 대량 건을 처리하는 것
- 새로운 디스트림을 만들어 낼 수 있는 트랜스포메이션 연산
- 외부 시스템에 데이터를 써주는 출력 연산
- RDD와 동일한 연산을 지원
- 시간 관련이나 슬라이딩 윈도우 같은 실시간 분석을 위한 특별한 기능도 지원
- StreamingContext
- 스파크 스트리밍에서 사용하는 객체
- DStream을 생성하는 다양한 메서드를 제공
- 동일한 SparkContext를 사용해서 StreamingContext 인스턴스를 여러개 생성할 수 있음
- 하지만 동일 JVM에서는 StreamingContext를 한 번에 하나 이상 시작할 수 없음
- 종료된 StreamingContext는 다시 시작할 수 없음.
- 대신 SparkContext를 재사용해서 새로운 StreamingContext를 생성하여 사용
- 소스 (DStream, RDD) 생성과 스트리밍 처리 시작, 종료 등을 수행
- SparkConf
- 여러가지 설정을 저장
- AppName과 master 주소
- Input DStream
- Input data를 표현하는 DStream, Receiver와 연동
- Receiver
- 건 별로 들어오는 데이터를 모아서 처리할 수 있도록 처리하는 친구
- 데이터를 받아서 Spark 메모리에 저장해놓음
- 미니배치
- 데이터를 작은 배치 단위로 잘라 각 노드에 분산/처리 함
- 완전한 실시간이라기보다는 마이크로배치 개념
- Runtime and Programming Model
- Runtime과 Programming Model에 따라 처리가 가능한 동작 방식과 제약 사항들이 결정 → 가장 중요한 특성
- Streaming 시스템을 구현하기 위한 두 가시 서로 다른 방법이 있음
- 유입되는 모든 records, 혹은 events를 스트리밍 시스템에 도착하는 시점에 하나씩 처리하는 Native stream 방식
- Native steraming 방식의 최대 장점은 모든 표현(로직 처리)이 가능
- 데이터가 유입되는 즉시 처리를 하기 때문에 Micro-batching 방식보다 Latency측면의 장점이 있음
- 상태 관리에 대한 구현이 비교적 쉬운 편
- 모든 레코드를 각각 처리하기 때문에 Throughput은 낮고 장애처리를 위한 비용이 큼
- 특정 키를 가지고 파티셔닝 처리를 하기 위한 요구가 있을 때에, 특정 키에 전체 데이터가 집중되게 되면 해당 Job의 병목요소가 될 수 있는 단점도 존재
- 유입되는 records를 짧은 주기의 batches 처리가 가능한 단위로 묶어서 스트리밍 시스템으로 보내는 방식인 Micro-batching
- 일반적으로 짧은 주기는 수 초 정도
- 작은 단위의 batch 처리로 인해 연산을 수행하는 데 있어표현할 수 있는 로직에 제약을 받게 됨
- 상태 관리나 join, split 등의 특정 오퍼레이션의 구현이 상대적으로 어려움
- batch의 주기는 인프라의 상태와 비지니스 로직 관계가 될 수 밖에 없음
- 장애 복구나 로드밸런싱 등의 구현이 상대적으로 용이한 편
- Programming Model
- Compositional
- 목표로하는 topology를 만들기 위해 기본적인 sources와 operation을 구축할 수 있는 기능을 제공
- Declarative
- Declarative API operators 에서는 추상화된 함수형 코드를 작성하거나 topology를 최적화 하기 위한 함수, windowing 함수, 상태 관리 등의 보다 상위 operation 과 function들을 제공
- Compositional
- 어떤 Programming 모델을 지원하느냐에 따라 플랫폼의 많은 특성(Features)이 결정되기 때문에 여러가지 사용 예를 충분히 컴토해야 함.
- Funtional Primitives
- 단일 노드에서 제공되는 기본적인 map, filter 등의 기능(비교적 구현이 쉬움)이 아니라, 서로 다른 노드의 데이터에 대한 aggregation, join 과 같은 기능들도 제공될 수 있어야 함
- State Management
- 대부분의 애플리케이션은 상태에 대한 관리가 필요하고 플랫폼에서 상태 정보를 관리하고 업데이트 하는 것이 허락되어야 함
- Message Delivery Guarantees
- Most once데이터 유실이 발생할 수 있음
- 메세지가 중복을 허용하지 않도록 한 번만 전달하는 것
- At least once데이터의 중복은 허용
- 여러 번의 메세지 전달 시도를 통해 적어도 한 번의 메세지 전송 성공ㄷ을 보장하는 방식
- Exactly once중복과 유실 둘 다 허용하지 않음
- 정확하게 한 번의 메세지 전달이 되어야 하는 방식
- Failures
- 장애 발생은 네트웤, 디스크, 서버 다운 등의 다양한 원인이 있을 수 있으나, 플랫폼은 이와 같은 장애로 부터 큰 영향 없이 복구가 가능해야 함
- Latency, Throughtput and Scalability
- 스트리밍 처리 플랫폼에 있어서는 Latency, Throughput, Scalability 모두 성능과 관련있는 매우 중요한 요소들
- Maturity and Adoption Leve & Ease of Development and Ease of Operability
- 많은 라이브러리들이 있는지, Stackoverflow에 많은 답변들이 있는지 등 플랫폼의 성숙도를 평가하고, 쉬운 개발과 적용이 가능한지 여부도 중요한 요소
- Storm
- 2010sus Nathan Marz에 의해서 만들어짐
- Twitter에 의해 오픈소스화 됨
- 2014년 Apache Top Level 프로젝트가 됨
- Large Sacle Streaming Processing 플랫폼의 선구자이며 업계 표준
- low-level API를 제공하는 native streaming 시스템으로 topology구현을 위해 다양한 언어를 지원함
- Storm Trident
- Storm 위에 구현될 수 있는 고차원 micro-batching 시스템
- topology 구축 과정을 간소화 하고 windowing, aggregation, 상태 관리 등의 고차원 operation을 쉽게 추가할 수 있음
- 메세지 전달 방식이 Storm의 Most once 방식과는 반대로 Exactly once 방식을 제공
- Spark
- sparkSQL. MLib, Spark Streaming 을 필두로 최근 가장 인기 있는 batch processing 플랫폼
- 기본적으로 Spark의 runtime은 batch processing을 할 수 있도록 build가 됨
- micro batching을 처리할 수 있는 spark streaming이 약간 뒤늦게 추가 됨
- Spark Streaming에서는 input data가 receiver로 들어오게 되면, micro-batch 들을 생성하여 기본적인 Spark의 Job을 처리하는 방식(batch processing)과 동일하게 데이터를 처리하게 됨
- Java, Scala, Python 등의 언어를 지원함
- Samza
- Kafka와 더불어 LinkdeIn에서 독점적으로 개발한 Streaming 처리 플랫폼
- 기본적으로 Kafka의 로그 데이터를 처리한다는 철학을 바탕으로 두 개의 플랫폼이 매우 잘 통합되도록 구성되어 있음
- Compositional API와 Scala를 지원
- Flink
- 2008년에 만들어진 오래된 프로젝트 but 최근에 주목
- high-level API를 지원하는 native streaming 플랫폼
- Spark와 마찬가지로 batch 처리를 위한 API 역시 지원
- Spark와의 차이는 Fllink에서는 데이터 단위를 batch 단위로 처리하는 것 자체를 꽤 예외적인 케이스로 생각
- 참고자료Apache Spark Streaming슬라이딩 윈도우(Sliding Window) > 도리의 디지털라이프
- 아파치 실시간 처리 프레임워크 비교분석 (1) | Popit
- 람다 아키텍처 (Lambda Architecture)
- 스트림 프로세싱 - 스톰, 카프카, 삼자, 플링크 등등
- Dstream vs Structured Streaming(좀 더 안정적이다)
- Streaming Context
- 마이크로배치
- 슬라이딩윈도우
- 내부적으로 동작하는 방식
- 실습 - 자바 / 스칼라 / 파이썬
- Resilient Distributed Datasets
- 스파크의 기본 데이터 구조
- 분산 변경 불가능한 객체 모음
- 스파크의 모든 작업은 새로운 RDD를 만들거나 존재하는 RDD를 변형하거나 결과 계산을 위해 RDD에서 연산하는 것을 표현하고 있음
- 스파크는 빠른 mapreduce 작업을 RDD개념을 이용해 사용
- HDFS에 접근하는 게 아닌 Memory에 보관하여 실행시간을 줄여줌
- 스트리밍: 실시간으로 끊임없이 들어오는 데이터
- Spark Streaming
- 실시간으로 들어오는 데이터를 처리하기 위한 모듈
- 다양한 데이터 소스(Kafka, HDFS 등)로부터 데이터를 받아서 실시간 스트리밍 처리를 함.
- 스트리밍 데이터를 구조적으로(테이블 형태) 사용하려면 Spark Structured Streaming을 사용
- Spark RDD와 사용방법이 유사
- lambda 아키텍쳐를 만들기 좋음
- Structured Streaming
- Spark2.X에서 새롭게 나온 Spark SQL 엔진 위에 구축된 Stream Processing Framework
- input으로 들어오는 stream 데이터에 대해 table 형식으로 append 할 수 있음
- DataFrame을 통해 streaming으로 들어오는 데이터를 질의하거나 집계하거나 변형하는 작업등이 가능
- Spark Streaming의 position은 micro-batch 영역
- in-stream으로 들어오는 데이터에 대해 작은 batch로 만들어서 RDD연산을 수행
- DStream
- 스파크 스트리밍에서 사용할 수 있도록 재구성한 데이터 형태
- Discretized Stream(DStream): 불연속적 스트림
- 데이터를 끊어서 연속된 RDD로 만들어 처리
- 데이터를 아주 짧은 주기로 처리
- 개발자가 지정한 단위의 시간동안 들어온 데이터를, 묶음으로 Batch 처리를 하게 됨
- Batch processing(일괄 처리) 컴퓨터 프로그램 흐름에 따라 순차적으로 자료를 처리하는 방식 개별적으로 어떤 요청이 있을 때마다 실시간으로 통시하는 것이 아닌 한꺼번에 일괄적으로 대량 건을 처리하는 것
- 새로운 디스트림을 만들어 낼 수 있는 트랜스포메이션 연산
- 외부 시스템에 데이터를 써주는 출력 연산
- RDD와 동일한 연산을 지원
- 시간 관련이나 슬라이딩 윈도우 같은 실시간 분석을 위한 특별한 기능도 지원
- StreamingContext
- 스파크 스트리밍에서 사용하는 객체
- DStream을 생성하는 다양한 메서드를 제공
- 동일한 SparkContext를 사용해서 StreamingContext 인스턴스를 여러개 생성할 수 있음
- 하지만 동일 JVM에서는 StreamingContext를 한 번에 하나 이상 시작할 수 없음
- 종료된 StreamingContext는 다시 시작할 수 없음.
- 대신 SparkContext를 재사용해서 새로운 StreamingContext를 생성하여 사용
- 소스 (DStream, RDD) 생성과 스트리밍 처리 시작, 종료 등을 수행
- SparkConf
- 여러가지 설정을 저장
- AppName과 master 주소
- Input DStream
- Input data를 표현하는 DStream, Receiver와 연동
- Receiver
- 건 별로 들어오는 데이터를 모아서 처리할 수 있도록 처리하는 친구
- 데이터를 받아서 Spark 메모리에 저장해놓음
- 미니배치
- 데이터를 작은 배치 단위로 잘라 각 노드에 분산/처리 함
- 완전한 실시간이라기보다는 마이크로배치 개념
- Runtime and Programming Model
- Runtime과 Programming Model에 따라 처리가 가능한 동작 방식과 제약 사항들이 결정 → 가장 중요한 특성
- Streaming 시스템을 구현하기 위한 두 가시 서로 다른 방법이 있음
- 유입되는 모든 records, 혹은 events를 스트리밍 시스템에 도착하는 시점에 하나씩 처리하는 Native stream 방식
- Native steraming 방식의 최대 장점은 모든 표현(로직 처리)이 가능
- 데이터가 유입되는 즉시 처리를 하기 때문에 Micro-batching 방식보다 Latency측면의 장점이 있음
- 상태 관리에 대한 구현이 비교적 쉬운 편
- 모든 레코드를 각각 처리하기 때문에 Throughput은 낮고 장애처리를 위한 비용이 큼
- 특정 키를 가지고 파티셔닝 처리를 하기 위한 요구가 있을 때에, 특정 키에 전체 데이터가 집중되게 되면 해당 Job의 병목요소가 될 수 있는 단점도 존재
- 유입되는 records를 짧은 주기의 batches 처리가 가능한 단위로 묶어서 스트리밍 시스템으로 보내는 방식인 Micro-batching
- 일반적으로 짧은 주기는 수 초 정도
- 작은 단위의 batch 처리로 인해 연산을 수행하는 데 있어표현할 수 있는 로직에 제약을 받게 됨
- 상태 관리나 join, split 등의 특정 오퍼레이션의 구현이 상대적으로 어려움
- batch의 주기는 인프라의 상태와 비지니스 로직 관계가 될 수 밖에 없음
- 장애 복구나 로드밸런싱 등의 구현이 상대적으로 용이한 편
- Programming Model
- Compositional
- 목표로하는 topology를 만들기 위해 기본적인 sources와 operation을 구축할 수 있는 기능을 제공
- Declarative
- Declarative API operators 에서는 추상화된 함수형 코드를 작성하거나 topology를 최적화 하기 위한 함수, windowing 함수, 상태 관리 등의 보다 상위 operation 과 function들을 제공
- Compositional
- 어떤 Programming 모델을 지원하느냐에 따라 플랫폼의 많은 특성(Features)이 결정되기 때문에 여러가지 사용 예를 충분히 컴토해야 함.
- Funtional Primitives
- 단일 노드에서 제공되는 기본적인 map, filter 등의 기능(비교적 구현이 쉬움)이 아니라, 서로 다른 노드의 데이터에 대한 aggregation, join 과 같은 기능들도 제공될 수 있어야 함
- State Management
- 대부분의 애플리케이션은 상태에 대한 관리가 필요하고 플랫폼에서 상태 정보를 관리하고 업데이트 하는 것이 허락되어야 함
- Message Delivery Guarantees
- Most once데이터 유실이 발생할 수 있음
- 메세지가 중복을 허용하지 않도록 한 번만 전달하는 것
- At least once데이터의 중복은 허용
- 여러 번의 메세지 전달 시도를 통해 적어도 한 번의 메세지 전송 성공ㄷ을 보장하는 방식
- Exactly once중복과 유실 둘 다 허용하지 않음
- 정확하게 한 번의 메세지 전달이 되어야 하는 방식
- Failures
- 장애 발생은 네트웤, 디스크, 서버 다운 등의 다양한 원인이 있을 수 있으나, 플랫폼은 이와 같은 장애로 부터 큰 영향 없이 복구가 가능해야 함
- Latency, Throughtput and Scalability
- 스트리밍 처리 플랫폼에 있어서는 Latency, Throughput, Scalability 모두 성능과 관련있는 매우 중요한 요소들
- Maturity and Adoption Leve & Ease of Development and Ease of Operability
- 많은 라이브러리들이 있는지, Stackoverflow에 많은 답변들이 있는지 등 플랫폼의 성숙도를 평가하고, 쉬운 개발과 적용이 가능한지 여부도 중요한 요소
- Storm
- 2010sus Nathan Marz에 의해서 만들어짐
- Twitter에 의해 오픈소스화 됨
- 2014년 Apache Top Level 프로젝트가 됨
- Large Sacle Streaming Processing 플랫폼의 선구자이며 업계 표준
- low-level API를 제공하는 native streaming 시스템으로 topology구현을 위해 다양한 언어를 지원함
- Storm Trident
- Storm 위에 구현될 수 있는 고차원 micro-batching 시스템
- topology 구축 과정을 간소화 하고 windowing, aggregation, 상태 관리 등의 고차원 operation을 쉽게 추가할 수 있음
- 메세지 전달 방식이 Storm의 Most once 방식과는 반대로 Exactly once 방식을 제공
- Spark
- sparkSQL. MLib, Spark Streaming 을 필두로 최근 가장 인기 있는 batch processing 플랫폼
- 기본적으로 Spark의 runtime은 batch processing을 할 수 있도록 build가 됨
- micro batching을 처리할 수 있는 spark streaming이 약간 뒤늦게 추가 됨
- Spark Streaming에서는 input data가 receiver로 들어오게 되면, micro-batch 들을 생성하여 기본적인 Spark의 Job을 처리하는 방식(batch processing)과 동일하게 데이터를 처리하게 됨
- Java, Scala, Python 등의 언어를 지원함
- Samza
- Kafka와 더불어 LinkdeIn에서 독점적으로 개발한 Streaming 처리 플랫폼
- 기본적으로 Kafka의 로그 데이터를 처리한다는 철학을 바탕으로 두 개의 플랫폼이 매우 잘 통합되도록 구성되어 있음
- Compositional API와 Scala를 지원
- Flink
- 2008년에 만들어진 오래된 프로젝트 but 최근에 주목
- high-level API를 지원하는 native streaming 플랫폼
- Spark와 마찬가지로 batch 처리를 위한 API 역시 지원
- Spark와의 차이는 Fllink에서는 데이터 단위를 batch 단위로 처리하는 것 자체를 꽤 예외적인 케이스로 생각
- in-memory 기반 범용 클러스터 컴퓨팅 엔진
- 하둡 맵리듀스보다 100배 빠름
- unified engine
- batch/stream, SQL/ML, Graph processing 제공
- 다양한 언어 지원
- java/scala/python/r
- 여러 클러스터 매니저를 지원하여 다양한 환경에서 구동 가능함
- standalone, YARN, mesos
spark philosophy
- unified engine
- high-level APIs
- Integrate braodly
why spark streaming?
- 스트리밍 데이터란 ?
- log 데이터/날씨처럼 계속해서 생성되고 쌓이는 데이터
- 스파크 스트리밍은 데이터 배치 주기를 짧게 만들어서 실시간인 것처럼 처리하ㄴ 것이다.
- 데이터를 실시간으로 처리하고 싶을 때
- 웹사이트 모니터링
- 변경사항 반영
- 실시간 데이터로 ML 모델 학습
- 문제를 바로 파악
- 같은 프레임워크에 배치 + 스트리밍을 같이 처리
what is spark streaming?
- 배치를 작게 만들어서 스트리밍인 것처럼 돌린다.
- stream data를 시간 간격으로 분할한다.
- 분할된 데이터를 대상으로 배치를 수행한다.
- 각 배치는 기존의 spark job과 동일하게 처리한다.
streaming context
- park streaming을 사용하기 위해 제일 먼저 생성하는 인스턴스
- sparkcontext, sparksession과 유사한 개념
- 어떤 주기로 배치 처리를 수행할 것인지에 대한 정보를 함께 제공한다.
- sparkconf, sparkcontext를 이용해 생성함.
programming model - DStream
- Discretized Stream(DStream)
- 끊임없이 생성되는 연속된 데이터를 나타내기 위한 데이터 모델(연속된 데이터 스트림)
- 일정 시간마다 데이터를 모아서 RDD를 만들어 준다. (or.. 다른 Dstream으로부터 연산하여 생성)
- RDD로 구성된 시퀀스
- 연속된 데이터를 나타내 위한 추상적인 모델
- 데이터를 읽어서 spark에서 사용할 데이터 모델 인스턴스를 생성한다.
- 여러 가지 소스로부터 Dstream을 생성할 수 있도록 별도의 메소드를 제공하여 지원한다.
How to use?
tutorial with tweepysudo apt-get update sudo apt-get install default-jre sudo apt-get install scala sudo pip3 install py4j ## spark 사이트에서 spark를 다운 받은 후에, 파일 이름을 복사해온다. sudo tar -zxvf spark-3.1.2-bin-hadoop3.2.tgz export SPARK_HOME='home/ubuntu/spark-3.1.2-bin-hadoop3.2' export PATH=$SPARK_HOME:$PATH export PYTHONPATH=$SPARK_HOME/python:$PYTHONPATH export PYSPARK_DRIVER_PY export PYSPARK_DRIVER_PYTHON="jupyter" export PYSPARK_DRIVER_PYTHON=OPTS="notebook" export PYSPARK_PYTHON=python3 ## spark file이 locked되어 있어서, 이를 읽기/수정하기 위한 명령어 ## 777 extension의 경우, file을 read/write/execute할 수 있게 해줌.goal : running our first streacd ming project- spark streaming allows for tracking frequently-updated datasets
- can use it to track most popular hashtags for a subject on twitter,
- in set time intervals, based on their counts in a twitter stream.
- this is made possible with streaming contexts.→ tcp socket→ data : the most common hashtags in tweets
- → spark
- → twitter HTTP client app
- apps.twitter.com에서 가입 + 등록한다.
- create new app을 해서 token을 저장해둔다.
- git 없는 경우는,
- 실습 file 구조
- 터미널 1
- 에러 및 해결과정Traceback (most recent call last): File "TweetRead.py", line 46, in <module> s.bind((host, port)) # Bind to the port OSError: [Errno 98] Address already in usestep 1.sudo apt install net-toolsstep 2.netstat -lntpstep 3.kill -9 48163[PID}해결 완료!https://banbanmumani.github.io/2017/12/19/리눅스포트로프로세스죽이기/
- 참고 - https://philip1994.tistory.com/6
- 에러 : OS error address already used.
- 터미널 1
- 터미널 2
- 주피터 노트북에서 'first twitter app'에 접속
- first twitter app 의 코드를 하나씩 실행
- 터미널 3
- step 5. 주피터 노트북 first twitter app
- error again..→ https://sigdelta.com/blog/how-to-install-pyspark-locally/
- 이용해볼 것.
- Exception: Unable to find py4j, your SPARK_HOME may not be configured correctly
- continuous stream of data or input data stream received from the source or the process data stream generated by transforming the input stream
- RDDs : sparks abstraction of an immutable distributed data set
- each RDD in data stream contains data from a certain interval as shown in the figure
- [ ] pyspark - setup
- [ ] pyspark - streaming with twitter
- [ ] pyspark - discretized streams (DStreams)
- [ ] pyspark - create DStreams
- [ ] pyspark - transformations on DStreams
- [ ] pyspark - Transformation operations on DStreams
- [ ] pyspark - perform window operations
- [ ] pyspark - what is window
- [ ] pyspark - windows transformation - countbywindow
- [ ] pyspark - reducebykeyandwindow
- [ ] pyspark - countbyvalueandwindow
- [ ] pyspark - output operations on Dstreams
- [ ] pyspark - understanding forEachRDD
- [ ] pyspark - SQL operations
- [ ] pyspark - reviewing the basic
- [ ] pyspark - join operations
- [ ] pyspark - stateful transformations
- [ ] pyspark - checkpointing / how to achieve it
- [ ] pyspark - accumulators
- [ ] pyspark - fault tolerance
- [ ] pyspark - achieving performance tuning
- [ ] pyspark - streaming with kafka
- [ ] pyspark - streaming with kinesis
- [ ] pyspark - structured streaming
- [ ] pyspark - operations on streaming dataframes and datasets
- [ ] pyspark - performing window operations on structured streams
- [ ] pyspark - handling late data and watermarking
- 남은 과정들
- Dstream
- :~16:08
- 클러스터 분산처리
- 데이터를 넣어주는 걸 넣어주면 어떻까?
- spark-streaming 실습을 위해서는 터미널에서 포트를 돌려주어야 한다.
- ㄴ First Twitter App.ipynb
- ㄴ TweetRead.ipynb
- step 1. spark 설치 및 환경 설정
- 트위터 파일 모으기
- 스트리밍 도래
- 지금까지의 데이터 중 90퍼 이상이 최근 2년(2018) → 현재는 더 많음
- 자는 시간 빼면 하루종일 인터넷 사용
- 빠른 의사 결정 위한 실시간 처리
- 람다 vs 카파
- 단위별 배치분석, 스트리밍 솔루션으로 실시간 처리 후 반영
- 네이티브 스트리밍 vs 마이크로배치 - 차이 언급 필요
- 네이티브 : 스톰-트리덴트, 스톰, 플링크, 카프카, 삼자 등 앵간치
- 레코드 별로 처리, 지연율 적음
- 내결함성 보장을 위해 트래킹해야할게 있어서 처리량 비교적 낮음
- 상태관리 쉬움(왜?)
- https://www.upsolver.com/blog/batch-stream-a-cheat-sheet
- https://stackoverflow.com/questions/39715803/what-is-the-difference-between-mini-batch-vs-real-time-streaming-in-practice-no
- https://www.cloverdx.com/blog/real-time-data-processing-versus-micro-batch-processing
- 윈도우 집계
- 일정기간 처리한 작업들 살펴보는 것도 중요
- 텀블링 : 윈도우가 겹치지 않게
- 슬라이딩 : 좀 더 짧은 보고 기간으로
- 상태 기반 처리
- 이전에 처리했던 데이터를 활용해 이번 데이터 처리
- 더 많은 컴퓨팅 리소스 필요(중간값 유지) → 대부분의 요구사항이 상태 기반
- 비상태 기반 처리가 더 풍부한 처리가 어려울 것으로 생각됨(잘 모름) → 대신 더 안정적인 스트림 처리
- https://medium.com/@shivagarg91/state-management-stateful-stateless-aggregations-on-unbounded-data-in-structured-streaming-1-3-6cf95cc32724
- 타임스탬프 & 워터마크
- 데이터 생성된 시간/처리에 들어온 시간이 반드시 찍힘 → 타임스탬프
- 임베디드에서도 내부적으로 타이머 달려있으면 로그찍을때 거의 무조건 찍음
- 근데 실제로 생성된 시간에 맞춰 곧바로 처리되지는 않음 - 집계에서 반영 잘 안됨 → 워터마크 등장
- 무슨 경계값을 만들어내는데, 잘 모르겠음
- https://databricks.com/blog/2017/05/08/event-time-aggregation-watermarking-apache-sparks-structured-streaming.html
- Dstream
- 스파크에서 돌아가는 원조 스트리밍,
- https://spark.apache.org/docs/2.4.0/streaming-programming-guide.html
- 구조적 스트리밍
- 스팤sql 위에서 돌아가는 스트리밍 처리. sql의 최적화 기법들 다 상속받아서 동작
- https://spark.apache.org/docs/2.4.0/structured-streaming-programming-guide.html
-
- Storm
- 2010sus Nathan Marz에 의해서 만들어짐
- Twitter에 의해 오픈소스화 됨
- 2014년 Apache Top Level 프로젝트가 됨
- Large Sacle Streaming Processing 플랫폼의 선구자이며 업계 표준
- low-level API를 제공하는 native streaming 시스템으로 topology구현을 위해 다양한 언어를 지원함
- Storm Trident
- Storm 위에 구현될 수 있는 고차원 micro-batching 시스템
- topology 구축 과정을 간소화 하고 windowing, aggregation, 상태 관리 등의 고차원 operation을 쉽게 추가할 수 있음
- 메세지 전달 방식이 Storm의 Most once 방식과는 반대로 Exactly once 방식을 제공
- Spark
- sparkSQL. MLib, Spark Streaming 을 필두로 최근 가장 인기 있는 batch processing 플랫폼
- 기본적으로 Spark의 runtime은 batch processing을 할 수 있도록 build가 됨
- micro batching을 처리할 수 있는 spark streaming이 약간 뒤늦게 추가 됨
- Spark Streaming에서는 input data가 receiver로 들어오게 되면, micro-batch 들을 생성하여 기본적인 Spark의 Job을 처리하는 방식(batch processing)과 동일하게 데이터를 처리하게 됨
- Java, Scala, Python 등의 언어를 지원함
- Samza
- Kafka와 더불어 LinkdeIn에서 독점적으로 개발한 Streaming 처리 플랫폼
- 기본적으로 Kafka의 로그 데이터를 처리한다는 철학을 바탕으로 두 개의 플랫폼이 매우 잘 통합되도록 구성되어 있음
- Compositional API와 Scala를 지원
- Flink
- 2008년에 만들어진 오래된 프로젝트 but 최근에 주목
- high-level API를 지원하는 native streaming 플랫폼
- Spark와 마찬가지로 batch 처리를 위한 API 역시 지원
- Spark와의 차이는 Fllink에서는 데이터 단위를 batch 단위로 처리하는 것 자체를 꽤 예외적인 케이스로 생각스트림 플랫폼
- 사실 스파크(스톰-트리덴트) 빼고 전부 다 리얼타임 스트리밍
- 다들 지연율 낮고 처리량 높음 → 뭐가 다름?
- 많이 쓰여서 자료도 많고 mature 한 애들을 자주 사용하는듯
- 스톰: 하둡에코시스템 상에서의 근본 스트리밍. 조상님 격
- 카프카 : 스트림 라이브러리로 제공해서 개발자가 앱 배포할때 스트리밍 기능 추가. 대신 따로 클러스터를 두고 관리, 스팤 코어에서 돌아가는 mllib 등 연계 불가능
- 삼자: 카프카와 연결된 스트림처리 서비스, 카프카에서 데이터 가져와서 스트림처리하고 다시 카프카에 넣어놓는.
- https://www.popit.kr/tag/실시간-처리-플랫폼
- https://medium.com/@chandanbaranwal/spark-streaming-vs-flink-vs-storm-vs-kafka-streams-vs-samza-choose-your-stream-processing-91ea3f04675b
- 참고자료Apache Spark Streaming슬라이딩 윈도우(Sliding Window) > 도리의 디지털라이프
- 아파치 실시간 처리 프레임워크 비교분석 (1) | Popit
- 람다 아키텍처 (Lambda Architecture)
- 스트림 프로세싱 - 스톰, 카프카, 삼자, 플링크 등등
- Dstream vs Structured Streaming(좀 더 안정적이다)
- Streaming Context
- 마이크로배치
- 슬라이딩윈도우
- 내부적으로 동작하는 방식
- 실습 - 자바 / 스칼라 / 파이썬
- Resilient Distributed Datasets
- 스파크의 기본 데이터 구조
- 분산 변경 불가능한 객체 모음
- 스파크의 모든 작업은 새로운 RDD를 만들거나 존재하는 RDD를 변형하거나 결과 계산을 위해 RDD에서 연산하는 것을 표현하고 있음
- 스파크는 빠른 mapreduce 작업을 RDD개념을 이용해 사용
- HDFS에 접근하는 게 아닌 Memory에 보관하여 실행시간을 줄여줌
- 스트리밍: 실시간으로 끊임없이 들어오는 데이터
- Spark Streaming
- 실시간으로 들어오는 데이터를 처리하기 위한 모듈
- 다양한 데이터 소스(Kafka, HDFS 등)로부터 데이터를 받아서 실시간 스트리밍 처리를 함.
- 스트리밍 데이터를 구조적으로(테이블 형태) 사용하려면 Spark Structured Streaming을 사용
- Spark RDD와 사용방법이 유사
- lambda 아키텍쳐를 만들기 좋음
- Structured Streaming
- Spark2.X에서 새롭게 나온 Spark SQL 엔진 위에 구축된 Stream Processing Framework
- input으로 들어오는 stream 데이터에 대해 table 형식으로 append 할 수 있음
- DataFrame을 통해 streaming으로 들어오는 데이터를 질의하거나 집계하거나 변형하는 작업등이 가능
- Spark Streaming의 position은 micro-batch 영역
- in-stream으로 들어오는 데이터에 대해 작은 batch로 만들어서 RDD연산을 수행
- DStream
- 스파크 스트리밍에서 사용할 수 있도록 재구성한 데이터 형태
- Discretized Stream(DStream): 불연속적 스트림
- 데이터를 끊어서 연속된 RDD로 만들어 처리
- 데이터를 아주 짧은 주기로 처리
- 개발자가 지정한 단위의 시간동안 들어온 데이터를, 묶음으로 Batch 처리를 하게 됨
- Batch processing(일괄 처리) 컴퓨터 프로그램 흐름에 따라 순차적으로 자료를 처리하는 방식 개별적으로 어떤 요청이 있을 때마다 실시간으로 통시하는 것이 아닌 한꺼번에 일괄적으로 대량 건을 처리하는 것
- 새로운 디스트림을 만들어 낼 수 있는 트랜스포메이션 연산
- 외부 시스템에 데이터를 써주는 출력 연산
- RDD와 동일한 연산을 지원
- 시간 관련이나 슬라이딩 윈도우 같은 실시간 분석을 위한 특별한 기능도 지원
- StreamingContext
- 스파크 스트리밍에서 사용하는 객체
- DStream을 생성하는 다양한 메서드를 제공
- 동일한 SparkContext를 사용해서 StreamingContext 인스턴스를 여러개 생성할 수 있음
- 하지만 동일 JVM에서는 StreamingContext를 한 번에 하나 이상 시작할 수 없음
- 종료된 StreamingContext는 다시 시작할 수 없음.
- 대신 SparkContext를 재사용해서 새로운 StreamingContext를 생성하여 사용
- 소스 (DStream, RDD) 생성과 스트리밍 처리 시작, 종료 등을 수행
- SparkConf
- 여러가지 설정을 저장
- AppName과 master 주소
- Input DStream
- Input data를 표현하는 DStream, Receiver와 연동
- Receiver
- 건 별로 들어오는 데이터를 모아서 처리할 수 있도록 처리하는 친구
- 데이터를 받아서 Spark 메모리에 저장해놓음
- 미니배치
- 데이터를 작은 배치 단위로 잘라 각 노드에 분산/처리 함
- 완전한 실시간이라기보다는 마이크로배치 개념
- Runtime and Programming Model
- Runtime과 Programming Model에 따라 처리가 가능한 동작 방식과 제약 사항들이 결정 → 가장 중요한 특성
- Streaming 시스템을 구현하기 위한 두 가시 서로 다른 방법이 있음
- 유입되는 모든 records, 혹은 events를 스트리밍 시스템에 도착하는 시점에 하나씩 처리하는 Native stream 방식
- Native steraming 방식의 최대 장점은 모든 표현(로직 처리)이 가능
- 데이터가 유입되는 즉시 처리를 하기 때문에 Micro-batching 방식보다 Latency측면의 장점이 있음
- 상태 관리에 대한 구현이 비교적 쉬운 편
- 모든 레코드를 각각 처리하기 때문에 Throughput은 낮고 장애처리를 위한 비용이 큼
- 특정 키를 가지고 파티셔닝 처리를 하기 위한 요구가 있을 때에, 특정 키에 전체 데이터가 집중되게 되면 해당 Job의 병목요소가 될 수 있는 단점도 존재
- 유입되는 records를 짧은 주기의 batches 처리가 가능한 단위로 묶어서 스트리밍 시스템으로 보내는 방식인 Micro-batching
- 일반적으로 짧은 주기는 수 초 정도
- 작은 단위의 batch 처리로 인해 연산을 수행하는 데 있어표현할 수 있는 로직에 제약을 받게 됨
- 상태 관리나 join, split 등의 특정 오퍼레이션의 구현이 상대적으로 어려움
- batch의 주기는 인프라의 상태와 비지니스 로직 관계가 될 수 밖에 없음
- 장애 복구나 로드밸런싱 등의 구현이 상대적으로 용이한 편
- Programming Model
- Compositional
- 목표로하는 topology를 만들기 위해 기본적인 sources와 operation을 구축할 수 있는 기능을 제공
- Declarative
- Declarative API operators 에서는 추상화된 함수형 코드를 작성하거나 topology를 최적화 하기 위한 함수, windowing 함수, 상태 관리 등의 보다 상위 operation 과 function들을 제공
- Compositional
- 어떤 Programming 모델을 지원하느냐에 따라 플랫폼의 많은 특성(Features)이 결정되기 때문에 여러가지 사용 예를 충분히 컴토해야 함.
- Funtional Primitives
- 단일 노드에서 제공되는 기본적인 map, filter 등의 기능(비교적 구현이 쉬움)이 아니라, 서로 다른 노드의 데이터에 대한 aggregation, join 과 같은 기능들도 제공될 수 있어야 함
- State Management
- 대부분의 애플리케이션은 상태에 대한 관리가 필요하고 플랫폼에서 상태 정보를 관리하고 업데이트 하는 것이 허락되어야 함
- Message Delivery Guarantees
- Most once데이터 유실이 발생할 수 있음
- 메세지가 중복을 허용하지 않도록 한 번만 전달하는 것
- At least once데이터의 중복은 허용
- 여러 번의 메세지 전달 시도를 통해 적어도 한 번의 메세지 전송 성공ㄷ을 보장하는 방식
- Exactly once중복과 유실 둘 다 허용하지 않음
- 정확하게 한 번의 메세지 전달이 되어야 하는 방식
- Failures
- 장애 발생은 네트웤, 디스크, 서버 다운 등의 다양한 원인이 있을 수 있으나, 플랫폼은 이와 같은 장애로 부터 큰 영향 없이 복구가 가능해야 함
- Latency, Throughtput and Scalability
- 스트리밍 처리 플랫폼에 있어서는 Latency, Throughput, Scalability 모두 성능과 관련있는 매우 중요한 요소들
- Maturity and Adoption Leve & Ease of Development and Ease of Operability
- 많은 라이브러리들이 있는지, Stackoverflow에 많은 답변들이 있는지 등 플랫폼의 성숙도를 평가하고, 쉬운 개발과 적용이 가능한지 여부도 중요한 요소
- Storm
- 2010sus Nathan Marz에 의해서 만들어짐
- Twitter에 의해 오픈소스화 됨
- 2014년 Apache Top Level 프로젝트가 됨
- Large Sacle Streaming Processing 플랫폼의 선구자이며 업계 표준
- low-level API를 제공하는 native streaming 시스템으로 topology구현을 위해 다양한 언어를 지원함
- Storm Trident
- Storm 위에 구현될 수 있는 고차원 micro-batching 시스템
- topology 구축 과정을 간소화 하고 windowing, aggregation, 상태 관리 등의 고차원 operation을 쉽게 추가할 수 있음
- 메세지 전달 방식이 Storm의 Most once 방식과는 반대로 Exactly once 방식을 제공
- Spark
- sparkSQL. MLib, Spark Streaming 을 필두로 최근 가장 인기 있는 batch processing 플랫폼
- 기본적으로 Spark의 runtime은 batch processing을 할 수 있도록 build가 됨
- micro batching을 처리할 수 있는 spark streaming이 약간 뒤늦게 추가 됨
- Spark Streaming에서는 input data가 receiver로 들어오게 되면, micro-batch 들을 생성하여 기본적인 Spark의 Job을 처리하는 방식(batch processing)과 동일하게 데이터를 처리하게 됨
- Java, Scala, Python 등의 언어를 지원함
- Samza
- Kafka와 더불어 LinkdeIn에서 독점적으로 개발한 Streaming 처리 플랫폼
- 기본적으로 Kafka의 로그 데이터를 처리한다는 철학을 바탕으로 두 개의 플랫폼이 매우 잘 통합되도록 구성되어 있음
- Compositional API와 Scala를 지원
- Flink
- 2008년에 만들어진 오래된 프로젝트 but 최근에 주목
- high-level API를 지원하는 native streaming 플랫폼
- Spark와 마찬가지로 batch 처리를 위한 API 역시 지원
- Spark와의 차이는 Fllink에서는 데이터 단위를 batch 단위로 처리하는 것 자체를 꽤 예외적인 케이스로 생각
- 참고자료Apache Spark Streaming슬라이딩 윈도우(Sliding Window) > 도리의 디지털라이프
- 아파치 실시간 처리 프레임워크 비교분석 (1) | Popit
- 람다 아키텍처 (Lambda Architecture)
- 스트림 프로세싱 - 스톰, 카프카, 삼자, 플링크 등등
- Dstream vs Structured Streaming(좀 더 안정적이다)
- Streaming Context
- 마이크로배치
- 슬라이딩윈도우
- 내부적으로 동작하는 방식
- 실습 - 자바 / 스칼라 / 파이썬
- Resilient Distributed Datasets
- 스파크의 기본 데이터 구조
- 분산 변경 불가능한 객체 모음
- 스파크의 모든 작업은 새로운 RDD를 만들거나 존재하는 RDD를 변형하거나 결과 계산을 위해 RDD에서 연산하는 것을 표현하고 있음
- 스파크는 빠른 mapreduce 작업을 RDD개념을 이용해 사용
- HDFS에 접근하는 게 아닌 Memory에 보관하여 실행시간을 줄여줌
- 스트리밍: 실시간으로 끊임없이 들어오는 데이터
- Spark Streaming
- 실시간으로 들어오는 데이터를 처리하기 위한 모듈
- 다양한 데이터 소스(Kafka, HDFS 등)로부터 데이터를 받아서 실시간 스트리밍 처리를 함.
- 스트리밍 데이터를 구조적으로(테이블 형태) 사용하려면 Spark Structured Streaming을 사용
- Spark RDD와 사용방법이 유사
- lambda 아키텍쳐를 만들기 좋음
- Structured Streaming
- Spark2.X에서 새롭게 나온 Spark SQL 엔진 위에 구축된 Stream Processing Framework
- input으로 들어오는 stream 데이터에 대해 table 형식으로 append 할 수 있음
- DataFrame을 통해 streaming으로 들어오는 데이터를 질의하거나 집계하거나 변형하는 작업등이 가능
- Spark Streaming의 position은 micro-batch 영역
- in-stream으로 들어오는 데이터에 대해 작은 batch로 만들어서 RDD연산을 수행
- DStream
- 스파크 스트리밍에서 사용할 수 있도록 재구성한 데이터 형태
- Discretized Stream(DStream): 불연속적 스트림
- 데이터를 끊어서 연속된 RDD로 만들어 처리
- 데이터를 아주 짧은 주기로 처리
- 개발자가 지정한 단위의 시간동안 들어온 데이터를, 묶음으로 Batch 처리를 하게 됨
- Batch processing(일괄 처리) 컴퓨터 프로그램 흐름에 따라 순차적으로 자료를 처리하는 방식 개별적으로 어떤 요청이 있을 때마다 실시간으로 통시하는 것이 아닌 한꺼번에 일괄적으로 대량 건을 처리하는 것
- 새로운 디스트림을 만들어 낼 수 있는 트랜스포메이션 연산
- 외부 시스템에 데이터를 써주는 출력 연산
- RDD와 동일한 연산을 지원
- 시간 관련이나 슬라이딩 윈도우 같은 실시간 분석을 위한 특별한 기능도 지원
- StreamingContext
- 스파크 스트리밍에서 사용하는 객체
- DStream을 생성하는 다양한 메서드를 제공
- 동일한 SparkContext를 사용해서 StreamingContext 인스턴스를 여러개 생성할 수 있음
- 하지만 동일 JVM에서는 StreamingContext를 한 번에 하나 이상 시작할 수 없음
- 종료된 StreamingContext는 다시 시작할 수 없음.
- 대신 SparkContext를 재사용해서 새로운 StreamingContext를 생성하여 사용
- 소스 (DStream, RDD) 생성과 스트리밍 처리 시작, 종료 등을 수행
- SparkConf
- 여러가지 설정을 저장
- AppName과 master 주소
- Input DStream
- Input data를 표현하는 DStream, Receiver와 연동
- Receiver
- 건 별로 들어오는 데이터를 모아서 처리할 수 있도록 처리하는 친구
- 데이터를 받아서 Spark 메모리에 저장해놓음
- 미니배치
- 데이터를 작은 배치 단위로 잘라 각 노드에 분산/처리 함
- 완전한 실시간이라기보다는 마이크로배치 개념
- Runtime and Programming Model
- Runtime과 Programming Model에 따라 처리가 가능한 동작 방식과 제약 사항들이 결정 → 가장 중요한 특성
- Streaming 시스템을 구현하기 위한 두 가시 서로 다른 방법이 있음
- 유입되는 모든 records, 혹은 events를 스트리밍 시스템에 도착하는 시점에 하나씩 처리하는 Native stream 방식
- Native steraming 방식의 최대 장점은 모든 표현(로직 처리)이 가능
- 데이터가 유입되는 즉시 처리를 하기 때문에 Micro-batching 방식보다 Latency측면의 장점이 있음
- 상태 관리에 대한 구현이 비교적 쉬운 편
- 모든 레코드를 각각 처리하기 때문에 Throughput은 낮고 장애처리를 위한 비용이 큼
- 특정 키를 가지고 파티셔닝 처리를 하기 위한 요구가 있을 때에, 특정 키에 전체 데이터가 집중되게 되면 해당 Job의 병목요소가 될 수 있는 단점도 존재
- 유입되는 records를 짧은 주기의 batches 처리가 가능한 단위로 묶어서 스트리밍 시스템으로 보내는 방식인 Micro-batching
- 일반적으로 짧은 주기는 수 초 정도
- 작은 단위의 batch 처리로 인해 연산을 수행하는 데 있어표현할 수 있는 로직에 제약을 받게 됨
- 상태 관리나 join, split 등의 특정 오퍼레이션의 구현이 상대적으로 어려움
- batch의 주기는 인프라의 상태와 비지니스 로직 관계가 될 수 밖에 없음
- 장애 복구나 로드밸런싱 등의 구현이 상대적으로 용이한 편
- Programming Model
- Compositional
- 목표로하는 topology를 만들기 위해 기본적인 sources와 operation을 구축할 수 있는 기능을 제공
- Declarative
- Declarative API operators 에서는 추상화된 함수형 코드를 작성하거나 topology를 최적화 하기 위한 함수, windowing 함수, 상태 관리 등의 보다 상위 operation 과 function들을 제공
- Compositional
- 어떤 Programming 모델을 지원하느냐에 따라 플랫폼의 많은 특성(Features)이 결정되기 때문에 여러가지 사용 예를 충분히 컴토해야 함.
- Funtional Primitives
- 단일 노드에서 제공되는 기본적인 map, filter 등의 기능(비교적 구현이 쉬움)이 아니라, 서로 다른 노드의 데이터에 대한 aggregation, join 과 같은 기능들도 제공될 수 있어야 함
- State Management
- 대부분의 애플리케이션은 상태에 대한 관리가 필요하고 플랫폼에서 상태 정보를 관리하고 업데이트 하는 것이 허락되어야 함
- Message Delivery Guarantees
- Most once데이터 유실이 발생할 수 있음
- 메세지가 중복을 허용하지 않도록 한 번만 전달하는 것
- At least once데이터의 중복은 허용
- 여러 번의 메세지 전달 시도를 통해 적어도 한 번의 메세지 전송 성공ㄷ을 보장하는 방식
- Exactly once중복과 유실 둘 다 허용하지 않음
- 정확하게 한 번의 메세지 전달이 되어야 하는 방식
- Failures
- 장애 발생은 네트웤, 디스크, 서버 다운 등의 다양한 원인이 있을 수 있으나, 플랫폼은 이와 같은 장애로 부터 큰 영향 없이 복구가 가능해야 함
- Latency, Throughtput and Scalability
- 스트리밍 처리 플랫폼에 있어서는 Latency, Throughput, Scalability 모두 성능과 관련있는 매우 중요한 요소들
- Maturity and Adoption Leve & Ease of Development and Ease of Operability
- 많은 라이브러리들이 있는지, Stackoverflow에 많은 답변들이 있는지 등 플랫폼의 성숙도를 평가하고, 쉬운 개발과 적용이 가능한지 여부도 중요한 요소
- in-memory 기반 범용 클러스터 컴퓨팅 엔진
- 하둡 맵리듀스보다 100배 빠름
- unified engine
- batch/stream, SQL/ML, Graph processing 제공
- 다양한 언어 지원
- java/scala/python/r
- 여러 클러스터 매니저를 지원하여 다양한 환경에서 구동 가능함
- standalone, YARN, mesos
spark philosophy
- unified engine
- high-level APIs
- Integrate braodly
why spark streaming?
- 스트리밍 데이터란 ?
- log 데이터/날씨처럼 계속해서 생성되고 쌓이는 데이터
- 스파크 스트리밍은 데이터 배치 주기를 짧게 만들어서 실시간인 것처럼 처리하ㄴ 것이다.
- 데이터를 실시간으로 처리하고 싶을 때
- 웹사이트 모니터링
- 변경사항 반영
- 실시간 데이터로 ML 모델 학습
- 문제를 바로 파악
- 같은 프레임워크에 배치 + 스트리밍을 같이 처리
what is spark streaming?
- 배치를 작게 만들어서 스트리밍인 것처럼 돌린다.
- stream data를 시간 간격으로 분할한다.
- 분할된 데이터를 대상으로 배치를 수행한다.
- 각 배치는 기존의 spark job과 동일하게 처리한다.
streaming context
- park streaming을 사용하기 위해 제일 먼저 생성하는 인스턴스
- sparkcontext, sparksession과 유사한 개념
- 어떤 주기로 배치 처리를 수행할 것인지에 대한 정보를 함께 제공한다.
- sparkconf, sparkcontext를 이용해 생성함.
programming model - DStream
- Discretized Stream(DStream)
- 끊임없이 생성되는 연속된 데이터를 나타내기 위한 데이터 모델(연속된 데이터 스트림)
- 일정 시간마다 데이터를 모아서 RDD를 만들어 준다. (or.. 다른 Dstream으로부터 연산하여 생성)
- RDD로 구성된 시퀀스
- 연속된 데이터를 나타내 위한 추상적인 모델
- 데이터를 읽어서 spark에서 사용할 데이터 모델 인스턴스를 생성한다.
- 여러 가지 소스로부터 Dstream을 생성할 수 있도록 별도의 메소드를 제공하여 지원한다.
- Storm
'Data Science > AI' 카테고리의 다른 글
Deep learning 기초 정리 | 퍼셉트론, 신경망, 3차신경망 학습, 오차역전파법 등 (0) | 2021.09.24 |
---|---|
NLP - attention (0) | 2021.09.24 |
What is Git and GitHub? | 깃, 깃허브 이용법 (0) | 2021.08.29 |
[8.9] 공동세션 분석 리뷰 (0) | 2021.08.10 |
[머신러닝] decision tree - 핸즈온 머신러닝 6장 (0) | 2021.07.31 |