Google cloud storage 如何使用Airflow FTPHook从GCS向ftp服务器上传/下载文件

Google cloud storage 如何使用Airflow FTPHook从GCS向ftp服务器上传/下载文件,google-cloud-storage,airflow,Google Cloud Storage,Airflow,我目前正在尝试在Airflow中使用FTPHook,以便向远程ftp上传和下载文件。但我不确定是否可以使用gs://路径作为源/目标路径的一部分。 我目前不想在AF pod中使用本地文件夹,因为文件大小可能会变大,所以我宁愿直接使用gcs路径或gcs文件流 conn = FTPHook(ftp_conn_id='ftp_default') conn.store_file('in', 'gs://bucket_name/file_name.txt') 链接到FTPHook代码: 谢谢你的帮助

我目前正在尝试在Airflow中使用FTPHook,以便向远程ftp上传和下载文件。但我不确定是否可以使用gs://路径作为源/目标路径的一部分。 我目前不想在AF pod中使用本地文件夹,因为文件大小可能会变大,所以我宁愿直接使用gcs路径或gcs文件流

conn = FTPHook(ftp_conn_id='ftp_default')
conn.store_file('in', 'gs://bucket_name/file_name.txt')
链接到FTPHook代码:


谢谢你的帮助

GCS不支持FTP,所以这不起作用。 看起来FTP钩子只知道如何处理本地文件路径或缓冲区,而不知道如何处理GCS API


您可能能够找到(或编写)一些从FTP读取并写入GCS的代码。

我找到了一个简单的流式解决方案,可以使用PySTFP从GCS上传/下载到FTP服务器,反之亦然,我想与您分享。 首先,我找到了一个很好的解决方案,但这个解决方案唯一的问题是它不支持将文件从gcs上传到FTP。所以我在找别的东西。 因此,我正在研究不同的方法,所以我找到了这个google,它基本上允许你从blob文件中进行流式传输,这正是我要寻找的

        params = BaseHook.get_connection(self.ftp_conn_id)
        cnopts = pysftp.CnOpts()
        cnopts.hostkeys = None
        ftp = pysftp.Connection(host=params.host, username=params.login, password=params.password,
                                 port=params.port,
                                 cnopts=cnopts)

        #This will download file from FTP server to GCS location
        with ftp.open(self.ftp_folder + '/' + file_to_load, 'r+') as remote_file:
            blob = bucket.blob(self.gcs_prefix + file_to_load)
            blob.upload_from_file(remote_file)

        #This will upload file from GCS to FTP server
        with sftp.open(self.ftp_folder + '/' +file_name,'w+') as remote_file:
            blob = bucket.blob(fileObject['name'])
            blob.download_to_file(remote_file)

谢谢你,迈克。我将开始深入研究该文件。顺便问一下,您能在不使用存储该文件的临时内存的情况下做到这一点吗?由于我的AF是在docker上运行的,我不确定它将如何处理在本地存储文件的问题,如果文件太大,您必须找到/编写代码逐块传输,以避免将整个对象加载到内存中。非常感谢您的帮助。但我还有一个问题,因为你在地面军事系统工作。为什么在c#谷歌云存储库中,获取gcs文件流非常容易,而Python库中却不包括它?(我将不得不使用boto或实现类似以下内容:)