Apache Falcon数据集管理和数据处理平台

故事扮演 提交于 2019-12-16 19:10:01

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

 jopen 4年前发布 | 67K 次阅读 分布式/云计算/大数据 Apache Falcon

Apache Falcon 是一个面向Hadoop的、新的数据处理和管理平台,设计用于数据移动、数据管道协调、生命周期管理和数据发现。它使终端用户可以快速地将他们的数据及其相关的处理和管理任务“上载(onboard)”到Hadoop集群。

Apache Falcon解决了大数据领域中一个非常重要和关键的问题。升级为顶级项目是该项目的一个重大进展。Apache Falcon有一个完善的路线图,可以减少应用程序开发和管理人员编写和管理复杂数据管理和处理应用程序的痛苦。

用户会发现,在Apache Falcon中,“基础设施端点(infrastructure endpoint)”、数据集(也称 Feed)、处理规则均是声明式的。这种声明式配置显式定义了实体之间的依赖关系。这也是该平台的一个特点,它本身只维护依赖关系,而并不做任何繁重的工作。所有的功能和工作流状态管理需求都委托给工作流调度程序来完成

下面是Falcon的架构图:

从上图可以看出,Apache Falcon:

  • 在Hadoop环境中各种数据和“处理元素(processing element)”之间建立了联系;
  • 可以与Hive/HCatalog集成;
  • 根据可用的Feed组向最终用户发送通知。

而按照开发人员Michael Miklavcic的说法,Apache Falcon使他们的团队逐步构建起一个复杂的管道。该管道包含超过90个 Process 和200个Feed。如果单独使用Apache Oozie,这会是一项重大挑战。Hortonworks工程部门副总裁Greg Pavlik则表示,Apache Falcon是用于“数据湖(Data lake)”建模、管理和操作的最好的、最成熟的构建模块。Hortonworks官方网站上提供了一个 在Hadoop中使用Apache Falcon的示例 。

目的:
使终端用户在面向Hadoop集群进行数据集处理和数据集管理更加容易。

原因
在Hadoop环境中,在各种数据集和处理关系之间建立关系
在集群中进行数据集管理例如数据集声明周期、数据集复制等
抓取数据集或者处理过程的血统信息。
允许本地数据和其他任何地方的集群进行数据整合。
与metastore和catalog进行整合,例如:Hive和Hcatalog
Easy to onboard new workflows/pipelines, with support for late data handling, retry policies

Falcon是一个面向Hadoop的、数据处理和管理平台。它被设计用于数据移动、数据管道协调、生命周期管理和数据备份等场景。Falcon本质上是通过数据处理引擎将数据集和处理过程的配置信息转化为重复的业务处理流程。

在Apache Falcon中,集群接口连接、数据集 、处理规则均是声明式的。这种声明式配置显式定义了实体之间的依赖关系,这也是该平台的一个特点,它本身只维护依赖关系,而并不做任何繁重的工作。所有的功能和工作流状态管理需求都委托给工作流调度程序来完成。

Apache Falcon解决了大数据领域中一个非常重要和关键的问题。升级为顶级项目是该项目的一个重大进展。Apache Falcon具有完善的功能实现,可以使应用程序开发和管理人员在管理数据时实现自动化。

架构的整体框架


调度器
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

Process Schedule flow

部署模式
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图解

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

Hadoop集群更新
Falcon集群的实体被更新
在安全模式下,用户只能进行限制的操作,其中包括:

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

falcon-start -setsafemode

## CLI
<falcon-server>/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
1
2
3
4
5
6
7
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>
1
2
3
4
任何一个Feed都应该包含其中的一个

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

 <location type="data" path="/projects/falcon/clicks" />
 <location type="stats" path="/projects/falcon/clicksStats" />
 <location type="meta" path="/projects/falcon/clicksMetaData" /
1
2
3
Catalog Storage (Table)表

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

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

例如:

<table uri="catalog:default:clicks#ds=${YEAR}-${MONTH}-${DAY}-${HOUR};region=${region}" />
<table uri="catalog:src_demo_db:customer_raw#ds=${YEAR}-${MONTH}-${DAY}-${HOUR}" />
<table uri="catalog:tgt_demo_db:customer_bcp#ds=${YEAR}-${MONTH}-${DAY}-${HOUR}" />
1
2
3
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数据导入和导出

综述

Falcon提供了周期性的将源数据从外部数据库(数据库,drop boxes etc)导入到Hadoop上以及将讲过Hadoop运算的数据导出到外部的数据库。

