我正在尝试使用 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)