我正在尝试从SFTP复制文件到谷歌云存储。
- 编写器版本= 1.16.12
- 气流版本= 1.10.15。
当执行得到异常No module named 'airflow.providers.sftp'
。非常感谢如果有人能给予指针。
代码片段为:
import os
import airflow
from airflow import DAG
from airflow import models
from airflow.operators import python_operator
from airflow.providers.google.cloud.transfers.sftp_to_gcs import SFTPToGCSOperator
from airflow.utils.dates import days_ago
with models.DAG("test_ssh_to_gcs", start_date=days_ago(1), schedule_interval=None) as dag:
copy_file_from_ssh_to_gcs = SFTPToGCSOperator(
task_id="file-copy-ssh-to-gcs",
source_path="/ ",
destination_bucket='test_sftp_to_gcs',
destination_path="test/test.csv",
gcp_conn_id="google_cloud_default",
sftp_conn_id="sftp_test",
)
copy_file_from_ssh_to_gcs
4条答案
按热度按时间1l5u6lss1#
首先,您是否尝试过将package与
pip install apache-airflow-providers-sftp
一起安装?还要注意你所引用的文档版本。在Airflow 2. 0中,一些包已经是moved了。
lxkprmvk2#
您会得到错误,因为SFTPToGCSOperator在通风柜下使用
airflow.providers.sftp.operators.SFTPOperator
,这存在于气流〉= 2.0.0中。坏消息是需要升级您的气流版本以使用
airflow.providers.google.cloud.transfers.sftp_to_gcs.SFTPToGCSOperator
。如果您不想/无法升级气流,可以创建一个DAG链接两个运算符:
| 操作员|气流1.x导入|
| - ------|- ------|
| SFTP操作员(使用“operation= get”将文件下载到本地)|
from airflow.contrib.operators.sftp_operator import SFTPOperator
|| 上传文件到Google云存储|
from airflow.contrib.operators.file_to_gcs import FileToGoogleCloudStorageOperator
|这应该可以达到目的:
vulvrdjw3#
使用airflow 1.10,您可以安装backported packages
对于您的情况,需要将以下内容添加到您的Composer集群:
1-apache-气流-backport-providers-谷歌
2-Apache气流后端端口提供程序-sftp
3-Apache气流后端端口提供程序-ssh
gojuced74#
通过pip安装依赖项。