Data Science/AI

What is Spark Streaming? | RDD, SparkStreaming, DStream, Sparkconfig | 작성 중

토마토. 2021. 9. 16. 10:59
  • 스트리밍 도래
    • 지금까지의 데이터 중 90퍼 이상이 최근 2년(2018) → 현재는 더 많음
    • 자는 시간 빼면 하루종일 인터넷 사용
    • 빠른 의사 결정 위한 실시간 처리
  • 람다 vs 카파
    • 단위별 배치분석, 스트리밍 솔루션으로 실시간 처리 후 반영
  • 네이티브 스트리밍 vs 마이크로배치 - 차이 언급 필요
  • 윈도우 집계
    • 일정기간 처리한 작업들 살펴보는 것도 중요
    • 텀블링 : 윈도우가 겹치지 않게
    • 슬라이딩 : 좀 더 짧은 보고 기간으로
  • 상태 기반 처리
  • 타임스탬프 & 워터마크
  • Dstream
  • 구조적 스트리밍
  • 스트림 플랫폼 RDD
    • Resilient Distributed Datasets
    • 스파크의 기본 데이터 구조
    • 분산 변경 불가능한 객체 모음
    • 스파크의 모든 작업은 새로운 RDD를 만들거나 존재하는 RDD를 변형하거나 결과 계산을 위해 RDD에서 연산하는 것을 표현하고 있음
    • 스파크는 빠른 mapreduce 작업을 RDD개념을 이용해 사용
    • HDFS에 접근하는 게 아닌 Memory에 보관하여 실행시간을 줄여줌
    Spark Streaming
    • 스트리밍: 실시간으로 끊임없이 들어오는 데이터
    • 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들을 제공
    • 어떤 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에 많은 답변들이 있는지 등 플랫폼의 성숙도를 평가하고, 쉬운 개발과 적용이 가능한지 여부도 중요한 요소
    Apache Streaming Landscape
    • 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 단위로 처리하는 것 자체를 꽤 예외적인 케이스로 생각
    RDD
    • Resilient Distributed Datasets
    • 스파크의 기본 데이터 구조
    • 분산 변경 불가능한 객체 모음
    • 스파크의 모든 작업은 새로운 RDD를 만들거나 존재하는 RDD를 변형하거나 결과 계산을 위해 RDD에서 연산하는 것을 표현하고 있음
    • 스파크는 빠른 mapreduce 작업을 RDD개념을 이용해 사용
    • HDFS에 접근하는 게 아닌 Memory에 보관하여 실행시간을 줄여줌
    Spark Streaming
    • 스트리밍: 실시간으로 끊임없이 들어오는 데이터
    • 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들을 제공
    • 어떤 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에 많은 답변들이 있는지 등 플랫폼의 성숙도를 평가하고, 쉬운 개발과 적용이 가능한지 여부도 중요한 요소
    Apache Streaming Landscape
    • 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
      step 2. register on twitterapps
      • apps.twitter.com에서 가입 + 등록한다.
      • create new app을 해서 token을 저장해둔다.
      step 3. download 실습 파일git clone <https://github.com/jleetutorial/python-spark-streaming.git> pyspark-streaming
      • git 없는 경우는,
      sudo apt-get install git
      • 실습 file 구조
      pyspark-streamingㄴ TweetRead.py로 구성되었으며,step 4. two terminal
      • 터미널 1
      cd 1_start/python3 TweetRead.py했더니 에러가 떠서 다시 공부중이다. 왤까? $ python3 TweetRead.py Listening on port: 5555
      • 터미널 2
      $ jupyter notebook
      • 주피터 노트북에서 'first twitter app'에 접속
      • first twitter app 의 코드를 하나씩 실행
      • 터미널 3
      $ sudo pip3 install findspark
      • step 5. 주피터 노트북 first twitter app First Twitter App.ipynb#import findspark import findspark #pyspark가 위치한 곳으로 설정해준다. findspark.init('/home/tomato/spark-3.1.2-bin-hadoop3.2') #나머지 pyspark를 가져와준다. # May cause deprecation warnings, safe to ignore, they aren't errors from pyspark import SparkContext from pyspark.streaming import StreamingContext from pyspark.sql import SQLContext from pyspark.sql.functions import desc # spark context를 생성시켜준다. # SQL context just allow us to set up dataframes with our stream data. # Can only run this once. restart your kernel for any errors. sc = SparkContext() # streaming context를 생성 # 배치는 10초마다 진행한다. ssc = StreamingContext(sc, 10 ) #sqlcontext도 생성시킨다. sqlContext = SQLContext(sc) # 다시 하면, 포트 넘버 바꾸어주어야 한다. socket_stream = ssc.socketTextStream("127.0.0.1", 5555) # sliding windows work lines = socket_stream.window( 20 ) #namedtuple #에 assign을 함 'tag' 'count' from collections import namedtuple fields = ("tag", "count" ) Tweet = namedtuple( 'Tweet', fields ) #?? # #로 시작하는 애를 걸러준다. 해시태그ㄹ 걸러ㄴ다. :) # Use Parenthesis for multiple lines or use \\. ( lines.flatMap( lambda text: text.split( " " ) ) #Splits to a list .filter( lambda word: word.lower().startswith("#") ) # Checks for hashtag calls .map( lambda word: ( word.lower(), 1 ) ) # Lower cases the word .reduceByKey( lambda a, b: a + b ) # Reduces .map( lambda rec: Tweet( rec[0], rec[1] ) ) # Stores in a Tweet Object .foreachRDD( lambda rdd: rdd.toDF().sort( desc("count") ) # Sorts Them in a DF .limit(10).registerTempTable("tweets") ) ) # Registers to a table.여기까지 한 뒤에, tweetread.py 파일을 터미널로 실행시킨다.import time from IPython import display import matplotlib.pyplot as plt import seaborn as sns import pandas # Only works for Jupyter Notebooks! %matplotlib inline ssc.start() count = 0 # 시각화 while count < 10: time.sleep( 3 ) top_10_tweets = sqlContext.sql( 'Select tag, count from tweets' ) top_10_df = top_10_tweets.toPandas() display.clear_output(wait=True) plt.figure( figsize = ( 10, 8 ) ) sns.barplot( x="count", y="tag", data=top_10_df) plt.show() count = count + 1 ssc.stop()https://stackoverflow.com/questions/63572803/error-unable-to-find-py4j-your-spark-home-may-not-be-configured-correctlyDStream
        • 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 colab상에서 뒤에 있는 애들을 조정할 수 있나?workflow가 이해가 안된다?
    • 클러스터 분산처리
    • 데이터를 넣어주는 걸 넣어주면 어떻까?
    • spark-streaming 실습을 위해서는 터미널에서 포트를 돌려주어야 한다.
    • ㄴ First Twitter App.ipynb
    • ㄴ TweetRead.ipynb
    • step 1. spark 설치 및 환경 설정
    • 트위터 파일 모으기
    • 스트리밍 도래
      • 지금까지의 데이터 중 90퍼 이상이 최근 2년(2018) → 현재는 더 많음
      • 자는 시간 빼면 하루종일 인터넷 사용
      • 빠른 의사 결정 위한 실시간 처리
    • 람다 vs 카파
      • 단위별 배치분석, 스트리밍 솔루션으로 실시간 처리 후 반영
    • 네이티브 스트리밍 vs 마이크로배치 - 차이 언급 필요
    • 윈도우 집계
      • 일정기간 처리한 작업들 살펴보는 것도 중요
      • 텀블링 : 윈도우가 겹치지 않게
      • 슬라이딩 : 좀 더 짧은 보고 기간으로
    • 상태 기반 처리
    • 타임스탬프 & 워터마크
    • Dstream
    • 구조적 스트리밍
      • 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 단위로 처리하는 것 자체를 꽤 예외적인 케이스로 생각스트림 플랫폼 RDD
          • Resilient Distributed Datasets
          • 스파크의 기본 데이터 구조
          • 분산 변경 불가능한 객체 모음
          • 스파크의 모든 작업은 새로운 RDD를 만들거나 존재하는 RDD를 변형하거나 결과 계산을 위해 RDD에서 연산하는 것을 표현하고 있음
          • 스파크는 빠른 mapreduce 작업을 RDD개념을 이용해 사용
          • HDFS에 접근하는 게 아닌 Memory에 보관하여 실행시간을 줄여줌
          Spark Streaming
          • 스트리밍: 실시간으로 끊임없이 들어오는 데이터
          • 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들을 제공
          • 어떤 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에 많은 답변들이 있는지 등 플랫폼의 성숙도를 평가하고, 쉬운 개발과 적용이 가능한지 여부도 중요한 요소
          Apache Streaming Landscape
          • 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 단위로 처리하는 것 자체를 꽤 예외적인 케이스로 생각
          RDD
          • Resilient Distributed Datasets
          • 스파크의 기본 데이터 구조
          • 분산 변경 불가능한 객체 모음
          • 스파크의 모든 작업은 새로운 RDD를 만들거나 존재하는 RDD를 변형하거나 결과 계산을 위해 RDD에서 연산하는 것을 표현하고 있음
          • 스파크는 빠른 mapreduce 작업을 RDD개념을 이용해 사용
          • HDFS에 접근하는 게 아닌 Memory에 보관하여 실행시간을 줄여줌
          Spark Streaming
          • 스트리밍: 실시간으로 끊임없이 들어오는 데이터
          • 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들을 제공
          • 어떤 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에 많은 답변들이 있는지 등 플랫폼의 성숙도를 평가하고, 쉬운 개발과 적용이 가능한지 여부도 중요한 요소
          Apache Streaming Landscape
      • 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을 생성할 수 있도록 별도의 메소드를 제공하여 지원한다.