您的位置:首页 > 大数据

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

2019-01-31 16:42 525 查看

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

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

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

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。下面我主要介绍下这两种模式。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