【发布时间】:2019-02-23 06:59:02
【问题描述】:
我正在尝试使用 Airflow 及其 Operator S3ToGoogleCloudStorageOperator 将大文件从 S3 传输到 GCP。我已经能够传输 400 Mb 的文件,但如果我尝试更大,我会失败:2Gb 我收到以下错误:
[2018-09-19 12:30:43,907] {models.py:1736} 错误 - [Errno 28] 没有空格 留在设备 Traceback 上(最近一次通话最后一次):
文件“/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, 回调=回调,配置=配置)
文件“/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)
_execute_main 中的文件“/home/jma/airflow/env/lib/python3.5/site-packages/s3transfer/tasks.py”,第 150 行 return_value = self._main(**kwargs)
_main fileobj.write(data)
中的文件“/home/jma/airflow/env/lib/python3.5/site-packages/s3transfer/download.py”,第 583 行 文件“/home/jma/airflow/env/lib/python3.5/tempfile.py”,第 622 行,在 func_wrapper 返回 func(*args, **kwargs) OSError: [Errno 28] 设备上没有剩余空间
DAG 的完整代码可以在other SO question 中找到。
文件不会直接从 S3 传输到 GCP,而是下载到运行 Airflow 的机器上。查看痕迹,似乎 boto 可能是负责任的,但仍然无法弄清楚如何解决此问题,即为要临时复制的文件分配一个文件夹。
我想移动非常大的文件,如何设置才能不受限制?
我在 GCP 中从 Google Cloud Shell 运行 Airflow 1.10,我的主目录中有 4 Gb 的可用空间(要移动的文件是 2 Gb)
【问题讨论】:
-
实例有多少物理内存?
-
@cwurtz,Google Cloud Shell 在具有 1.7Gb 的 g1-small 实例上运行,如 kaxil 提供的链接中所建议的,拥有 2Gb 文件可能是一个问题
标签: google-cloud-platform boto3 airflow google-cloud-shell