彻底明白Flink系统学习1:Flink介绍:架构
本帖最后由 pig2 于 2018-11-19 15:32 编辑问题导读
1.Flink有哪三种运行模式?
2.Flink架构有几层?
3.Flink每层的作用是什么?
4.JobGraph是什么?
5.executiongraph是什么?
关注最新经典文章,欢迎关注公众号
http://www.aboutyun.com/data/attachment/forum/201406/15/084659qcxzzg8n59b6zejp.jpg
随着分布式技术的不断发展,工程师们正在努力将这些技术推向极限。早些时候,人们一直在寻找更快,更便宜的方法来处理数据。引入Hadoop时满足了这种需求。每个人都开始使用Hadoop,开始用Hadoop绑定的生态系统工具替换他们的ETL。现在已经满足了这种需求并且Hadoop被用于许多公司的生产中,另一个需求就是以流式方式处理数据,从而产生了Apache Spark和Flink等技术。诸如快速处理引擎,即时扩展能力以及对机器学习和图形技术的支持等功能正在开发人员社区中普及这些技术。
你们中的一些人可能已经在你的日常生活中使用过Apache Spark,可能一直想知道我是否有Spark为什么需要使用Flink?这个问题非常令人期待,而且这种比较很自然。让我试着回答一下这个问题。我们首先需要了解的是Flink基于流式传输第一原理,这意味着它是真正的流处理引擎,而不是一个快速处理引擎,它将流收集为小批量。 Flink认为批处理是流式传输的一个特例,而在Spark的情况下反之亦然。同样,我们将在本书中发现更多这样的差异。
在本章中,我们将讨论以下主题:
[*]历史
[*]分布式执行功能
[*]快速入门
[*]群集设置
[*]运行示例应用程序
历史:
Flink最初是一个名为Stratosphere的研究项目,其目标是在柏林地区的大学建立下一代大数据分析平台。 它于2014年4月16日被接受为Apache孵化器项目.
下图显示了演变是如何发生的:
Stratosphere的第一个版本专注于拥有运行时,优化器和Java API。 后来,随着平台变得更加成熟,它开始支持在各种本地环境以及YARN上执行。 从版本0.6开始,Stratosphere更名为Flink。 最新版本的Flink专注于支持各种功能,如批处理,流处理,图形处理,机器学习等。
【注释:从上面我们看到Flink:有三种运行模式,本地模式,Yarn模式,远程模式。其中本地模式是用来开发和调试的,Yarn模式相信很多公司采用的。相关开发经验推荐参考Apache Flink:开发经验总结】
Flink 0.7引入了Flink最重要的功能,即Flink的流API。 最初只发布了Java API。 后来的版本也开始支持Scala API。 现在让我们看看下一节中Flink的当前架构。
架构
Flink 1.X的架构由各种组件组成,例如deploy,core和API。 我们可以轻松地将最新架构与Stratosphere的架构进行比较,并了解其演变。 下图显示了组件,API和库:
Flink具有分层架构,其中每个组件都是特定层的一部分。每个层都建立在其他层之上,以实现清晰的抽象。 Flink旨在在本地,YARN群集或云上运行。 Runtime是Flink的核心数据处理引擎,它通过JobGraph形式的API接收程序。 JobGraph是一个简单的并行数据流,具有一组生成和消费数据流的任务。
DataStream和DataSet API是程序员可用于定义Job的接口。编译程序时,这些API会生成JobGraphs。编译后,DataSet API允许优化器生成最佳执行计划,而DataStream API使用流构建来实现高效的执行计划。
然后根据部署模型将优化的JobGraph提交给执行程序。可以选择本地,远程或YARN部署模式。如果已经运行了Hadoop集群,那么最好使用YARN部署模式。
JobGraph我们或许很陌生,不知道它是什么?
JobGraph是什么?
我们来看下图
JobManager接收JobGraph,JobGraph是数据流的表现形式,包括Operator(JobVertex)和中间结果(intermediateDataSet)。每个Operator都有诸如并行度和执行代码等属性。此外,JobGraph还拥有一些在Operator执行代码时所需要的附加库。
executiongraph是什么?
我们看到JobGraph,同样我们看到了executiongraph,那么这个又是什么?这时候如果就涉及到了深度挖掘。我们的阅读也更加有了深度?
JobManager将JobGraph转换为ExecutionGraph,ExecutionGraph是JobGraph的并行版本:对每个JobVertex,它的每个并行子任务都有一个ExecutionVertex。一个并行度为100的Operator将拥有一个JobVertex和100个ExecutionVertex。ExecutionVertex会跟踪其特定子任务的执行状态。来自一个JobVertex的所有ExecutionVertex都由一个ExecutionJobVertex管理,ExecutionJobVertex跟踪Operator总体的状态。除了这些节点之外,ExecutionGraph同样包括了IntermediateResult和IntermediateResultPartition,前者跟踪IntermediateDataSet的状态,后者跟踪每个它的partition的状态。
更多关于JobGraph和executiongraph可参考官网。
https://ci.apache.org/projects/f ... job_scheduling.html
相关源码
其实我们感觉看到了上面两个概念,感觉还是不过瘾。好像并没有真正看到它到底是怎么一回事。
我们可以找到他们的相关源码:
jobgraph源码:
https://github.com/apache/flink/ ... nk/runtime/jobgraph
executiongraph源码
https://github.com/apache/flink/ ... time/executiongraph
相关API
https://ci.apache.org/projects/f ... lease-1.6/api/java/
我们看到由于Flink是后来才支持的Scala,对于jobgraph和executiongraph相关说明未在官网说明,如果大家找到欢迎留言。
后续接着给大家分享,有问题欢迎留言
感谢分享 感谢分享 感谢分享 感谢分享 好资料。感谢感谢感谢
好资料,感谢楼主
页:
[1]