AirFlow 简单学习

简介

Airflow 是一个可编程,调度和监控的工作流平台,基于DAG,有点调度只能根据时间来控制先后顺序,它可以控制任务的先后顺序,它web管理界面同样也可以方便的管控调度任务。

执行器架构

执行器种类

SequentialExecutor:单进程顺序执行任务,默认执行器,通常只用于测试

LocalExecutor:多进程本地执行任务

CeleryExecutor:分布式调度,生产常用

DaskExecutor :动态任务调度,主要用于数据分析

执行器系统整体结构图

在这里插入图片描述
turing 就是外部系统,通过GDags把他们的任务弄成dag图,master中的webUI,用来监控和管理,sheduler用来调度,只支持单节点,传给rabbitMQ或者redis,排成队列,worker负责执行具体dag中的task, worker支持多节点

常见的任务处理器

BashOperator 运行在本地
SSHOperator jar包在一个机器上,启动在另外一个机器上
HttpOperator
SqlOperator
DockerOperator

常用命令

airflow webserver -D 守护进程运行webserver
airflow schduler -D 守护进程运行调度器
airflow worker -D 守护任务处理器
airflow worker -c 1 -D 守护进程运行celery worker 并指定任务并发数为1
airflow pause dag_id 暂停任务
airflow unpause dag_id 取消暂停,等同于在管理员页面打开off按钮
airflow list_tasks dag_id 查看task列表
airflow clear dag_id 清空任务实例
airflow trigger_dag dag_id -r RUN_ID -e EXEC_DATE 运行整个dag文件
airflow run dag_id task_id execution_date 运行task

AirFlow 文件配置

`from airflow import DAG, settings
from airflow.models import DagRun
from airflow.operators.bash_operator import BashOperator
from airflow.contrib.operators.ssh_operator import SSHOperator
from datetime import datetime, timedelta

from airflow.operators.python_operator import ShortCircuitOperator


"""
用户过去一个月观看过的文章的ID
计算用户的向量
用户计算好的向量添加文件头 <用户数,模型维度>

基于用户向量的协同过滤推荐
"""

default_args = {
    'owner': 'weishuaibing',  #作者
    'depends_on_past': False, #是否依赖上游任务
    'start_date': datetime(2021, 7, 11), #任务开始时间
    'email': ['1797930498@qq.com'], #告警通知邮箱
    'email_on_failure': True,
    'email_on_retry': False,
    'email_on_success': False,
    'retries': 3,
    'retry_delay': timedelta(minutes=10),
    # 'queue': 'bjyz-va-hJava7',
    # 'pool': 'backfill',
    # 'priority_weight': 10,
    # 'end_date': datetime(2016, 1, 1),
}

dag = DAG(
    'UserWatchArticleAndUserVectorAndRecommend', #dag的id
    default_args=default_args,
    tags=['hadoop', 'spark', 'wei'],描述
    schedule_interval='30 2 * * *',  # 每天凌晨2点30执行一次
    catchup=False)

# t1 计算用户id是18位的 用户观看的文章
t1 = SSHOperator(
    ssh_conn_id='TianXie_node42_hadoop',
    task_id='UserWatchArticleID18',
    command='/xmt/projects/user_portrait/UserWatchArticleRunnerID18.sh ',
    dag=dag)


# t2 计算用户id是19位的 用户观看的文章
t2 = SSHOperator(
    ssh_conn_id='TianXie_node42_hadoop',
    task_id='UserWatchArticleID19',
    command='/xmt/projects/user_portrait/UserWatchArticleRunnerID19.sh ',
    dag=dag)

# 根据用户看过的文章 计算用户向量
t3 = SSHOperator(
    ssh_conn_id='TianXie_node42_hadoop',
    task_id='SparkUserVectorCalculation',
    command='/xmt/projects/user_vector/UserVectorCalculation.sh ',
    dag=dag)

# 计算好的向量增加文件头,并且删除暂存的文件(hdfs上产生的和本地产生的,最终生成用户向量 /xmt/projects/user_vector/user_vector.txt)
t4 = SSHOperator(
    ssh_conn_id='TianXie_node42',
    task_id='HandleUserVectorAndRemoveTempFile',
    command='/xmt/projects/user_vector/handle.sh ',
    dag=dag)

# 基于用户向量的协同过滤推荐
t5 = SSHOperator(
    ssh_conn_id='TianXie_node42_hadoop',
    task_id='RecommendWithUserVector',
    command='/xmt/projects/user_vector/RecommendWithUserVector.sh ',
    dag=dag)

t1 >> t2 >> t3 >> t4 >> t5`
from airflow import DAG, settings
from airflow.models import DagRun
from airflow.operators.bash_operator import BashOperator
from datetime import datetime, timedelta

from airflow.operators.python_operator import ShortCircuitOperator


"""
用户画像
"""

default_args = {
    'owner': 'zhenghaozhe',
    'depends_on_past': False,
    'start_date': datetime(2020, 10, 19),
    'email': ['zhenghaozhe@163.com'],
    'email_on_failure': True,
    'email_on_retry': False,
    'email_on_success': False,
    'retries': 3,
    'retry_delay': timedelta(minutes=5),
    #'queue': 'gb-prod-bigdata-node43',
    # 'pool': 'backfill',
    # 'priority_weight': 10,
    # 'end_date': datetime(2016, 1, 1),
}

dag = DAG(
    'UserShortTermTagsJob',
    default_args=default_args,
    tags=['short-tags', 'mr'],
    schedule_interval='0 */1 * * *',  # 每小时执行一次
    catchup=False)


# t1 用户短期标签
t1 = BashOperator(
    ssh_conn_id='TianXie_node42_hadoop',
    task_id='ShortTermTagsAnalysis',
    bash_command='hadoop jar /home/linchen/airflow/jar/lgl-personas-calc-service-1.0.jar com.xmt.mr.runner.ShortTagsRunner ',
    dag=dag)

t1

参考

本人写这个只是为了个人学习,如果有侵权行为,请及时联系我。
http://www.imooc.com/article/69598

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值