精华内容
下载资源
问答
  • ETL调度

    2011-03-14 11:11:37
    只有您可以确定何时在环境中调度 ETL 运行。在调度 ETL 之前请仔细考虑所有相关性。有关 ETL 和相关性的一般描述,请参阅理解 ETL 过程。 要配置和调度 ETL 过程,请完成以下步骤: 运行 ETL 初始化过程...

    只有您可以确定何时在环境中调度 ETL 运行。在调度 ETL 之前请仔细考虑所有相关性。有关 ETL 和相关性的一般描述,请参阅理解 ETL 过程

    要配置和调度 ETL 过程,请完成以下步骤:

    1. 运行 ETL 初始化过程(只运行一次),您可在仓库包的实现指南中关于安装后过程的部分中找到这些过程描述。不是所有的仓库包都有初始化过程。请参阅运行 ETL 初始化过程
    2. 确定仓库包的任何 ETL 过程是否与其它 ETL 过程有相关性。请参阅理解 ETL 过程。相关性可存在于一个仓库包的 ETL 过程之间,也可存在于不同仓库包的 ETL 过程之间。随每个仓库包提供的实现指南指示它的任何 ETL 过程是否有相关性。请参阅确定应用程序 ETL 过程相关性
    3. 如果任何 ETL 过程之间存在相关性,则您可以指定快捷方式将相关的过程链接在一起并顺序地运行它们。请参阅创建用以链接 ETL 过程的快捷方式

      如果所有 ETL 过程之间均不存在相关性,或者您知道何时要运行 ETL 过程以及运行多久,则您可调度 ETL 过程在指定的时间运行。

    4. 对于何时及以何种频度运行 ETL 过程,请指定一个时间范围和时间间隔。请参阅调度 ETL 步骤
    5. 验证快捷方式定义和 ETL 调度信息是正确的。请参阅确认 ETL 过程

    您可将调度方法组合在一起,调度一些步骤顺序地运行,而调度另一些步骤在指定时间运行。在此情况下,您必须根据情况同时遵循这两组指示,即将一些 ETL 步骤配置为顺序运行,而将另一些步骤配置为在指定时间运行。

    注:
    在调度每个仓库包的 ETL 过程时,请记下并保存调度信息以及链接这些过程的顺序。如果向仓库包安装修订程序,您可能必须重新调度 ETL 过程,而这些信息将帮助您完成此操作。

    运行 ETL 初始化过程

    ETL 初始化过程仅运行一次。对于用于 V1.2 的仓库包,初始化过程将自动运行。对于用于 V1.1 的仓库包,您必须手工运行初始化过程。

    注意事项:
    多次运行 ETL 初始化过程可导致中央数据仓库中出错。

    主题区域文件夹中的每个仓库包文件夹都包含一个过程文件夹,后者又包含由仓库包定义的 ETL 过程。通过单击文件夹名称旁边的加号(+),展开每个仓库包的过程文件夹。

    ETL 初始化过程是由一些仓库包提供的,您可在随仓库包提供的实现指南中关于安装后过程的部分中找到相关描述。ETL 初始化过程的命名约定有助于您在每个仓库包的过程文件夹中确定它们。例如,ETL 初始化过程的名称包含单词“Initialize”,如下所示:

    productCode_c05_Initialize_Process

    ETL 步骤的名称包含字符串 init,如下所示:

    productCode_c05_s010_init

    请遵循调度 ETL 步骤中的指示步骤,将 ETL 初始化过程调度为仅运行一次。初始化步骤运行之后,请查看使用“运行中的任务”窗口中所指定的日志信息来验证是否成功完成了 ETL 初始化过程。

    注:
    一些仓库包提供附加过程,例如归档过程,这些过程也只应运行一次。请参阅随每个仓库包提供的实现指南中关于 ETL 过程的部分,以确定是否还有对于仓库包应只运行一次的其它过程。

    调度注意事项

    调度 ETL 过程有多种方法。您选择调度 ETL 过程的方法取决于环境中 ETL 过程之间的相关性。一些仓库包既提供中央数据仓库 ETL 也提供数据集市 ETL。而有些仓库包则只提供中央数据仓库 ETL。在每个仓库包的实现指南中有关安装后过程的部分中提供了 ETL 过程相关性的信息。

    以下例举了一些调度方案:

    • 调度中央数据仓库 ETL,使之在每天的指定时间运行,而调度数据集市 ETL,使之在每天的另一指定时间运行。中央数据仓库 ETL 和数据集市 ETL 可同时运行。
    • 调度多个中央数据仓库 ETL,使它们在同一指定时间运行,然后在它们完成后,链接数据集市 ETL 过程,使它们以顺序方式运行。

    • 将多个数据集市 ETL 链接到同一个中央数据仓库 ETL。

    以下各章节提供有关在指定时间调度和按顺序调度的更多信息。

    将 ETL 过程调度为在指定时间运行的注意事项

    您可以调度之间不存在相关性的 ETL 过程在指定时间运行。这并不保证它们按顺序运行。第一次设置 ETL 过程所需的时间较少,但是您仍需要考虑以下事项:

    • 调度为在指定时间运行的所有 ETL 过程即使在某个 ETL 过程失败的情况下也会尝试运行。如果问题出在某个特定 ETL 上,则其余的 ETL 过程仍试着运行。如果其它 ETL 过程依赖于失败的过程,则它们也会失败。 如果问题是由于空间约束或影响到所有 ETL 过程的其它问题而引起的,则其它的 ETL 过程也将失败。
    • 如果在任何 ETL 过程之间存在未知的相关性,则在指定时间运行 ETL 过程可能导致错误的产生。
    • 更新中央数据仓库中表的所有 ETL 过程不得调度为在同一时间运行。由于数据中可能存在未知的相关性,因此根据您的环境,同时向相同的一些表进行更新可能引起性能问题。

    您可将 ETL 过程调度为按顺序运行,即使不存在任何已知的相关性。这确保了 ETL 过程在所有先前的过程成功完成之后才启动,从而使您能够在发生错误的情况下方便地识别出失败的过程。

    将 ETL 过程调度为按顺序运行的注意事项

    如果正如仓库包的实现指南中有关安装后过程的部分中所描述,ETL 过程之间存在相关性,则您可调度这些 ETL 过程按顺序运行。这使得第一次设置 ETL 过程需要花费较多的时间,但如果在 ETL 运行周期中发生错误,则可在调试和恢复过程中节省不少精力。

    以下列表描述了将 ETL 过程调度为顺序运行的一些注意事项:

    • 您必须创建快捷方式将所有相关的 ETL 进程链接在一起。使用快捷方式,您可以仅指定何时及以何种频度运行第一个 ETL 过程。所有其它相关应用程序 ETL 过程均自动运行,因为它们与第一个过程链接在了一起。有关创建快捷方式的更多信息,请参阅创建用以链接 ETL 过程的快捷方式
    • 遇到错误时,ETL 过程中的后续步骤并不运行。这样不会产生很复杂的恢复情形。
    • 禁用对链接在一起的过程的调度只需要您禁用第一个过程即可。如果第一个过程不运行,则与第一个过程链接的过程一个也不会运行。
    • 意外调度多个仓库包在同一时间运行会导致性能问题。

    确定应用程序 ETL 过程相关性

    过程文件夹中列出的 ETL 过程名称遵循 Enabling an Application for Tivoli Data Warehouse 中所定义的命名约定。ETL 过程的名称可帮助您确定它们运行的顺序。

    ETL 过程名称构造如下:

    productCode_processID_processDescription_Process

    此过程名称中的变量如下所示:

    • productCode 是标识仓库包的唯一代码。
    • processID 是 cnn 或 mnn。cnn 过程标识是将数据装入中央数据仓库的 ETL 过程,也称为中央数据仓库 ETL 过程。mnn 过程标识是将数据写入一个或多个星型模式(报告创建自这些星型模式)的 ETL 过程,也称为数据集市 ETL 过程。nn 是从 05 开始的两位数。
    • processDescription 是对过程的描述。

    例如:

    APM_c05_Initialize_Process

    这些过程应以以下顺序运行:

    1. 名为 productCode_cnn_processDescription_Process 的过程,按每个仓库包的 nn 值以升序排列。
    2. 名为 productCode_mnn_processDescription_Process 的过程,按每个仓库包的 nn 值以升序排列

    在运行具有相关性的 ETL 过程运行之前,您必须调度这些过程所依赖的 ETL 过程先运行。确定所列出的仓库包的 ETL 调度顺序,并记下该顺序,以供日后参考。

    例如,如果您有两个仓库包 AP1AP2,AP2 依赖于 AP1,且以下是这两个仓库包的 ETL 步骤:

    • AP1_c05_s010_Extract
    • AP1_c10_s010_Transform.
    • AP1_c15_s010_Load
    • AP1_m05_s010_Mart
    • AP2_c05_s010_Extract
    • AP2_m05_s010_Mart

    这些 ETL 步骤必须以以下顺序链接在一起:

    1. AP1_c05_s010_Extract(包含指向 AP1_c10_s010_Transform. 的快捷方式)
    2. AP1_c10_s010_Transform(包含指向 AP1_c15_s010_Load 的快捷方式)
    3. AP1_c15_s010_Load(包含指向 AP2_c05_s010_Extract 的快捷方式)
    4. AP2_c05_s010_Extract(包含指向 AP1_m05_s010_Mart 的快捷方式)
    5. AP1_m05_s010_Mart(包含指向 AP2_m05_s010_Mart 的快捷方式)
    6. AP2_m05_s010_Mart

    对于用于 V1.2 的仓库包,链接仓库包内各步骤的快捷方式由仓库包提供。您只需为仓库包之间的相关性创建快捷方式即可。而对于用于 V1.1 的仓库包,您必须既为仓库包内的相关性又为仓库包之间的相关性创建快捷方式。

    注意: 按适当顺序运行具有相关性的 ETL 过程是很重要的。否则会导致中央数据仓库出错。

    创建用以链接 ETL 过程的快捷方式

    您要为应用程序 ETL 过程创建快捷方式才能使它们按指定顺序运行,并且您应确保仅当前面的 ETL 过程成功完成之后后面的 ETL 过程才能运行。

    一些应用程序提供诸如只能运行一次的初始化过程之类的过程。对于这些过程,请不要使用快捷方式将它们链接在一起。请参阅随每个仓库包提供的实现指南以确定哪些过程(如果有的话)仅应运行一次。

    在创建快捷方式之前,您应对 TWH_MD 数据库进行备份,以备需要恢复到所安装仓库包的初始状态之用。此外,还应记下链接的过程和链接这些过程所执行的步骤,并保存这些信息。如果向仓库包安装了修订程序,则您可能必须重新调度所有的 ETL 过程,而您记下的信息将帮助您执行此操作。

    请执行以下步骤来创建快捷方式:

    1. 在“数据仓库中心”窗口的仓库包过程文件夹中,双击要运行的第一个仓库包ETL 过程的名称。此时将显示“过程模型”窗口,其中说明该 ETL 过程将如何转换数据。其中通过一个个步骤说明了 ETL 过程流,并使用不同的图标将过程中使用的数据表与实际步骤区分开。在“过程模型”窗口中向下滚动可找到过程中运行的最后一个步骤的名称。
      图 15. DB2 数据仓库中心的“过程模型”窗口
      DB2 数据仓库中心的“过程模型”窗口
    2. 请如下所示更改您在创建快捷方式的过程中最后一个步骤的方式:
      1. 在“过程模型”窗口中,右键单击“过程模型”窗口中最后一个步骤的步骤名称。
      2. 选择方式  -> 开发

        步骤必须处于开发方式才能创建或修改快捷方式。

    3. 单击“过程模型”窗口中左工具栏里的创建快捷方式按钮( 快捷方式按钮是一个向上弯曲指向右方的箭头),然后将鼠标移动到“过程模型”窗口中最后一个步骤下面的空白位置,并再次单击。
    4. 在“创建快捷方式”窗口中,找到适当的过程文件夹并选择包含要运行的下一步骤的过程。您选择的过程或是列在同一仓库包的过程文件夹中的下一过程,或是列在下一仓库包的过程文件夹中的第一个过程。要运行的下一步骤是此新过程中的第一个步骤。
    5. 选择要运行的下一个步骤,通过单击右箭头按钮(>)将该步骤从可用步骤移到选定步骤中,然后单击确定。此时快捷方式将添加到“过程模型”窗口中。快捷方式以一个弯曲的箭头出现在步骤图标的左下方,它的名称反映了要运行的下一 ETL 步骤。
    6. 在“过程模型”窗口中右键单击新添加的快捷方式,然后单击链接工具按钮链接工具按钮是一个向下指的彩色箭头即左工具栏上向下指的彩色箭头图标),然后选择成功时。ETL 过程运行时,成功时参数指定由快捷方式调用的步骤仅当前一步骤成功完成时才运行。如果步骤运行时发生错误,则该步骤会退出,且后续步骤不会运行。
    7. 单击过程中的最后一个步骤(即与快捷方式链接的步骤),然后将此步骤拖至快捷方式。现在,一个绿色箭头将该步骤链接到了快捷方式。绿色表示快捷方式仅当前一步骤成功完成时才运行。该快捷方式现在是过程中的最后一个步骤。
    8. 在“过程模型”窗口中,单击过程 -> 保存
    9. 关闭“过程模型”窗口。

    您要创建快捷方式的下一过程是包含从新快捷方式调用的步骤的过程。

    关于创建快捷方式的其它信息,请参阅 《IBM DB2 通用数据库数据仓库中心管理指南》。

    现在您已链接了 ETL 步骤,请调度第一个 ETL 过程中的第一个步骤运行。

    调度 ETL 步骤

    ETL 调度过程指定何时及以何种频度运行 ETL 过程。调度 ETL 过程运行的最佳时间是系统活动最少的时候。完成 ETL 过程所需的时间取决于应用程序生成的数据量。如果可能的话,不要调度 ETL 过程在常规工作时段运行。

    如果 ETL 过程依赖于另一个 ETL 过程,或者您想要确保过程按顺序运行,则请确保完成了创建用以链接 ETL 过程的快捷方式中的步骤。如果使用快捷方式将 ETL 过程链接在一起,则为第一个 ETL 过程的第一个步骤指定调度参数。其余的过程将在前一步骤成功完成后自动运行。如果 ETL 过程中有任何步骤失败,则所有其余的过程将不运行。

    您要对将调度的每个 ETL 过程遵循相同的过程,但应根据是调度 ETL 过程运行一次、在指定时间运行还是按顺序运行在“调度”窗口中指定不同的参数,如以下步骤所示:

    1. 仓库包安装之后,ETL 过程中步骤的方式应设置为开发。但是,如果您需要更改 ETL 步骤的方式,请执行以下步骤:
      1. 在“数据仓库中心”窗口的左导航面板中,单击仓库包的过程文件夹。
      2. 单击被调度运行的仓库包 ETL 过程的名称。这些过程步骤然后将在右导航面板中列出。
      3. 选择所有需要更改的步骤名称。
      4. 右键单击该组步骤,然后选择方式
      5. 选择开发测试

        步骤必须处于开发方式或测试方式才能被调度。

      6. 对包含方式需要更改的 ETL 步骤的每个过程重复这些步骤。
    2. 如果已针对您的部署定义了 DB2 远程仓库代理程序,则对于仓库包的 ETL 过程的每一步骤,请完成这些指示信息来指定将运行每一步骤的 DB2 仓库代理程序:
      1. 用鼠标右键单击步骤名称并选择属性
      2. 单击处理选项选项卡。
      3. 代理站点下拉列表选择 DB2 远程仓库代理站点来运行此步骤。以下示例显示为数据集市 ETL 过程的一个步骤选择的 DB2 远程仓库代理站点。
        ETL 过程步骤的 DB2 远程代理站点处理选项
      4. 单击确定以关闭“属性”窗口。
    3. 过程文件夹,选择包含要运行的第一个步骤的过程。包含在过程中的一个个步骤列在“数据仓库中心”窗口的右窗格中。
    4. 在“数据仓库中心”窗口的右窗格中,选择您希望调度的步骤并选择调度
    5. 如果您要运行仅应运行一次的 ETL 步骤,请执行以下步骤:
      1. 在“调度”窗口的“调度”选项卡中,从时间间隔下拉列表选择仅一次并输入步骤的运行日期和时间。
      2. 单击添加
      如果您要调度 ETL 步骤,使之自动运行,请执行以下步骤:
      1. 在“调度”窗口的“调度”选项卡中,选择除仅一次以外的时间间隔,并输入频率、星期几以及开始和结束日期。这指定何时及以何种频度运行 ETL 步骤。
      2. 单击添加
    6. 在“调度”窗口中单击通知选项卡。
      图 16. 过程调度窗口的“通知”页面
      过程调度窗口的“通知”页面
    7. 在“通知时间”框中,选择完成时以指定您希望在 ETL 步骤结束时得到通知。
    8. 选择通知类型、要接收通知的用户以及其它详细信息,然后单击添加

      请参阅《IBM DB2 通用数据库数据仓库中心管理指南》或DB2 数据仓库中心联机帮助,以获取关于设置通知的更多信息。

      注:
      我们强烈建议您对 ETL 过程中的每一步骤选择通知时间:完成时。此信息有助于监视 ETL 过程。选择“电子邮件通知类型”有助于确保采取及时的措施来解决问题。
    9. 单击确定
    10. 将所有步骤更改为生产方式,如下所示:
      1. 在“数据仓库中心”窗口的右窗格中,选择除快捷方式所调用步骤之外的所有步骤,然后右键单击。
      2. 选择所有需要更改的步骤名称。
      3. 右键单击该组步骤,然后选择方式
      4. 选择生产

        步骤必须处于生产方式才能自动运行。

    11. 在“过程模型”窗口中,单击过程 -> 保存
    12. 关闭“过程模型”窗口。

    关于其它通过 DB2 数据仓库中心调度 ETL 过程的信息,请参阅 《IBM DB2 通用数据库数据仓库中心管理指南》 或 DB2 数据仓库中心的联机帮助。

    来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/12122734/viewspace-689363/,如需转载,请注明出处,否则将追究法律责任。

    转载于:http://blog.itpub.net/12122734/viewspace-689363/

    展开全文
  • etl调度表结构设计

    2016-02-22 18:11:45
    etl调度设计
    CREATE TABLE `dwa_execute_log_hd` (
      `PROC_NAME` varchar(100) NOT NULL COMMENT '存储过程名称',
      `PROC_DATE` varchar(100) DEFAULT NULL COMMENT '执行存储过程日期',
      `STARTDATE` datetime DEFAULT NULL COMMENT '开始执行时间',
      `ENDDATE` datetime DEFAULT NULL COMMENT '结束时间',
      `RESULT` varchar(4000) DEFAULT NULL COMMENT '结果',
      `DURATION` int(11) DEFAULT NULL COMMENT '执行时长,单位秒',
      `NOTE` varchar(4000) DEFAULT NULL COMMENT '备注',
      `ROW_COUNT` int(11) DEFAULT NULL COMMENT 'ETL的行数',
      `SOURCE_TAB` varchar(1000) DEFAULT NULL COMMENT '源表',
      `TARGET_TAB` varchar(1000) DEFAULT NULL COMMENT '目标表',
      `NEXT_UPDATE_TIME` varchar(60) DEFAULT NULL COMMENT '下次更新时间',
      `ERROR_CODE` varchar(200) DEFAULT NULL COMMENT '错误编码(mysql无法直接获取,暂为NULL)',
      KEY `pk1` (`PROC_NAME`) USING BTREE
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8








    CREATE TABLE `eamp_hive_hist_log_hd` (
      `ID` int(10) NOT NULL DEFAULT '0' COMMENT '主键ID',
      `PROC_ID` int(10) NOT NULL COMMENT 'PROC主键ID',
      `PROC_NAME` varchar(100) NOT NULL COMMENT '存储过程名称',
      `PROC_DATE` varchar(100) DEFAULT NULL COMMENT '执行存储过程日期',
      `STARTDATE` datetime DEFAULT NULL COMMENT '开始执行时间',
      `ENDDATE` datetime DEFAULT NULL COMMENT '结束时间',
      `RESULT` varchar(4000) DEFAULT NULL COMMENT '结果',
      `DURATION` int(11) DEFAULT NULL COMMENT '执行时长,单位秒',
      `NOTE` varchar(4000) DEFAULT NULL COMMENT '备注',
      `SCHEMA` varchar(20) DEFAULT NULL,
      `JOB_ID` varchar(200) DEFAULT NULL,
      `SOURCE_TAB` varchar(1000) DEFAULT NULL COMMENT '源表',
      `SOURCE_ROW_COUNT` int(10) DEFAULT NULL COMMENT '来源表记录数',
      `TARGET_TAB` varchar(1000) DEFAULT NULL COMMENT '目标表',
      `TARGET_ROW_COUNT` int(10) DEFAULT NULL COMMENT '目标表记录数',
      `ERROR_CODE` varchar(200) DEFAULT NULL COMMENT '错误编码(mysql无法直接获取,暂为NULL)',
      KEY `idx_hive_log_create` (`STARTDATE`) USING BTREE
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8






    CREATE TABLE `eamp_hive_log_hd` (
      `ID` int(10) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
      `PROC_ID` int(10) NOT NULL DEFAULT '1' COMMENT 'PROC主键ID',
      `PROC_NAME` varchar(100) NOT NULL COMMENT '存储过程名称',
      `PROC_DATE` varchar(100) DEFAULT NULL COMMENT '执行存储过程日期',
      `STARTDATE` datetime DEFAULT NULL COMMENT '开始执行时间',
      `ENDDATE` datetime DEFAULT NULL COMMENT '结束时间',
      `RESULT` varchar(4000) DEFAULT NULL COMMENT '结果',
      `DURATION` int(11) DEFAULT NULL COMMENT '执行时长,单位秒',
      `NOTE` varchar(4000) DEFAULT NULL COMMENT '备注',
      `SCHEMA` varchar(20) DEFAULT NULL,
      `JOB_ID` varchar(200) DEFAULT NULL,
      `SOURCE_TAB` varchar(1000) DEFAULT NULL COMMENT '源表',
      `SOURCE_ROW_COUNT` int(11) DEFAULT NULL COMMENT '数据源记录数',
      `TARGET_TAB` varchar(1000) DEFAULT NULL COMMENT '目标表',
      `TARGET_ROW_COUNT` int(11) DEFAULT NULL COMMENT '目标表记录数',
      `ERROR_CODE` varchar(200) DEFAULT NULL COMMENT '错误编码(mysql无法直接获取,暂为NULL)',
      PRIMARY KEY (`ID`),
      KEY `INDEX_01` (`PROC_NAME`) USING BTREE,
      KEY `INDEX_02` (`PROC_ID`,`PROC_NAME`) USING BTREE
    ) ENGINE=MyISAM AUTO_INCREMENT=108483 DEFAULT CHARSET=utf8
    展开全文
  • 一个好的ETL调度平台应该具备以下优点: 作业集成管理 运行监控(WEB监控) 异常警告(邮件及短信) 日志可查看 后台调度 系统配置 作业执行情况分析界面 探索中发现了ETL调度平台——airflow。airflow 是一...

    ETL是数据分析不可缺少的一环,对于ETL的调度管理也是至关重要的。

    一个好的ETL调度平台应该具备以下优点:

    • 作业集成管理
    • 运行监控(WEB监控)
    • 异常警告(邮件及短信)
    • 日志可查看
    • 后台调度
    • 系统配置
    • 作业执行情况分析界面

    探索中发现了ETL调度平台——airflow。airflow 是一个编排、调度和监控workflow的平台,由Airbnb开源,现在在Apache Software Foundation 孵化。airflow 将workflow编排为tasks组成的DAGs,调度器在一组workers上按照指定的依赖关系执行tasks。同时,airflow 提供了丰富的命令行工具和简单易用的用户界面以便用户查看和操作,并且airflow提供了监控和报警系统。

     

    (一)安装

    1.安装airflow

    pip install apache-airflow

    2.airflow相关组件

    pip install apache-airflow[all]

    可选择性安装相关数据库连接的驱动组件,这里我选择了第一项[all],若是分布式数据库,airflow检测到不符合条件,该组件会安装失败,不影响其他组件的安装。

    3.初始化数据表

    airflow initdb

    3.问题及解决方式:

    (1)环境变量配置报错

    pip install apache-airflow

    添加环境变量:

    [centos@kk-vm ~]$ SLUGIFY_USES_TEXT_UNIDECODE=yes pip install apache-airflow==1.10.0

    (2)缺少gcc

    若是安装中出现如下的报错,证明linux缺少gcc

    解决方式:

    sudo  yum install gcc

    • 部署配置

    1.启动webserver守护进程:

    airflow  webserver

    2.启动调度器,默认每300s检测一下/home/centos/airflow/dags下的文件,

    airflow scheduler

    将下面的代码放到/home/centos/airflow/dags目录下,调度器会自动检测该目录,并执行。

    """
    Code that goes along with the Airflow tutorial located at:
    https://github.com/apache/airflow/blob/master/airflow/example_dags/tutorial.py
    """
    from airflow import DAG
    from airflow.operators.bash_operator import BashOperator
    from datetime import datetime, timedelta
    
    
    default_args = {
        'owner': 'airflow',
        'depends_on_past': False,
        'start_date': datetime(2015, 6, 1),
        'email': ['airflow@example.com'],
        'email_on_failure': False,
        'email_on_retry': False,
        'retries': 1,
        'retry_delay': timedelta(minutes=5),
        # 'queue': 'bash_queue',
        # 'pool': 'backfill',
        # 'priority_weight': 10,
        # 'end_date': datetime(2016, 1, 1),
    }
    
    dag = DAG(
        'tutorial', default_args=default_args, schedule_interval=timedelta(days=1))
    
    # t1, t2 and t3 are examples of tasks created by instantiating operators
    t1 = BashOperator(
        task_id='print_date',
        bash_command='date',
        dag=dag)
    
    t2 = BashOperator(
        task_id='sleep',
        bash_command='sleep 5',
        retries=3,
        dag=dag)
    
    templated_command = """
        {% for i in range(5) %}
            echo "{{ ds }}"
            echo "{{ macros.ds_add(ds, 7)}}"
            echo "{{ params.my_param }}"
        {% endfor %}
    """
    
    t3 = BashOperator(
        task_id='templated',
        bash_command=templated_command,
        params={'my_param': 'Parameter I passed in'},
        dag=dag)
    
    t2.set_upstream(t1)
    t3.set_upstream(t1)
    

    查看依赖关系:

    自(2015, 6, 1)开始执行任务:

     

    从log可以查看执行结果:

    templated_command

     :通过循环5次,执行了5次bash命令,       

     echo "{{ macros.ds_add(ds, 7)}}"  当前时间加7day。

    还可以传递参数。

    展开全文
  • 1.目前etl的fetch task策略是基于任务子孙任务数和任务优先级获得task list2.然后遍历task list 查看任务是否具备执行条件集群资源校验(yarn/hdfs)数据是否准备好(仅mysql task具备),解决主从延迟问题任务开始时间...

    1.目前etl的fetch task策略是基于任务子孙任务数和任务优先级获得task list

    2.然后遍历task list 查看任务是否具备执行条件

    集群资源校验(yarn/hdfs)

    数据是否准备好(仅mysql task具备),解决主从延迟问题

    任务开始时间

    任务的父任务是否都执行成功

    3.每10s fetch一次task,遍历一次基于<2>的逻辑

    我们把任务的父任务执行状态判断放到最后是想降低数据库查询成本(如果没放到最后,可以在exec_log表中维护一个依赖是否校验的状态去动态变更来减少数据库轮训查找成本)

    我们如何避免,如 a->b->c 依赖关系,a还没完成又去校验b,b又没通过,又去校验c这种情况呢(如果此树较大,我们又是基于子孙任务数排序的话,会出现这种无谓遍历数据库的情况)。如果我们没有维护全局树及树中各任务的状态的话(成本较高,要时刻保证内存中的树与mysql表的任务状态同步)。

    我们可以这么做(较少数据库的无谓遍历),在任务初始化时把任务依赖的dag加载的map中,并只维护任务与其一级子任务的关系如(<1,[2,3,4]> 父任务id:1,子任务id:2,3,4),然后在任务a校验没通过时,把a的一级子任务加入到list(此处不能放入set中,以为不能使用去重的集合,一个子任务可能会有多个父任务)中,依次遍历按照如此逻辑,在这一轮遍历结束后清空list。(或者维护全局list,在此任务校验通过后,从set清除此任务的一级子任务)---此种策略适用于只基于子孙任务数的排序方式,如果还有基于权重的排序并且权重只更新了子任务而没有更新此子任务的上游所有父任务就会出现严重问题

    索性不如在每次fetch时就拿出子与父的map关系及当时的任务状态,作为任务提交时的判断,这样每fetch一次只与数据库交互一次

    有如下两张表,直接用sql可解决之前说的问题,注:

    denpend

    exec_log

    depend 表的父id join exec_log 表的task_id,那么depend.child_id, depend.parent_id(=exec_log.task_id), exec_log.status(父任务的状态)就出来了,group by depend.child_id ,sum(exec_log.status)=0 的depend.child_id可以跑,否则不可跑

    此策略已上线,运行稳定!!!

    展开全文
  • web上发起调度任务,将会使用feign调用调度引擎的接口启动批次。本项目注册中心采用consul,如果有需要使用eureka的,可以自行修改pom文件,将注册中心切换到eurekaJava版本JDK1.8如果jdk是1.9,请在pom.xml文件中...
  • ETL调度开发(1)——编写说明

    千次阅读 2014-08-12 22:27:38
    并且在数据整合之后进行统计调度,这里将会对本人开发的一个ETL调度进行详细的说明。 需求概述: 调度分为如下方式: ü 一个是SHELL编写的ETL调度,支持小时、日、周、月文件的调度。 ü 一个是流程调度,主要...
  • etl调度过程中的常见错误

    千次阅读 2012-12-31 23:07:00
    etl调度过程中,通过会有大大小小的问题,这些问题会直接导致调度成功与否,一旦上线,就需要每天成功调度。所以对于etl调度过程中错误的解决方案至关重要。 现总结常见的几个: 1.数据库宕机  给客户打电话,找...
  • ETL 调度原理浅析及最佳实践 前言: 最早的调度应用是 unix 的 crontab 。   最早的 ETL 规范是 NCR 和 SPSS 一起制定的,所以 NCR ETL Automation 的方式此后一直是业界效仿的原因 ...
  • Oracle ETL调度

    千次阅读 2016-08-06 13:07:15
    begin  for v_day in '20160101'..'20160131' loop  P_ETL_TWO_STOCK_D(v_day);  end loop; end; begin  for v_day in '20160201'..'20160229' loop  P_ETL_TWO_STOCK_D(v_day);  end l
  • 前言市面上ETL调度工具很多,用起来比较方便,但每一种工具往往具有局限性,可能某些个别的功能不支持。其实我们只要明白了调度系统的思想,底层的实现,完全可以自己手动搭建一个,用开源的语言,数据库,再配合...
  • 主要通过crontab编写定时任务,调度shell脚本,shell脚本起调py脚本 2、crontab配置定时任务 --每天八点定时调度,插入执行日志到指定文件 00 08 * * * /usr/bin/sh /home/work/shell/main_worklog.sh > /home...
  • 大型的电商网站每天要处理用户的浏览、下单、购买等行为就会产生大量的访问信息,通过...本文主要介绍一种基于Hadoop的ETL调度架构,功能组件基于如下:  分布式数据平台:hadoop(2.7.6版本)  数据获取...
  • ETL调度介绍

    2013-06-10 18:37:58
    ETL :提取 转换 加载 大数据的的一个最重要特点是,很多数据是无用的,必须经过一定的处理之后才有加载。而将杂乱无章的数据处理成有用的数据的过程叫ETL。BI系统发展了很多年,形成了很多ETL方法,工具。主要...
  • ETL调度datastage之dsjob的用法

    千次阅读 2012-11-20 12:36:30
    ETL调度中不乏要用shell脚本来运行DATASTAGE中的JOB,现测试一下DSJOB的用法然后总结一下(边测试边总结) dsjob -run [-mode ] PROJECT_NAME JOB_NAME -mode为选择运行模式, NORMAL表示正常运行,此时和不写-...
  • 前言:美方:Control-M ( www.bmc.com)中方:TASKCTL ( www.taskctl.com )ETL调度工具中美PK ( TASKCTL VS Control-M)Control-MTaskCtl而国内,在众多的软件中选择TASKCTL,我似乎没有任何犹豫。该软件虽然没什么...
  • ETL调度系统V2.3 (ESG)

    千次阅读 2011-12-07 00:19:56
    ETL调度系统V2.3 (ESG) 该客户端主要由ETL设计程序(ETLDesign.exe)和ETL监控程序(该程序还没有完成)组成。 客户端软件目录 客户端登入界面,该软件支持联机、单机模式。 联机模式的数据源选择...
  • ETL调度中读写数据信息,都须要连接数据库,以下的子程序通过传入的数据库连接字符串和数据库命令(或SQL)运行所须要的操作: #!/usr/bin/bash #created by lubinsu #2014 source ~/.bash_profile values=`...
  • TASKCTL从2.0开始,就定位为企业级调度基础软件,能实现10万级任务调度控制,能满足各大企业的调度规模需求。
  • 变量意义 在具体的应用中,我们经常会把一些路径、作业程序中使用日期、数据库用户、密码等信息用变量来表示,这可以极大程度增强设计信息的灵活性以及可移植性。 在TASKCTL中,每个流程或定时器都可以定义自己的...
  • 通过informatica方式抽取数据; 通过databus方式抽取数据;
  • 一、Airflow是什么airflow 是一个编排、调度和监控workflow的平台,由Airbnb开源,现在在Apache Software Foundation 孵化。airflow 将workflow编排为由tasks组成的DAGs(有向无环图),调度器在一组workers上按照指定...
  • ETL调度中读写数据信息,都需要连接数据库,下面的子程序通过传入的数据库连接字符串和数据库命令(或SQL)执行所需要的操作: #!/usr/bin/bash #created by lubinsu #2014 source ~/.bash_profile values=`sqlplus ...
  • ETL负责将分布的、异构数据源中的数据如关系数据、 平面数据文件等抽取到临时中间层后进行清洗、转换、集成,最后加载到数据仓库或数据集市中,成为联机分析处理、数据挖掘的基础。 ETL是数据仓库中的非常重要的一...
  • Airflow教程-使用Airflow实现ETL调度

    千次阅读 2019-07-30 15:08:00
    airflow 是一个编排、调度和监控workflow的平台,由Airbnb开源,现在在Apache Software Foundation 孵化。airflow 将workflow编排为由tasks组成的DAGs(有向无环图),调度器在一组workers上按照指定的依赖关系执行...
  • ETL调度系统2.3.1

    2012-02-10 23:49:28
    花了一年左右的尝试做一个分布式调度系统,该软件由设计软件、监控软件(目前还没完成)和后台服务组成。该系统主要运用于数据仓库行业和运维行业中。目前本系统采用的是C/S结构,客户端运用于windows系统;而后台...
  • 在《批量作业调度技术界的两大困惑》一文中,分别讨论了在传统设计理念下,流程图的可视化、作业流的定义设计功能,随着作业量增加,越来越难用,越来越不适用是一个难以避免的问题。就这两个问题,我给大家分享一下...
  • 流程配置信息是调度的主要信息来源,掌握流程配置是掌握调度的主要方式。流程配置的主要思路都是对任务进行节点化抽象,并从任务之间的关系描述入手。TASKCTL借鉴了现代程序语言的开发概念,以具有一定语法的代码..
  • 市面上ETL调度工具很多,用起来比较方便,但每一种工具往往具有局限性,可能某些个别的功能不支持。其实我们只要明白了调度系统的思想,底层的实现,完全可以自己手动搭建一个,用开源的语言,数据库,再配合shell...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 716
精华内容 286
关键字:

etl调度