ITPub博客

首页 > 大数据 > ELK > airflow性能优化

airflow性能优化

原创 ELK 作者:liuhongwei 时间:2021-03-15 09:20:42 1 删除 编辑

目录

  1. Airflow 系统结构
    1.1 单节点结构
    1.2 高可用结构
  2. Airflow 参数调优
     2.1 全局调优
     2.2 DAG池
     2.3 DAG调优
  3. Airflow 重启
  4. Airflow 安装目录
  5. Airflow 日志目录

1.Airflow 系统结构

1.1 单节点架构


1.2 多节点架构


解释:

Worker Node : 工作节点,可以理解为执行任务的节点

Scheduler : 调度节点,可以理解为安排任务的

Web Server : 网站,提供可视化作业展示,作业管理的界面


注意:

1.大家可以看到,不管是哪个模块,都会连接到数据库,所以元数据库最好放到单独的机器,调优的时候也需要考虑到数据连接池的大小

2.Worker Node 可以水平扩展,Scheduler 模块只能由一个,切记,不然会乱套


2.Airflow 参数调优

2.1 全局调优 airflow.cfg 

Airflow 一般情况下不会成为性能瓶颈,出问题的大多数会是对接的执行系统,为了更好的控制流入执行系统的流量,有必要对并发的情况做一个限制,

一般情况,我们会采用 CeleryExecutor ,做为执行器, 以下调优都是针对这个场景进行

worker_concurrency :

并发的workers  Executor,取决于计算机的硬件资源(一般是CPU的资源) ,数值设置在CPU核数*2 ~CPU核数*3比较好,太多会导致CPU资源过高影响别的一些工作,

数量越大,同时执行的任务越多,设置的大小不会等同于运行任务的个数,但是设置得大,同时跑得任务会变多,具体的换算关系有待考证。


关于worker,比较好的做法是设置弹性值,(如下,max 前,min 后) ,这样CPU的利用会比较弹性,任务不多的时候用最小值,大的时候慢慢增加,如下:

worker_autoscale =32,16   

注意:设置了worker_autoscale ,worker_concurrency就会不起作用


parallelism

整个airflow同时运行的任务数量,包括等待的,执行的,重试的等等,其中执行中的任务与 worker_concurrency 有很大的关联,如果执行的任务达到了上限,其他的任务都会排队等待。


dag_concurrency

单个dag内允许同时执行的任务数


max_active_runs_per_dag

对同一个DAG,允许运行的最大dag数量,主要场景有,一个任务前天,昨天的任务没有跑完,今天跑任务的时间点也到了,如果设置这个值为2,那么今天这次DAG作业就不会执行


sql_alchemy_pool_size

数据库连接池的大小,根据机器配置可以适当的设置,CPU核数*2 + 磁盘个数


airflow_home

airflow目录,在/etc/profile 文件添加 (AIRFLOW_HOME=/XXXXX) ,配置文件设置是否生效有待测试


dags_folder 

dag文件放置的目录,这里比较tracking 的是,需要把dag文件夹放到airflow_home目录下,不然会找不到


load_examples

是否加载测试dag,False 不加载


dags_are_paused_at_creation 

是否在创建的时候终止,设置成False,代表创建就运行


dag_dir_list_interval

扫描DAG目录的时间,如果想DAG快速扫描到,设置这个时间,越短越好,以秒为单位


2.2 DAG池

在airflow中有池的概念,这样方便在dag级别控制并发的任务数,


注意:

池的大小设置受其他参数控制,设置大没有太多意义,以下是参数设置对并行任务的影响程度

parallelism >  dag_concurrency  >  non_pooled_task_slot_count


影响最大的是 parallelism (当然其实还决定于worker_concurrency  )其他依次影响。

举例如下:

 如果是  parallelism = 4, dag_concurrency=100 ,non_pooled_task_slot_count = 1000 (这个就是池的slots)

在这种场景下,并行的任务就只能是4个,后面的设置其实是没有用的


如果是  parallelism = 100,   dag_concurrency=3 , non_pooled_task_slot_count = 1000 

这时dag_concurrency 就起作用了,一个dag最多并行跑3个任务


如果是 parallelism = 100, dag_concurrency=50,non_pooled_task_slot_count = 10

如果DAG指定池了,那么并行的任务肯定是小于10


2.3 DAG 调优

2.1,2.2 很多参数是全局性的,为了精选控制到单个DAG,我们需要在单个Dag上做一些配置,以方便资源合理利用

例如,我们指定一个DAG内它的池, 并且指定并发执行的任务是3个


default_args = {
'pool':' backfill',
'start_date': datetime(2020,11,27,10,0,0, tzinfo=local_tz), # 开始时间
}

dag = DAG(dag_id='perform-7-args',description='for performance test 7',default_args= default_args,schedule_interval='*/4 * * * *', concurrency=3)


3. Airflow 重启

Airflow配置修改后,往往需要重启服务来达到调优的目的,因为Airflow的重启比较有个性,所以特意通过此章节来说明


重启webserver和scheduler

查找到进程并干掉: ps -ef|egrep 'scheduler|airflow-webserver'|grep -v grep|awk '{print $2}'|xargs kill -9

删除pid文件 : rm -rf /opt/airflow/airflow-scheduler.pid 

启动网站: airflow webserver -p 8080 -D

启动调度:  airflow scheduler -D

查看错误: tail -f /opt/airflow/airflow-scheduler.err 


重启worker

查找到进程并干掉: ps -ef|egrep 'celeryd'|grep -v grep|awk '{print $2}'|xargs kill -9

删除pid文件 : rm -rf /opt/airflow/airflow-worker.pid

启动worker : airflow worker -D

查看错误:tail -f /opt/airflow/airflow-worker.err   


注意:如果配置跟worker 无关,只用重启webserver 和 scheduler 即可


4.Airflow安装目录:/usr/python3/lib/python3.7/site-packages/airflow

5.Airflow日志目录:scheduler:/gwmfc/airflow/logs/scheduler

                               webserver:/gwmfc/airflow/logs/dag_processor_manager

                               任务中task的日志:/gwmfc/airflow/logs/${dag_id}/${task_id}


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

上一篇: hive常用函数
下一篇: 计算好友对数
请登录后发表评论 登录
全部评论

注册时间:2021-03-15

  • 博文量
    8
  • 访问量
    7055