AirFlow设置WSL

时间:2019-12-10 15:23:08

标签: python visual-studio-code airflow windows-subsystem-for-linux

我正在尝试在WSL中设置AirFlow并遇到问题。我已经阅读了文章和SO,但无法解决此问题。

我正在遵循Airlfow教程https://airflow.apache.org/docs/stable/tutorial.html进行设置。 我能够运行上面教程中的最终脚本运行而没有错误。基本上这段代码

from airflow import DAG
from airflow.operators.bash_operator import BashOperator
from datetime import datetime, timedelta


default_args = {
    'owner': 'Airflow',
    'depends_on_past': False,
    'start_date': datetime(2015, 6, 1),
    'email': ['airflow@example.com'],
    'email_on_failure': False,
    'email_on_retry': False,
    'retries': 1,
    'retry_delay': timedelta(minutes=5),
    # 'queue': 'bash_queue',
    # 'pool': 'backfill',
    # 'priority_weight': 10,
    # 'end_date': datetime(2016, 1, 1),
}

dag = DAG(
    'tutorial', default_args=default_args, schedule_interval=timedelta(days=1))

# t1, t2 and t3 are examples of tasks created by instantiating operators
t1 = BashOperator(
    task_id='print_date',
    bash_command='date',
    dag=dag)

t2 = BashOperator(
    task_id='sleep',
    bash_command='sleep 5',
    retries=3,
    dag=dag)

templated_command = """
    {% for i in range(5) %}
        echo "{{ ds }}"
        echo "{{ macros.ds_add(ds, 7)}}"
        echo "{{ params.my_param }}"
    {% endfor %}
"""

t3 = BashOperator(
    task_id='templated',
    bash_command=templated_command,
    params={'my_param': 'Parameter I passed in'},
    dag=dag)

t2.set_upstream(t1)
t3.set_upstream(t1)

然后我可以使用

正确执行它
python ~/airflow/dags/FirstTest.py

但是,当我尝试运行命令时

airflow list_dags

我说一个错误

airflow: command not found

我能够进行pip安装apache-airflow,因此原始脚本可以运行。

但是,根据此SO论坛问题(尽管平台不同) Getting bash: airflow: command not found

一个SUDO pip install pip修复了它,但是在我的情况下,它给我一个错误提示

'/home/sum/.cache/pip' or its parent directory is not owned by the current user and caching wheels has been disabled

然后我使用了-H标志的含义

sudo -H pip3 install apache-airflow

但是似乎没有达到我作为代理的提琴手(127.0.0.1:8888)的权限,因此出现了连接被拒绝的错误

因此,我将其修改为使用显式包含代理

sudo pip3 --proxy=http://127.0.0.1:8888 install apache-airflow

但是后来我遇到了一个问题,那就是所有的问题都归pypi而不是我想要的npm.sys.dom。

我的/ etc / profile文件中有

export http_proxy=http://127.0.0.1:8888
export https_proxy=http://127.0.0.1:8888
export pip_index_url=http://npm.sys.dom:81/pypi/Python/simple
export pip_trusted_host=npm.sys.dom

但是以某种方式,VS代码似乎并没有将其吸收。

我尝试在VS代码中设置“ .profile”文件,该文件是在我选择使用与上面相同的4行打开与我的主目录相对应的文件夹之后出现的。

但是sudo pip安装仍然无法将其安装。

最后我做到了

sudo pip3 --proxy=http://127.0.0.1:8888 trusted-host npm.sys.dom index-url http://npm.sys.dom:81/pypi/Python/simple install apache-airflow

但是现在我跑步

airflow list_dags

我得到了我的麻烦,但是在获得输出之前我也遇到了很多错误

ERROR - Failed on pre-execution callback using <function default_action_log at 0x7fa84c2db510>
Traceback (most recent call last):
  File "/home/sum/.local/lib/python3.6/site-packages/sqlalchemy/engine/base.py", line 1246, in _execute_context
    cursor, statement, parameters, context
  File "/home/sum/.local/lib/python3.6/site-packages/sqlalchemy/engine/default.py", line 581, in do_execute
    cursor.execute(statement, parameters)
sqlite3.OperationalError: no such table: log

......
(Background on this error at: http://sqlalche.me/e/e3q8)

当我查看http://sqlalche.me/e/e3q8时,它显示了与未释放的连接相关的内容,我将进一步调查。

我的问题是:安装气流必须要做的所有变通办法,是否有更清洁的方法?我错过了什么?只是,这样我就不必一次又一次地做同样的事情。

P.S:在Linux中不是很精通。在Windows上使用Ubuntu 18.04。

1 个答案:

答案 0 :(得分:0)

最后通过以下方法解决了这个问题:

  1. 在bashrc文件中添加了http和https代理,这样我每次在VSCode中使用pip3时都不必指定它。提琴手是这里的代理人。
echo 'export HTTP_PROXY="127.0.0.1:8888"' >> ~/.bashrc
echo 'export HTTPS_PROXY="127.0.0.1:8888"' >> ~/.bashrc
  1. 在python中创建虚拟环境并在虚拟环境中安装apache-airflow
apt-get install python3-venv


#Please replace or choose your own path. The one below is a sample
python3 -m venv /home/usrname/airflow
source /home/usrname/airflow/bin/activate

#finally install airflow. Remember to install setuptools before. I also had other packages to install

pip install setuptools_git "pymssql<3.0" pyodbc
pip install apache-airflow