大数据计算引擎——Flink学习

从该网址上的内容中摘抄出来的,若有侵权,联系,可删,目的是作笔记记录,放在博客上易于查找~~~https://www.ibm.com/developerworks/cn/opensource/os-cn-apache-flink/index.htmlhtml

大数据计算引擎的发展:
    Spark 掀开了内存计算的先河,也之内存为赌注,赢得了内存计算的飞速发展。算法

第一代的计算引擎,无疑就是 Hadoop 承载的 MapReduce。
    缺点:对于上层应用来讲,就不得不千方百计去拆分算法,甚至于不得不在上层应用实现多个 Job 的串联,以完成一个完整的算法,例如迭代计算。
第二代计算引擎支持 DAG 的框架,针对于上述缺点,催生了第二代引擎。对于当时的 Tez 和 Oozie 来讲,大多仍是批处理的任务。
第三代的计算引擎以 Spark 为表明。
    特色:特色主要是 Job 内部的 DAG 支持(不跨越 Job),以及强调的实时计算。在这里,不少人也会认为第三代计算引擎也可以很好的运行批处理的 Job。随着第三代计算引擎的出现,促进了上层应用快速发展,例如各类迭代计算的性能以及对流计算和 SQL 等的支持
第四代Flink 的诞生。应该主要表如今 Flink 对流计算的支持,以及更一步的实时性上面。固然 Flink 也能够支持 Batch 的任务,以及 DAG 的运算。apache

Flink 是一个针对流数据和批数据的分布式处理引擎。
    Flink 会把全部任务当成流来处理,这也是其最大的特色。Flink 能够支持本地的快速迭代,以及一些环形的迭代任务。而且 Flink 能够定制化内存管理。在这点,若是要对比 Flink 和 Spark 的话,Flink 并无将内存彻底交给应用层。这也是为何 Spark 相对于 Flink,更容易出现 OOM 的缘由(out of memory)。
 Flink 几个最基础的概念:
     Client:        
         Client 用来提交任务给 JobManager
     JobManager :
         JobManager 分发任务给 TaskManager 去执行
     TaskManager    :
          TaskManager 会心跳的汇报任务状态。
看到这里,有的人应该已经有种回到Hadoop一代的错觉。确实,从架构图去看,JobManager 很像当年的JobTracker,TaskManager也很像当年的TaskTracker。然而有一个最重要的区别就是TaskManager之间是是流(Stream)。其次,Hadoop一代中,只有 Map和Reduce之间的Shuffle,而对Flink而言,多是不少级,而且在TaskManager 内部和 TaskManager之间都会有数据传递,而不像Hadoop,是固定的 Map到Reduce。架构

Flink 中的调度简述:
在 Flink 集群中,计算资源被定义为 Task Slot。每一个 TaskManager 会拥有一个或多个 Slots。JobManager 会以 Slot 为单位调度 Task。可是这里的 Task 跟咱们在 Hadoop 中的理解是有区别的。对 Flink 的 JobManager 来讲,其调度的是一个 Pipeline 的 Task,而不是一个点。举个例子,在 Hadoop 中 Map 和 Reduce 是两个独立调度的 Task,而且都会去占用计算资源。对 Flink 来讲 MapReduce 是一个 Pipeline 的 Task,只占用一个计算资源。类同的,若是有一个 MRR 的 Pipeline Task,在 Flink 中其也是一个被总体调度的 Pipeline Task。在 TaskManager 中,根据其所拥有的 Slot 个数,同时会拥有多个 Pipeline。框架

Flink 的部署
Flink 有三种部署模式,分别是 Local、Standalone Cluster 和 Yarn Cluster。对于 Local 模式来讲,JobManager 和 TaskManager 会公用一个 JVM 来完成 Workload。若是要验证一个简单的应用,Local 模式是最方便的。实际应用中大多使用 Standalone 或者 Yarn Cluster。下面我主要介绍下这两种模式。分布式