airflow S3ToGoogleCloudStorageOperator设备上没有剩余空间

时间:2018-09-19 07:12:53

标签: google-cloud-platform boto3 airflow google-cloud-shell

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

1 个答案:

答案 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