Falcon(二)——架构详解

架构

介绍

Falcon是一个面向Hadoop的数据集和处理过程的管理平台。Falcon本质上是通过数据处理引擎将数据集和处理过程的配置文件转化为重复的业务处理流程。Falcon并不做任何繁重的工作,所有的过程和处理流管理都是由工作流调度器来完成的。Falcon所做的就是维持实体之间的依赖关系。Falcon给开发人员提供便捷。

架构的整体框架

Falcon(二)——架构详解_第1张图片

调度器

Falcon选择Oozie作为默认的调度器。当然Falcon也可以和其他的调度器进行整合。面向Hadoop的许多的数据处理组件都需要具备数据有效性和实时性两方面的要求。Oozie正好满足这些属性,因此将选择Oozie作为Falcon的调度器。

即使Oozie可以工作的很好,但在某些场景中,Oozie的调度也被证明存在限制。在当前的版本中,Falcon依赖Oozie去调度和工作流的执行。 Falcon relies on Oozie for both scheduling and for workflow execution, due to which the scheduling is limited to time based/cron based scheduling with additional gating conditions on data availability. 这本身对数据集的周期性具有了强加的限制.为了提供更好的调度能力,Falcon将推出自己的调度器。

控制流

即使实际工作中,调度器(Oozie)负责工作流,Falcon通过订阅每一个工作流可能产生的信息依旧保持着执行路径。当Falcon在Oozie中产生一个工作流,When Falcon generates a workflow in Oozie, it does so, after instrumenting the workflow with additional steps which includes messaging via JMS.Falcon能够订阅这些控制信息和能够完成例如撤销,处理后序数据等的展示。

Feed Schedule flow

image

Process Schedule flow

image

部署模式

Falcon有两种基本组件:Falcon Prism and Falcon Server,正如这个名字所说Falcon Prism切割到达Falcon server的请求。

Stand Alone Mode(独立模式)

当Hadoop工作流和处理相关的数据仅仅涉及一个Hadoop集群就可以使用独立模式。在这种模式中,Falcon Server通过Oozie去调度工作流在hadoop集群。所有的 process/feed都会有提交,调度,挂起,杀死等过程信息被发送到这个服务器。对于这种Falcon在配置过程中应该使用独立模式。

Distributed Mode(分布式)
分布式模式是为了多个hadoop集群的案例,以及需要多个工作流调度器去调度他们。在这种模式中,falcon有两个组件Prism and Server(s),每个Prism and servers都会有他们自己的计划配置(运行时间和启动任务所具备的配置)以及他们各自的配置位置。在这个模式中Prism作为两个falconServer的连接点,所有的命令对于Prism都适用,但是只有read and instance api对Server是有用的。接下来的请求能被发送到每一个Hadoop集群:

Prism:submit, schedule, submitAndSchedule, Suspend, Resume, Kill, instance management

Server: schedule, suspend, resume, instance management

正如上面观察到的,Submit和Kill只能对Prism进行,这样可以保持所有的配置信息在不同的集群中保持同步。

请求可以通过Prism发出直接在CLI指定-colo参数来指定特定的falcon集群,or append the same in web request, if using API.

在Falcon Prism中,当一个cluster被提交,它被默认的发到每一个Falcon server。当Feed被提交或者调度后,只会被发送到feed/process配置文件中指定的FalconServer。Server属性在feed/process的xml文件中通过 CLUSTER标签来指定。

Communication between prism and falcon server (for submit/update entity function) is secured over https:// using a client-certificate based auth.Prism server需要提供有效的客户端验证才能使Falcon server来接收请求。

如果TLS可以使用,启动配置文件在falcon prism和Falcon Server需要配置* keystore.file * keystore.password

Falcon——Prism图解

image

安全模式

安全模式是为了防止Falcon用户对工作流引擎中的调度实体进行操作,这在下面两种情况中起作用:

  • Hadoop集群更新
  • Falcon集群的实体被更新

在安全模式下,用户只能进行限制的操作,其中包括:

  1. 用户可以对经过授权的实体对象进行读操作
  2. 管理员用户可以对集群中的实体进行更新操作
  3. 如果用户想去suspend特定的工作,独立的实例可以被Suspend/Kill
  4. 可调度的实体可以被suspend,这是因为用户可能想去挂起实体操作在处理工作流与版本不兼容的问题中。
  5. 其中被禁止的动作包括:
    (1)所有实体的 submit, submitAndSchedule操作
    (2)实体的操作: update, schedule, touch, delete, submit, submitAndSchedule, resume
    (3)实例化的操作不被允许: rerun, resume

Getting into/out-of Safemode.
用户可以使用如下命令进入或者退出安全模式:

falcon-start -setsafemode

## CLI
/bin/falcon admin  [-setsafemode <true/false>]

## RestAPI
GET http://falcon-server:15000/api/admin/setSafeMode/true
OR
GET http://falcon-server:15000/api/admin/setSafeMode/false

NOTE

用户可以发现是否Falcon Server处与安全模式by calling the Admin Version API,一旦Server被设置成安全模式,他的状态会一直处于安全模式,如果用户想退出安全模式必须进行明确的设置。

