Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Introduction to Apache Flink

Chiwan Park
December 22, 2015

Introduction to Apache Flink

Presentation about Apache Flink at 2015 Open-source Software Developer Center Conference in Korea(http://osscon.com).

Chiwan Park

December 22, 2015
Tweet

More Decks by Chiwan Park

Other Decks in Programming

Transcript

  1. 3 오늘은 이런 이야기를 해보려고 합니다. MapReduce와 Hadoop 소개 Post-MapReduce

    Framework로 나온 다양한 시도들 Apache Flink 소개 Apache Flink는 그래서 무엇이 좋은가
  2. 4 MapReduce 2004년 구글이 발표한 대용량 데이터 처리 방식 이후

    MapReduce와 분산 파일 시스템(GFS)을 구현한
 Hadoop 으로 인해 폭발적인 인기
  3. 4 MapReduce 2004년 구글이 발표한 대용량 데이터 처리 방식 이후

    MapReduce와 분산 파일 시스템(GFS)을 구현한
 Hadoop 으로 인해 폭발적인 인기 2015년 12월 16일
 15656번 인용
  4. 5 MapReduce Wordcount로 보는 MapReduce의 이해 전체 데이터의 단어별 개수를

    세는 작업 Hello Apache Flink Apache Flink is good I like Apache Flink Hello, 1 Apache, 1 Flink, 1 Apache, 1 Flink, 1 is, 1 good, 1 I, 1 like, 1 Apache, 1 Flink, 1 Apache, 1 Apache, 1 Apache, 1 Flink, 1 Flink, 1 Flink, 1 Hello, 1 I, 1 like, 1 is, 1 good, 1 Hello Apache Flink Apache Flink is good I like Apache Flink Apache, 3 Flink, 3 Hello, 1 I, 1 like, 1 is, 1 good, 1 Apache, 3 Flink, 3 Hello, 1 I, 1 like, 1 is, 1 good,1 Input Split Map Sort & Shuffle Reduce Output
  5. 6 Hadoop 클러스터 내 컴퓨터 간 데이터는 어떻게 주고 받지?

    중간에 처리하던 컴퓨터가 오류로 인해 멈추면? 어떻게 해야 효율적인 분산처리가 될까? 데이터는 어떻게 분산시켜 놓지? … Hadoop이 나오기 전 분산처리를 할 때 고민해야 하는 문제
  6. 7 Hadoop Map에서 무슨 일을 할까? Reduce에서 무슨 일을 할까?

    Hadoop이 나온 뒤 분산처리를 할 때 고민해야 하는 문제
  7. 11 Hadoop split-map-sort-shuffle-reduce로 강제되는 파이프라인 구조 기본적으로 MapReduce의 입력은 1개만

    가능 중간 결과를 디스크에 저장 스트림 데이터에 대한 고려가 없음 Hadoop의 단점 (보다 자세히)
  8. 13 새로운 것 (1) - Apache Tez DAG (Directed Acyclic

    Graph) 형태로
 대용량 데이터 처리를 수행하는 플랫폼
  9. 13 새로운 것 (1) - Apache Tez DAG (Directed Acyclic

    Graph) 형태로
 대용량 데이터 처리를 수행하는 플랫폼 입력 여러 개 받을 수
 있다는 얘기입니다.
  10. 14 새로운 것 (2) - Apache Spark 디스크 대신 메모리를

    적극적으로 사용함으로써
 성능 향상을 꾀하는 대용량 데이터 처리 플랫폼
  11. 15 그리고, 새로운 것 (3) - Apache Flink 스트리밍 데이터

    처리 엔진을 기반으로 만든
 대용량 데이터 처리 플랫폼
  12. 16 Apache Flink 오픈소스 대용량 데이터 처리 플랫폼 유럽 대학들의

    연합 연구 프로젝트인 Stratosphere의 결과물 2014년 4월, Apache Incubator에 들어와
 2014년 12월, Top-level Project로 승격 현재[1] 커미터는 20명이고 컨트리뷰터는 146명 [1] 2015년 12월 19일 확인
  13. 17 Apache Flink 세련된 Java, Scala, Python API 제공 Web

    UI, Scala Shell 등 다양한 도구 지원 그래프 처리, 기계 학습 등을 위한 라이브러리 제공 똑똑한 Flink 런타임의 자동 최적화 오픈소스 진영에서 가장 진보된 스트리밍 데이터 처리 시스템
  14. 18 Hadoop WordCount Example public class WordCount { public static

    class Map extends Mapper<LongWritable, Text, Text, IntWritable> { private final static IntWritable one = new IntWritable(1); private Text word = new Text(); public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException { String line = value.toString(); StringTokenizer tokenizer = new StringTokenizer(line); while (tokenizer.hasMoreTokens()) { word.set(tokenizer.nextToken()); context.write(word, one); } } } public static class Reduce extends Reducer<Text, IntWritable, Text, IntWritable> { public void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException { int sum = 0; for (IntWritable val : values) { sum += val.get(); } context.write(key, new IntWritable(sum)); } } public static void main(String[] args) throws Exception { Configuration conf = new Configuration(); Job job = new Job(conf, "wordcount"); job.setOutputKeyClass(Text.class); job.setOutputValueClass(IntWritable.class); job.setMapperClass(Map.class); job.setReducerClass(Reduce.class); job.setInputFormatClass(TextInputFormat.class); job.setOutputFormatClass(TextOutputFormat.class); FileInputFormat.addInputPath(job, new Path(args[0])); FileOutputFormat.setOutputPath(job, new Path(args[1])); job.waitForCompletion(true); } }
  15. 19 Flink WordCount Example object WordCount extends App { val

    env = ExecutionEnvironment.getExecutionEnvironment val data = env.readTextFile(“hdfs://...“) val wc = data.flatMap(_.split("\\W+")).map((_, 1)).groupBy(0).sum(1) wc.writeAsText(“hdfs://...“) env.execute(“Flink WordCount Example”) }
  16. 19 Flink WordCount Example object WordCount extends App { val

    env = ExecutionEnvironment.getExecutionEnvironment val data = env.readTextFile(“hdfs://...“) val wc = data.flatMap(_.split("\\W+")).map((_, 1)).groupBy(0).sum(1) wc.writeAsText(“hdfs://...“) env.execute(“Flink WordCount Example”) } 1. 데이터를 불러와서 (split) 2. map을 수행하고 3. map을 또 수행하고 4. 단어 단위로 값을 모아서 (sort-shuffle) 5. reduce를 수행 6. 출력
  17. 20 Easy Deploy object WordCount extends App { val env

    = ExecutionEnvironment.getExecutionEnvironment val data = env.readTextFile(“hdfs://...“) val wc = data.flatMap(_.split("\\W+")).map((_, 1)).groupBy(0).sum(1) wc.writeAsText(“hdfs://...“) env.execute(“Flink WordCount Example”) } Flink Client
 (Web Client, CLI, Scala Shell) JobManager TaskManager TaskManager TaskManager TaskManager
  18. 23 Gelly Graph processing library on Flink Google Pregel 형태의

    Vertex-centric Iteration 지원 Gather-Sum-Apply Iteration 지원 FlinkML Machine learning library on Flink scikit-learn 스타일의 파이프라인 지원 CoCoA, Linear Regression, ALS 등이 구현되어 있음
  19. Batch is a special case of streaming Batch Streaming 스트림

    데이터 = 끝 없이(unbounded) 주어지는 데이터 배치 데이터 = 끝이 있는(bounded) 데이터 25
  20. 27 map g of f Chaining이 가능한 경우,
 한 번에

    수행해서 성능 향상 map h reduce i reduce j 똑똑한 Flink 런타임 (1) Pipelining
  21. 28 map g of f map h reduce i reduce

    j 똑똑한 Flink 런타임 (1) Pipelining Shuffle이 적게
 일어나도록 할당
  22. 30 똑똑한 Flink 런타임 (2) Native Iteration Client Step Step

    Step Step Client Step Step Step Step SPOF
  23. 30 똑똑한 Flink 런타임 (2) Native Iteration Client Step Step

    Step Step Client Step Step Step Step SPOF Step Native iteration
 with feedback dataflow 4번 반복 Client
  24. 31 똑똑한 Flink 런타임 (3) Managed Memory Network Buffers Flink

    Managed Heap Unmanaged Heap • Flink는 메모리를 직접 관리함 • GC로 인한 성능 감소가 적음 • Serde 오버헤드를 줄이기 위해
 바이너리 데이터에서 바로 연산을 수행 • 이를 위해, 타입 정보를 미리 조사 • 덕분에 메모리 튜닝이 거의 필요 없음 • Spark는 버전 1.4부터 지원 JVM Heap
  25. 31 똑똑한 Flink 런타임 (3) Managed Memory Network Buffers Flink

    Managed Heap Unmanaged Heap User code, 
 Deserialized data Shuffles, Broadcasts Hashing, Sorting,
 Caching • Flink는 메모리를 직접 관리함 • GC로 인한 성능 감소가 적음 • Serde 오버헤드를 줄이기 위해
 바이너리 데이터에서 바로 연산을 수행 • 이를 위해, 타입 정보를 미리 조사 • 덕분에 메모리 튜닝이 거의 필요 없음 • Spark는 버전 1.4부터 지원 JVM Heap
  26. 32 Features for Real-time Streaming 빠른 결과를 위한 Low latency

    많은 이벤트를 처리할 수 있도록 High throughput 정확한 결과를 위한 Exactly-once guarantees 이벤트 순서에 자유로운 처리를 위한 Event-time windows
  27. 36 Distributed Snapshots JobManager Stream Source Stream Source Operation Operation

    Operation Sink State Backend 현재 상태 저장 s1 체크포인팅
  28. 39 Distributed Snapshots JobManager Stream Source Stream Source Operation Operation

    Operation Sink State Backend s1 s2 체크포인팅 해제
  29. 40 Event-time Windows 실제 스트림 처리 시스템에서는 다양한 이유로
 이벤트의

    생성 시간과 처리 시간이 다릅니다. 네트워크로 인한 지연 효과 스트림 처리 과정에서 Backpressure로 인한 지연 효과 이벤트 소스가 항상 연결되어 있지 않는 경우 (모바일 등)
  30. 41 Event-time Windows Flink는 클러스터의 수행 시간이 아닌 실제 이벤트의


    발생 시간을 기준으로 스트림 처리를 수행할 수 있습니다. 1~3 4~6 7~9
  31. 41 Event-time Windows Flink는 클러스터의 수행 시간이 아닌 실제 이벤트의


    발생 시간을 기준으로 스트림 처리를 수행할 수 있습니다. 1~3 4~6 7~9
  32. 43 다른 스트림 처리 엔진과의 비교 Delivery Semantics At least

    once Exactly once At least once Exactly once State Management Stateless Stateful Stateful Stateful Latency Sub-second Seconds Sub-second Sub-second Language Support Java, Closure, and others Scala, Java, Python Scala, Java Scala, Java, Python