在至今所有的版本中,Falcon仅仅支持关系型数据库(Mysql,Oracle等)讲过JDBC作为外部的数据源。将来的版本可能增加支持其他类型的数据库。

先决条件

要将数据导入和数据导出需要满足以下的条件: 
- Sqoop 1.4.6+ 
- Oozie 4.2.0+ 
- 合适的数据库连接器

Note 
Falcon通过Sqoop进行数据导入和数据导出操作,Sqoop将需要合适的数据库驱动来连接相应的数据库。必须确保数据库的jar包被复制到Oozie中的Sqoop的share lib中:

For example, in order to import and export with MySQL, please make sure the latest MySQL connector
*mysql-connector-java-5.1.31.jar+* is copied into oozie's Sqoop share lib

/user/oozie/share/lib/{lib-dir}/sqoop/mysql-connector-java-5.1.31.jar+

where {lib-dir} value varies in oozie deployments.
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

用法

实体定义和设置

  • 数据源实体

数据源实体实现了数据库连接和数据库凭据验证的高度抽象。数据源实体支持了数据库特定凭据验证的读和写的接口,如果读和写的接口不能使用使用的话,它会调用默认的凭据进行验证。通常情况下,数据源实体将被系统管理员定义。

接下来的例子定义了一个Mysql的数据源的实体,这个导入操作将使用Mysql的读接口(URI:jdbc:mysql://dbhost/test)用户名:import_usr,密码:sqoop。导出操作将使用带有(URI:jdbc:mysql://dbhost/test)的写接口采用用户名:export_usr和密码指定在HDFS的 “/user/ambari-qa/password-store/password_write_user”.这个文件中。

当读接口和写接口的凭据不能使用时,将使用默认的凭据The default credential specifies the password using password alias feature available via hadoop credential functionality. 用户可以创建一个秘钥使用如下命令:

hadoop credential -create <alias> -provider <provider-path>
  • 1

where is a string and is a HDFS jceks file,在运行期间 ,the specified alias will be used to look up the password stored encrypted in the jceks hdfs file specified under the providerPath element.

读和写的接口可以使管理员分开读和写的工作量:

File: mysql-database.xml

  <?xml version="1.0" encoding="UTF-8"?>
      <datasource colo="west-coast" description="MySQL database on west coast" type="mysql" name="mysql-db" xmlns="uri:falcon:datasource:0.1">
          <tags>owner=foobar@ambari.apache.org, consumer=phoe@ambari.apache.org</tags>
          <interfaces>
              <!-- ***** read interface ***** -->
              <interface type="readonly" endpoint="jdbc:mysql://dbhost/test">
                  <credential type="password-text">
                      <userName>import_usr</userName>
                      <passwordText>sqoop</passwordFile>
                  </credential>
              </interface>

              <!-- ***** write interface ***** -->
              <interface type="write"  endpoint="jdbc:mysql://dbhost/test">
                  <credential type="password-file">
                      <userName>export_usr</userName>
                     <passwordFile>/user/ambari-qa/password-store/password_write_user</passwordFile>
                  </credential>
              </interface>

              <!-- *** default credential *** -->
              <credential type="password-alias">
                <userName>sqoop2_user</userName>
                <passwordAlias>
                    <alias>sqoop.password.alias</alias>
                    <providerPath>hdfs://namenode:8020/user/ambari-qa/sqoop_password.jceks</providerPath>
                </passwordAlias>
              </credential>

          </interfaces>

          <driver>
              <clazz>com.mysql.jdbc.Driver</clazz>
              <jar>/user/oozie/share/lib/lib_20150721010816/sqoop/mysql-connector-java-5.1.31</jar>
          </driver>
      </datasource>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 数据集实体

Feed实体可以使用户在指定去保持数据生命周期和复制数据的同时定义数据导入和数据导出的策略,导入和导出策略将引用已经定义的数据库实体去连接和指定特定的数据表。接下来的例子定义了一个具有导入和导出策略的feed实体,导入和导出都将引用“mysql-db”实体,导入操作将使用读接口和导出操作将使用写接口,一个Feed实例将每一个小时被创建一次和由于保留策略的设置这个feed策略将被删除在90天之后。

File: customer_email_feed.xml

 <?xml version="1.0" encoding="UTF-8"?>
      <!--
       A feed representing Hourly customer email data retained for 90 days
       -->
      <feed description="Raw customer email feed" name="customer_feed" xmlns="uri:falcon:feed:0.1">
          <tags>externalSystem=USWestEmailServers,classification=secure</tags>
          <groups>DataImportPipeline</groups>
          <frequency>hours(1)</frequency>
          <late-arrival cut-off="hours(4)"/>
          <clusters>
              <cluster name="primaryCluster" type="source">
                  <validity start="2015-12-15T00:00Z" end="2016-03-31T00:00Z"/>
                  <retention limit="days(90)" action="delete"/>
                  <import>
                      <source name="mysql-db" tableName="simple">
                          <extract type="full">
                              <mergepolicy>snapshot</mergepolicy>
                          </extract>
                          <fields>
                              <includes>
                                  <field>id</field>
                                  <field>name</field>
                              </includes>
                          </fields>
                      </source>
                      <arguments>
                          <argument name="--split-by" value="id"/>
                          <argument name="--num-mappers" value="2"/>
                      </arguments>
                  </import>
                  <export>
                        <target name="mysql-db" tableName="simple_export">
                            <load type="insert"/>
                            <fields>
                              <includes>
                                <field>id</field>
                                <field>name</field>
                              </includes>
                            </fields>
                        </target>
                        <arguments>
                             <argument name="--update-key" value="id"/>
                        </arguments>
                    </export>
              </cluster>
          </clusters>

          <locations>
              <location type="data" path="/user/ambari-qa/falcon/demo/primary/importfeed/${YEAR}-${MONTH}-${DAY}-${HOUR}-${MINUTE}"/>
              <location type="stats" path="/none"/>
              <location type="meta" path="/none"/>
          </locations>

          <ACL owner="ambari-qa" group="users" permission="0755"/>
          <schema location="/none" provider="none"/>

      </feed>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 导入策略(Import policy)

导入策略将使用datasource实体指定特定连接特定的数据源,表名应该在存在引用的数据库中,导入过程可以指定导入特定的字段并且可以指定是每次都是全部一次性倒入或者增量导入, 
The merge policy specifies how to organize (snapshot or append, i.e time series partiitons) the data on hadoop.有效的组合是:

  1. [full,snapshot] :数据每次被全部抽取并且被保存在Feed指定的位置。

  2. [incremental, append] :data is extracted incrementally using the key specified in the deltacolumn and added as a partition to the feed instance location.

  3. [incremental, snapshot]. :数据被增量的抽取和已经在Hadoop中存在的数据进行融合产生一个最新的Feed实例,.这个特性现在并不支持. 这个操作对于一个具有大量的数据的表一以及更新后可以插入到Hadoop的数据里,对于使用者来说,它可以作为一个整体。

接下来的例子定义了[incremental, append]的策略:

 <import>
                <source name="mysql-db" tableName="simple">
                    <extract type="incremental">
                        <deltacolumn>modified_time</deltacolumn>
                        <mergepolicy>append</mergepolicy>
                    </extract>
                    <fields>
                        <includes>
                            <field>id</field>
                            <field>name</field>
                        </includes>
                    </fields>
                </source>
                <arguments>
                    <argument name="--split-by" value="id"/>
                    <argument name="--num-mappers" value="2"/>
                </arguments>
            </import>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

Filed标签将一定哪一个列将被导入,默认情况下,所有的列将被导入,Includes标签定义了其中需要导入的列的字段,Excludes正好与Includes相反,

arguments标签将可以调用在Sqoop中任何额外的参数。

  • 导出策略(Export policy)

导出策略和导入策略同理,使用Datasource去连接数据库,加载特定列的数据对数据表进行插入或者更新数据,Fields操作的选项和Import具有同样的策略。表名应该存在于数据库中。

操作步骤:

    ## submit the mysql-db datasource defined in the file mysql_datasource.xml
    falcon entity -submit -type datasource -file mysql_datasource.xml

    ## submit the customer_feed specified in the customer_email_feed.xml
    falcon entity -submit -type feed -file customer_email_feed.xml

    ## schedule the customer_feed
    falcon entity -schedule -type feed -name customer_feed

Hadoop数据生命周期管理框架Apache Falcon简介

 

Apache Falcon是一个开源的hadoop数据生命周期管理框架, 它提供了数据源 (Feed) 的管理服务,如生命周期管理,备份,存档到云等,通过Web UI可以很容易地配置这些预定义的策略, 能够大大简化hadoop集群的数据流管理.
本文主要介绍了Falcon的基本特性, 核心概念以及架构, 最后讨论了它的优点和局限.

Hortonworks的hadoop发行版HDP中,数据治理包括Falcon和Atlas这两个组件.Atlas主要负责元数据的管理. Falcon主要负责数据生命周期的管理.

Falcon最初由移动广告公司Inmobi开发,2012年开始在Inmobi内部投入使用,2013年成为Apache孵化项目,2015年孵化毕业成为Apache顶级项目,目前最新的版本是0.10.

核心特性

  • 集中式数据生命周期管理: Falcon在UI上提供wizard来定义数据导入,处理和导出的流水线, 同时可以管理监控流水线的运行.
  • 业务一致性和灾难恢复: Falcon可以拷贝HDFS文件和hive表.
  • 解决审计和合规性方面的需求: 可以利用falcon查看数据流水线的血缘关系,审计日志,以及为业务流程和数据打标签,方便业务管理.

Falcon如何工作

Falcon的使用者可以通过命令行或者Falcon Web UI来创建数据流水线,数据流水线由集群存储位置定义,数据源和处理逻辑组成,这三部分分别为由xml文件定义的实体.

实体 (entity)

falcon中定义的三种实体包括:

  • cluster: 支持定义多个集群.
  • feed: 数据源, 支持类型包括hdfs路径和hive表.
  • process: 处理逻辑,支持oozie,hive,pig和spark作为作业流引擎.

    Falcon pipeline

数据流水线 (data pipeline)

每个实体是单独定义的,把实体组合起来就形成了数据流水线,Falcon提供了很多预定义的策略来处理数据拷贝,数据保留时间和存档.

架构原理

Falcon把用户定义的feed和process
翻译成调度器的作业配置文件,这些作业流由调度器管理,falcon实际上只维护实体之间的依赖关系,所以它是个轻量级的工具.Falcon实体的配置文件(xml文件)可以存在本地或者hdfs上.

Falcon架构

调度器

Falcon目前默认使用oozie作为调度器, 由于oozie调度器的一些限制,falcon正在开发自己的调度器,预计将在以后的版本中正式发布.

与oozie集成

Falcon通过JMS (Java消息服务) 与oozie进行通信,控制oozie上对应的作业流,oozie也通过JMS给falcon报告作业运行情况.

讨论

总结来说, Falcon是在调度器Oozie上封装了一层,用户可以用Web UI上的wizard来配置数据流水线, 数据生命周期管理非常方便. 它最大的优点就是增强了Oozie的易用性, 对于业务逻辑比较复杂的系统, 用Falcon管理比起直接用Oozie会大大简化.
但是调研中发现, Falcon Web UI上呈现的血缘关系只是以实体为中心, 并没有全局层面上整个data pipeline的血缘关系. 如果能够以pipeline为中心, 画出血缘关系图,提供zoom in功能, 以及在图中把实体运行状态可视化, 将会是一个很有用的特性.
虽然被称为数据治理工具,但是它的功能只是集中在数据生命周期管理和流水线管理,要与元数据管理(Atlas),数据安全管理(Ranger)等组合,才能形成一个完整的数据治理解决方案.
调研发现, Falcon的关注度并不算高,能搜到的英文资料主要是Apache和Hortonworks官网,中文资料几乎没有. 目前也没有看到哪个大公司在生产环境中用Falcon,我认为主要是因为Falcon提供的功能单一, 只解决了数据治理领域的一小部分需求,用户更愿意使用集中化的数据治理工具,或者自己开发.

如何使用Falcon

安装

如果安装了HDP,则可以使用Ambari上的Wizard来安装Falcon,非常简单,使用默认配置即可. 如果想单独安装Falcon, 可以参考Apache Falcon官网的文档,下载源码,编译并安装Falcon. 链接为:
http://falcon.apache.org/InstallationSteps.html

使用

可以通过Web UI, CLI和Rest API三种方式使用Falcon.

  1. 配置一个简单的HDFS镜像的Process, 具体步骤参考http://saptak.in/writing/2015/08/11/mirroring-datasets-hadoop-clusters-apache-falcon

  2. 配置一个简单的处理E-mail的数据流,包含两个Feed和两个Process. 具体步骤参考http://saptak.in/writing/2015/08/13/processing-data-pipeline-with-apache-falcon

https://zh.hortonworks.com/apache/falcon/#section_1

http://falcon.apache.org/

http://wenku.it168.com/d_001179518.shtml

https://baike.so.com/doc/26957806-28326669.html

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!