airflow分布式部署踩坑记录之配置篇

配置mysql作为元数据库

  • 安装mysql

    >: yum list | grep mysql
    >: yum install -y mysql-server mysql
    启动MySQL服务 >:service mysqld start
    重启MySQL服务 >:service mysqld restart
    停止MySQL服务 >:service mysqld stop
    检查MySQL服务是不是开机自启 >:chkconfig --list | grep mysqld
    设置MySQL服务开机自启 >:chkconfig mysqld on 
    
  • 设置mysql用户密码

    设置MySQL根用户密码 (注:mysql root用户默认没有密码)
    >:mysql -uroot 登陆mysql
    >:set password=password("password of root user") 为root用户设置密码,不是必须操作
    >:flush privileges
    >:create database airflow 创建airflow数据库
    >:grant all privileges on airflow.* TO 'odin'@'localhost' identified by 'odin_pw' with grant option
      (解释:odin 替换成你想要设置的用户名;odin_pw替换成该用户的密码)
    >:grant all privileges on airflow.* TO 'odin'@'%' identified by 'odin_pw' with grant option
    >:grant all privileges on airflow.* TO 'odin'@'ip' identified by 'odin_pw' with grant option
    
     (注:查看mysql版本信息的方法之一:`mysql --help | grep Distrib`)
    

在安装完mysql之后,你需要查看mysql的版本mysql --help | grep Distrib,5.7版本以下的mysql还需要做一些修改:

  • 查看mysql默认存储引擎并且修改默认引擎(因为MySQL的默认引擎是My了SAM数据引擎,该引擎不支持事务也不支持外键,在使用的过程中会有报错,并且对于字符串数据存储的长度也有限制,所以需要将默认引擎修改为innodb)

    使用root账号登陆MySQL >:mysql -uroot 
    查看mysql使用的默认引擎 >:show engines (你可以看到默认的数据引擎并且其也支持InnoDB)
    设置默认引擎,在配置文件/etc/my.cof中的[mysqld]中加入>:default-storage-engine=INNODB
    最后重启mysql服务
    
    (注意:在修改mysql默认存储引擎之前穿件的数据库和数据表的默认存储引擎是不会发生变化的,需要删除重建)
    

  • 修改airflow源码,5.7之下版本的mysql在使用的时候会报如下错误,所以需要将airflow/migrations/versions/4addfa1236f1_add_fractional_seconds_to_mysql_tables.py源码中mysql.DATETIME(fsp=6)全部改为mysql.DATETIME()
>>>> sqlalchemy.exc.ProgrammingError: (_mysql_exceptions.ProgrammingError)
>>>> (1064, "You have an error in your SQL syntax; check the manual that
>>>> corresponds to your MySQL server version for the right syntax to use
>>>> near '(6) NULL' at line 1") [SQL: u'ALTER TABLE dag MODIFY last_scheduler_run DATETIME(6) NULL']
  出现这个错误的原因:fsp表示支持秒的小数部分的精度,最大为6,最小为0表示没有小数部分
  但是这个功能只在5.6.4版本开始才被支持,所以如果版本太低,那一定就是会报错的啊

  • 修改airflow配置支持mysql
    • 更改airflow的数据库连接
      sql_alchemy_conn = mysql://odin:odin_pw@localhost/airflow
    • 初始化数据库
      airflow initdb

配置CeleryExecutor作为任务执行器

  • 安装erlang和rabbitMQ
    wget https://packages.erlang-solutions.com/erlang/esl-erlang/FLAVOUR_1_general/esl-erlang_18.3-1~centos~6_amd64.rpm
    yum install esl-erlang_18.3-1~centos~6_amd64.rpm
    wget https://github.com/jasonmcintosh/esl-erlang-compat/releases/download/1.1.1/esl-erlang-compat-18.1-1.noarch.rpm
    yum install esl-erlang-compat-18.1-1.noarch.rpm
    wget http://www.rabbitmq.com/releases/rabbitmq-server/v3.6.1/rabbitmq-server-3.6.1-1.noarch.rpm
    yum install rabbitmq-server-3.6.1-1.noarch.rpm

  • 配置RabbitMQ

    • 使用rabbitqctl status 检查RabbitMQ是否正常启动
    • 设置开机启动 chkconfig rabbitmq-server on
    • 开启服务service rabbitmq-server start
    • 停止服务service rabbitmq-server stop
    • 重启服务service rabbitmq-server restart
    • 添加用户并且配置权限
      • rabbitmqctl add_user [user name] [user password] : rabbitmqctl asd_user odin 123456
      • rabbitmqctl set_user_tag odin administrator (这里可以添加不同的角色,也可以添加多个角色)
      • rabbitmqctl add_vhost airflow(添加一个命名空间或者叫虚拟主机 airflow)
      • rabbitmqctl set_permissions -p airflow odin ".*" ".*" ".*"
  • 登陆rabbitMQ

    • rabbitMQ服务端口如下:
      • client端通信端口 5672
      • web ui访问端口15672
      • server间通信端口25672
      • erlang发现端口4369

airflow分布式部署踩坑记录之配置篇_第1张图片

  • 配置airflow.cfg
broker_url = amqp://odin:123456@localhost:5672/airflow
celery_result_backend = db+mysql://odin:odin_pw@localhost:3306/airflow
executor = CeleryExecutor
default_queue = airflow
  • 重新启动airflow
    airflow webserver -p8080
    airflow worker
    airflow flower
    执行airflow flower启动celery的 flower ui,可以在网页端访问localhost:5555端口查看任务执行情况。

你可能感兴趣的:(airflow)