본문 바로가기

BigData

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를 보장하고 높은 처리량을 보이기 때문에 최근 스트림 처리 분야에서 곽광받고 있다. 실시간 처리 프레임워크 비교 포스팅에서 최근 많이 사용하고 있는 스트림 .. 더보기
람다 아키텍처 (Lambda Architecture) 람다 아키텍처란? 실시간 분석을 지원하는 빅데이터 아키텍쳐 대량의 데이터를 실시간으로 분석하기 어려우니 batch로 미리 만든 데이터와 실시간 데이터를 혼합해서 사용하는 방식이다. 위 그림은 람다 아키텍쳐의 구성을 설명하고 있다. 데이터가 생성되면 데이터 저장소에 저장을 한다. 이 데이터는 batch로 일정주기마다 배치 뷰를 만들어 낸다. 그리고 동일한 데이터를 실시간 데이터 처릴 통헤 real-time 뷰를 만들다. 그리고 이 두개를 혼합해 분석을 빠르지만 실시간 데이터가 반영된 분석을 할 수 있다. 람다 아키텍쳐는 총 3개의 layer로 구성된다. batch layer: raw 데이터가 저장되어 있고, batch 처리하여 배치 뷰 생성 serving layer: batch로 분석된 데이터가 저장되어 .. 더보기
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.. 더보기