0

我正在尝试使用 Airflow 及其运算符 S3ToGoogleCloudStorageOperator 将大文件从 S3 传输到 GCP。我已经能够传输 400 Mb 的文件,但如果我尝试更大,我会失败:2Gb 我收到以下错误:

[2018-09-19 12:30:43,907] {models.py:1736} 错误 - [Errno 28] 设备回溯上没有剩余空间(最近一次调用最后一次):
文件“/home/jma/airflow/env/lib /python3.5/site-packages/airflow/models.py”,第 1633 行,在 _run_raw_task 结果 = task_copy.execute(context=context)
文件“/home/jma/airflow/env/lib/python3.5/site- packages/airflow/contrib/operators/s3_to_gcs_operator.py”,第 156 行,在执行 file_object.download_fileobj(f)
文件“/home/jma/airflow/env/lib/python3.5/site-packages/boto3/s3/inject .py”,第 760 行,在 object_download_fileobj ExtraArgs=ExtraArgs,Callback=Callback,Config=Config)
文件“/home/jma/airflow/env/lib/python3.5/site-packages/boto3/s3/inject.py” ,第 678 行,在 download_fileobj 中返回 future.result()
文件“/home/jma/airflow/env/lib/python3.5/site-packages/s3transfer/futures.py”,第 73 行,结果返回 self._coordinator.result()
文件“/home/jma/airflow/ env/lib/python3.5/site-packages/s3transfer/futures.py”,第 233 行,结果引发 self._exception
文件“/home/jma/airflow/env/lib/python3.5/site-packages/s3transfer /tasks.py",第 126 行,在调用中返回 self._execute_main(kwargs)
文件 "/home/jma/airflow/env/lib/python3.5/site-packages/s3transfer/tasks.py",第 150 行,在_execute_main return_value = self._main(**kwargs)
文件“/home/jma/airflow/env/lib/python3.5/site-packages/s3transfer/download.py”,第 583 行,在 _main fileobj.write(data)
func_wrapper 中的文件“/home/jma/airflow/env/lib/python3.5/tempfile.py”,第 622 行 return func(*args, **kwargs) OSError: [Errno 28] No space left on device

DAG 的完整代码可以在另一个 SO question中找到。

该文件不会直接从 S3 传输到 GCP,而是下载到运行 Airflow 的机器上。查看痕迹,似乎 boto 可能是负责任的,但仍然无法弄清楚如何解决该问题,即为要临时复制的文件分配一个文件夹。

我想移动非常大的文件,如何设置以便没有限制?

我在 GCP 中从 Google Cloud Shell 运行 Airflow 1.10,我在主目录中有 4 Gb 的可用空间(要移动的文件是 2 Gb)

4

1 回答 1

0

我认为最好的选择是使用谷歌云存储的传输服务。您可以轻松地将数据从 S3 移动到 GCP [1]。我认为信息量不是问题,但是请记住请求数量的限制 [2]

[1] https://cloud.google.com/storage-transfer/docs/ [2] https://cloud.google.com/storage-transfer/quotas

于 2018-09-19T14:33:31.960 回答