본문 바로가기

streaming

Flink 시작하기 #7 Batch (DataSet API) Flink Batch는 streaming API와 거의 유사하다. 기능적으로 Streaming을 처리하는 방식을 지속적인 데이터가 아닌 bounded 데이터를 처리하는 개념이다. 하지만 내부적으로는 fault tolerance에 대한 처리에서 chkeck point가 아닌 재실행하는 방식을 사용하는 등 좀 다르게 처리되고 있지만 API를 사용하는 레벨에서는 알 필요는 없다. 가장 먼저 Stream처리와 다른 부분은 ExecutionEnvironment 를 가져오는 부분이 다르다. val env = ExecutionEnvironment.getExecutionEnvironment transformation API는 Streaming에서 사용하는 API와 사용법과 종류가 같다. 물론 스트림 데이터를 처리하는 .. 더보기
Flink 시작하기 #6 Windows 스트리밍 데이터는 unbounded 데이터로 처음과 끝의 개념이 없다. element의 데이터를 개별적으로 처리하는 연산만 사용한다면 큰 문제는 없지만, 집계연산을 사용한다면 문제가 생긴다. 만약 평균값을 계산한다고 한다면 끝이 없다면 할 수 없다. 그래서 스트리밍 데이터 처리 시스템에서는 Windows라는 개념이 존재한다. Windows는 쉽게 말해서 특정한 룰에 따라 일정 데이터를 모아 처리하는 개념이다. Flink Windows 구조는 아래와 같다. keyedStream와 DataSteam 별로 다른 API를 쓸분 구조는 동일하다. trigger, evictor, allowedLateness 구분은 선택사항이다. 간단하게 window() 만 구현하면 기본적은 window 기능을 사용할 수 있다. K.. 더보기
Flink 시작하기 #5 Streaming API #Streaming dataflow Flink의 streaming dataflow는 데이터를 받아오는 Data source, 그리고 데이터를 처리하는 Transformation, 데이터를 최종 처리하는 data Sink로 3단계로 구성된다. 구지 스트리밍이 아니여도 이 flow는 비슷할 것이다. 데이터를 가져와서 가공하고 저장하는 단계를 flink는 네이밍을 저렇게 한 것이다. dataflow의 구성은 아래 그림과 같다. 이 포스팅은 Flink 1.2 기준으로 작성됬다. #Data source source는 input에 해당하며 어디서부터 데이터를 가져올 것 인가를 정의하는 단계이다. flink는 기본적으로 StreamExecutionEnviroment로부터 다음의 stream source를 제공하고 있.. 더보기
Flink 시작하기 #2 Basic API Concept #DataSet and DataStream Flink는 크게 Streaming과 Batch 를 처리하는 방식에 따라 사용하는 API가 나뉜다. DataStream은 Streaming을 처리하기 위한 클래스이고 Batch는 DataSet을 사용한다. 두 클래스를 처리하는 elements가 무한으로 들어오느냐 아니면 끝이 있는 bounded 데이터냐가 가장 큰 차이이다. 두 클래스 모두 immutable한 속성을 가지고 있다. 즉, 변경되지 않는 콜렉션의 개념이다. #Anatomy of a Flink Program Flink 프로그램은 다음의 순서로서 동자 Obtain an execution environment: (ExecutionEnviroment를 생성해 DataStream, DataSet을 만들기 위.. 더보기
Flink 시작하기 #1 소개 (Basic Concept) #Flink란? stream processing framework for distributed, high-performing, always-available, and accurate data streaming applications. 라고 소개되고 있다. 간단히 말해 최근 많이 사용되는 apache Storm, Spark Streaming과 같은 스트리밍 & 배치 프로세싱 플랫폼이다. Flink는 Streaming model이 batch가 아닌 native 방식으로 스트림 처리에 대해 low latency 특성을 가진다. 그리고 Exactly-once를 보장하고 높은 처리량을 보이기 때문에 최근 스트림 처리 분야에서 곽광받고 있다. 실시간 처리 프레임워크 비교 포스팅에서 최근 많이 사용하고 있는 스트림 .. 더보기
Flink 시작하기 #3 Word Count Sample (Scala) Flink를 사용해 가장 기본 예제가 되는 Word Count 를 만들어보자. Scala, SBT를 사용한 예제이다. 우선 Dependency 다음과 같다. libraryDependencies += "org.apache.flink" % "flink-streaming-scala_2.11" % "1.1.3" 그리고 코드를 작성 해 보자 import org.apache.flink.streaming.api.scala._ import org.apache.flink.streaming.api.windowing.time.Time object WordCount { def main(args: Array[String]): Unit = { val env = StreamExecutionEnvironment.getExecutio.. 더보기
Flink 시작하기 #4 Flink Cluster(Standalone) 설치 Flink Cluster(Standalone) 설치 1. Requirements Java 1.7 or higher SSH 각 노드마다 java 1.7 이상을 미리 설치해 둔다. 예제에서는 Mac OSX 두개로 Flink Cluster(Standalone)을 세팅 할 것이다. 2. SSH 설정 passwordless SSH 설정: https://opentutorials.org/module/432/3742 Flink는 다른노드들을 SSH로 컨트롤한다. 따라서 아래와 같이 세팅하라고 나온다. having passwordless SSH and the same directory structure on all your cluster nodes 즉 비밀번호 없이 SSH로 접속할 수 있도록 세팅하고, 모든 노드들의 f.. 더보기
[Spark] Streaming Word Count 샘플 (Scala) Streaming Word Count 샘플 Spark Streaming 에서 Word Count 샘플 코드를 만들어보자 기존에 배치 프로세싱에서의 Word Counting 참고: http://gyrfalcon.tistory.com/110 Spark Streaming Dependency를 추가한다. Spark core와 동일버젼으로 추가한다. org.apache.spark spark-streaming_2.11 2.0.1 인풋 소스로 여러 다양한 방법이 있겠지만 가장 기본이 되는 Socket text 방식으로 text를 입력받는 방식을 사용한다. StreamingContext 으로 Stream Spark Context를 생성한다. 이때 시간 interval을 입력해야하는데 Spark Streaming은 일정.. 더보기