我正在尝试使用Airflow及其运算符S3ToGoogleCloudStorageOperator将大文件从S3传输到GCP。我已经能够传输 400 Mb 的文件,但如果我尝试更大,我会失败:2Gb 我收到以下错误:
[2018-09-19 12:30:43,907] {models.py:1736} 错误 - [错误 28] 无空格 留在设备上 回溯(最近一次调用(:文件 "/home/jma/airflow/
env/lib/python3.5/site-packages/airflow/models.py", 第 1633 行,在 _run_raw_task result = task_copy.execute(context=context(File "/home/jma/airflow/env/lib/python3.5/site-packages/airflow
/contrib/operators/s3_to_gcs_operator.py"中,第 156 行,在 execute file_object.download_fileobj(f(
File "/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((
File "/home/jma/airflow/env/lib/python3.5/site-packages/s3transfer/futures.py",第 233 行,结果 raise 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(
File "/home/jma/airflow/env/lib/python3.5/site-packages/s3transfer/download.py"中,第 583 行,_main fileobj.write(data(
文件 "/home/jma/airflow/env/lib/python3.5/tempfile.py",第 622 行,在 func_wrapper return func(*args, **kwargs( OSError: [Errno 28] 设备上没有剩余空间
DAG 的完整代码可以在另一个 SO 问题中找到。
该文件不会直接从 S3 转到 GCP,而是下载到运行 Airflow 的计算机。查看痕迹,似乎boto可能负责,但仍然无法弄清楚如何解决问题,即为要临时复制的文件分配一个文件夹。
我想移动非常大的文件,那么如何设置以便没有限制?
我在GCP中运行来自Google Cloud Shell的Airflow 1.10,主目录中有4 Gb的可用空间(正在移动的文件为2Gb(
我认为最好的选择是使用Google Cloud Storage的传输服务。您可以轻松地将数据从 S3 移动到 GCP [1]。我认为信息量不是问题,但是,请记住请求数的限制[2]
[1] https://cloud.google.com/storage-transfer/docs/[2] https://cloud.google.com/storage-transfer/quotas