我正在尝试使用Airflow及其操作员S3ToGoogleCloudStorageOperator将大文件从S3传输到GCP。我已经能够传输400 Mb的文件,但是如果尝试更大的文件,我将失败:2Gb我得到以下错误:
[2018-09-19 12:30:43,907] {models.py:1736}错误-[错误28] 保留在设备Traceback上(最近一次通话为最后一次):
文件“ /home/jma/airflow/env/lib/python3.5/site-packages/airflow/models.py”, 第1633行,_run_raw_task结果= task_copy.execute(context = context)
在执行file_object.download_fileobj(f)中的文件“ /home/jma/airflow/env/lib/python3.5/site-packages/airflow/contrib/operators/s3_to_gcs_operator.py”第156行中,
文件“ /home/jma/airflow/env/lib/python3.5/site-packages/boto3/s3/inject.py”, 第760行,在object_download_fileobj ExtraArgs = ExtraArgs中, 回调=回调,配置=配置)
在download_fileobj中的文件“ /home/jma/airflow/env/lib/python3.5/site-packages/boto3/s3/inject.py”,行678返回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 return_value = self._main(** kwargs)中的文件“ /home/jma/airflow/env/lib/python3.5/site-packages/s3transfer/tasks.py”,第150行,
_main fileobj.write(data)中的文件“ /home/jma/airflow/env/lib/python3.5/site-packages/s3transfer/download.py”,第583行,
在func_wrapper中,文件“ /home/jma/airflow/env/lib/python3.5/tempfile.py”第622行,返回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)
答案 0 :(得分:0)
我认为最好的选择是使用Google Cloud Storage的传输服务。您可以轻松地将数据从S3移到GCP [1]。我认为信息量不是问题,但是请记住有关请求数量的限制[2]
[1] https://cloud.google.com/storage-transfer/docs/ [2] https://cloud.google.com/storage-transfer/quotas