Centos7 배포 AirFlow

16876 단어 AirFlowCentos7
Centos7 배포 AirFlow
공식 문서
1. 환경 준비
1.1.Python3 설치
yum install epel-release -y
yum install https://centos7.iuscommunity.org/ius-release.rpm -y
yum install python36u -y
ln -s /bin/python3.6 /bin/python3
yum install python36u-pip -y
ln -s /bin/pip3.6 /bin/pip3

1.2.국내원
mkdir ~/.pip
vim ~/.pip/pip.conf
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple

1.3.가상 환경 구성
mkdir -p /usr/local/thirdparty/
cd /usr/local/thirdparty/
python3 -m venv airflow_env
source /usr/local/thirdparty/airflow_env/bin/activate

1.4.OS 종속 설치
yum install -y gcc gcc-c++ python-devel python36u-devel

2. AirFlow 설치
  • 설치
  • export SLUGIFY_USES_TEXT_UNIDECODE=yes
    pip install apache-airflow[all]
    
  • 부팅 테스트
  • mkdir /usr/local/airflow
    cd /usr/local/airflow
    export AIRFLOW_HOME=`pwd`
    airflow initdb
    #       ,     
    airflow webserver -p 8080
    #      
    airflow scheduler
    
    

    브라우저 액세스http://ip:8080서비스 시작 성공 여부 보기
    3. Systemd 배포
    3.1.MySQL 라이브러리 및 사용자 작성
    mysql> CREATE DATABASE airflow; 
    mysql> GRANT all privileges on airflow.* TO 'airflow'@'localhost'  IDENTIFIED BY 'airflow'; 
    mysql> FLUSH PRIVILEGES; 
    

    3.2.에어플로우 시스템 사용자 만들기
    useradd airflow
    

    3.3.구성 수정
    vim /usr/local/airflow/airflow.cfg
    
    # [core]    
    #    mysql  
    sql_alchemy_conn =  mysql://airflow:[email protected]:3306/airflow
    #     Dags
    load_examples = False
    
    # [webserver]     
    #     
    authenticate = True
    #       (        )
    auth_backend = airflow.contrib.auth.backends.password_auth
    #      
    filter_by_owner = True
    

    3.4.수정/usr/local/airflow 소유자
    chown -R airflow:airflow /usr/local/airflow
    

    3.5.시스템 관련 서비스 파일 설정
  • 파일 가져오기
  • GitHub에서 에어플로우 원본을 가져오고 스크립트를 시작합니다 scripts/systemd 디렉터리에서
    디렉토리 가져오기systemd - /root
    cd /root/systemd
    
  • 구성airflow 파일
  • vim airflow
    

    구성 바꾸기
    AIRFLOW_CONFIG=/usr/local/airflow/airflow.cfg
    AIRFLOW_HOME=/usr/local/airflow
    
  • 구성airflow-webserver.service 파일
  •  vim airflow-webserver.service
     
    

    시작 스크립트를 다음과 같이 바꾸기
    ExecStart=/bin/sh -c 'source /usr/local/thirdparty/airflow_env/bin/activate && airflow webserver --pid /run/airflow/webserver.pid'
    
  • 구성airflow-scheduler.service 파일
  • vim airflow-scheduler.service
    

    시작 스크립트를 다음과 같이 바꾸기
    ExecStart=/bin/sh -c 'source /usr/local/thirdparty/airflow_env/bin/activate && airflow scheduler'
    
  • 구성airflow-flower.service 파일
  •  vim airflow-flower.service
    

    시작 스크립트를 다음과 같이 바꾸기
    ExecStart=/bin/sh -c 'source /usr/local/thirdparty/airflow_env/bin/activate && airflow flower'
    
  • 구성airflow-worker.service 파일
  • vim airflow-worker.service
    

    시작 스크립트를 다음과 같이 바꾸기
    ExecStart=/bin/sh -c 'source /usr/local/thirdparty/airflow_env/bin/activate && airflow worker'
    
  • 관련 파일을 해당 디렉토리로 이동
  • mkdir /run/airflow
    chown -R airflow:airflow /run/airflow
    
    cp airflow /etc/sysconfig/
    
    cp airflow.conf /etc/tmpfiles.d/
    
    cp airflow-*.service /usr/lib/systemd/system/
    

    3.6.초기화db
    source /usr/local/thirdparty/airflow_env/bin/activate
    cd /usr/local/airflow
    export AIRFLOW_HOME=`pwd`
    airflow initdb
    

    3.7.사용자 작성
    source /usr/local/thirdparty/airflow_env/bin/activate
    cd /usr/local/airflow
    export AIRFLOW_HOME=`pwd`
    vim user_manger.py
    

    다음 내용 복사
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    
    import sys
    from airflow import models, settings
    from airflow.contrib.auth.backends.password_auth import PasswordUser
    
    
    class UserManager(object):
    
        def __init__(self):
            self.user = models.User()
            self.passwd_user = PasswordUser(self.user)
            self.session = settings.Session()
    
        def add_user(self, username, passwd, email=None, is_super=False):
            self.passwd_user.username = username
            self.passwd_user.password = passwd
            if email:
                self.passwd_user.email = email
            if is_super is True:
                self.passwd_user.superuser = True
            self.session.add(self.passwd_user)
            self.session.commit()
    
        def change_passwd(self, username, new_passwd=None, email=None, superuser=None):
            if not any([new_passwd, email, superuser]):
                return
            info = {}
            if new_passwd:
                self.passwd_user.password = new_passwd
                info['password'] = self.passwd_user.password
            if email:
                info['email'] = email
            if superuser is True:
                info['superuser'] = True
            if superuser is False:
                info['superuser'] = False
            try:
                self.session.query(PasswordUser).filter(PasswordUser.username == username).update(info)
            except Exception as e:
                pass
            else:
                self.session.commit()
    
        def __del__(self):
            self.session.close()
    
    
    if __name__ == '__main__':
    
        manager = UserManager()
        manager.add_user('admin', 'admin', 'admin@localhost', True)
        # manager.change_passwd('admin', 'admin', 'admin@localhost', True)
    
    
    python user_manger.py
    

    3.8.서비스 시작
    systemctl start airflow-webserver.service
    systemctl start airflow-scheduler.service
    

    3.9.전원 켜기 부팅 설정
    systemctl enable airflow-webserver.service
    systemctl enable airflow-scheduler.service
    

    4. 웹 액세스
    브라우저 액세스http://ip:8080
    admin/admin

    좋은 웹페이지 즐겨찾기