配置存储

配置存储文件系统Falcon可以将定义的实体存储在其中,这个文件系统可以是本地文件系统或者HDFS,建议将配置文件存储在和Falcon部署的不同的机器上。这可以避免在Falcon部署的系统出现硬盘损坏或者永久性失效等问题,配置存储也对先前的配置版本或者被删除的配置提供归档操作,这些文件讲永远不能被Falcon server访问和他们仅仅提供追踪实体配置的历史变化。

原子操作

当Falcon执行实体操作时,当需要做许多操作时,如果一个操作失败了,可能造成不统一的状态。为避免这一情况的发生,所有的个人操作都被记录在事务日志里面,这个日志用来回滚整体的用户操作。某些情况下,撤销操作是不成功的,在这些情况下,Falcon尝试尽力去保持系统的一致性。

存储

Falcon introduces a new abstraction to encapsulate the storage for a given feed which can either be expressed as a path on the file system, 文件系统存储或者在Hcatalog的表,such as Hive, Catalog Storage.

 <xs:choice minOccurs="1" maxOccurs="1">
        <xs:element type="locations" name="locations"/>
        <xs:element type="catalog-table" name="table"/>
    xs:choice>

任何一个Feed都应该包含其中的一个

File System Storage(文件系统存储)
这表示为文件系统上的一个存储路径,这个路径指定了Feed在这个集群上的哪个地方具有有效性,一个路径的标签包含:data, meta, stats 以及他们相应的路径,一个Feed至少包含data路径标签,这个标签指定了feed周期性产生数据的HDFS的路径,例如: ex: type=”data” path=”/projects/TrafficHourly/ YEAR {MONTH}-${DAY}/traffic” The granularity of date pattern in the path should be at least that of a frequency of a feed.

 type="data" path="/projects/falcon/clicks" />
 type="stats" path="/projects/falcon/clicksStats" />
 type="meta" path="/projects/falcon/clicksMetaData" /

Catalog Storage (Table)表

一个表的标签指定了在catalog中注册的表的URI:

catalog:$database-name:$table-name#partition-key=partition-value);partition-key=partition-value);*

这是一个URI的模板,它并没有对 Hive or HCatalog任何的参考,它对于所有实现catalog registry都能够适用,The catalog implementation specified in the startup config provides implementation for the catalog URI. 高级分区必须是一个日期的模式,在日期模式的设置必须和feed的频率设置一致。

例如:

"catalog:default:clicks#ds=${YEAR}-${MONTH}-${DAY}-${HOUR};region=${region}" />
"catalog:src_demo_db:customer_raw#ds=${YEAR}-${MONTH}-${DAY}-${HOUR}" />
"catalog:tgt_demo_db:customer_bcp#ds=${YEAR}-${MONTH}-${DAY}-${HOUR}" />

Falcon配置

Falcon配置详见Falcon配置专题

实体管理操作

所有的操作都可以使用Falcon’s RESTful API来完成

Submit

实体Submit操作允许用户将新的cluster/feed/process提交到falcon,被Submit的实体并没有被调度,只是为falcon服务提供简单的配置信息,除了对验证添加的实体本身进行验证之外,也会对配置文件中的相应的配置进行验证和验证这个实体所依赖的实体。

List

列出falcon 配置仓库下所有的特定的类型的实体,包括被调度和被提交的实体配置。

Dependency

列出所指定的实体的所依赖的实体。这个会显示出这个实体被当做依赖的部分和被依赖的部分两部分进行显示。

Schedule

对于已经提交的Feed/Process可以被调度,对于被调度的实体,Falcon将把这些重复性的行为作为Oozie的协调器和利用Oozie 调度器去执行他们(它也可以是除了Oozie以外的调度器),Falcon对feed/process工作流产生另外的ID,这个额外的IP可以被用来对实例的管理。

这个调度将用户的指定的工作流和库复制到一个临时的路径,而调度器引用工作流和库在这个临时路径。

Suspend

这个动作只对已经提交的实体有用,这个触发器可已将早起进行调度的实体进行执行,在挂起装态下的Feed/Process没有被执行。

Resume

将一个挂起的feed/process实体重新返回的执行状态。

Status

返回当前的实体的状态

Definition

得到已经被提交的实体的定义. Please note that user documentations in the entity will not be retained.

Delete

delate操作将删除所有在调度期的工作流,并且将提交的实体从falcon中删除,只有当这个实体没有被依赖的时候,这个实体才会被删除。

Update

Update操作允许对早已经提交或者调度的实体进行更新操作,更新Feed可能导致所有串联的Process进行更新,Process update triggers update in falcon if entity is scheduled.

Cluster update will require user to update dependent Feed and Process entities that are already scheduled. 集群更新需要在falcon安全模式下进行. We provide a CLI command for the user to update the scheduled dependent entities after cluster update and exiting safemode.

下列的动作将被视为更新:

  • 更新旧的被调度的实体设置结束时间为“now”
  • 调度每一个开始时间为“now”的process/feed

实例管理操作

参考源网页(后序优化)

你可能感兴趣的:(Falcon入门)