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.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端口查看任務執行情況。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章