airflow S3ToGoogleCloudStorageOperator На устройстве нет свободного места
Я пытаюсь перенести большие файлы из S3 в GCP с помощью Airflow и его оператора S3ToGoogleCloudStorageOperator. Я был в состоянии передать файлы 400 Мб, но мне не удается, если я пытаюсь увеличить: 2 Гб, я получаю следующую ошибку:
[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 result = task_copy.execute(context=context)
Файл "/home/jma/airflow/env/lib/python3.5/site-packages/airflow/contrib/operators/s3_to_gcs_operator.py", строка 156, в файле execute 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, в вызове return 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)
Файл "/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 может быть ответственным, но все еще не может понять, как решить проблему, то есть назначить папку для файла, который будет временно скопирован.
Я хотел бы переместить файлы очень большого размера, чтобы настроить их так, чтобы не было ограничений?
Я запускаю Airflow 1.10 из Google Cloud Shell в GCP, где у меня есть 4 ГБ свободного места в домашнем каталоге (перемещаемый файл - 2 ГБ)
1 ответ
Я думаю, что лучшим вариантом является использование службы передачи Google Cloud Storage. Вы можете легко перемещать данные из S3 в GCP [1]. Я думаю, что объем информации не является проблемой, однако имейте в виду ограничения количества запросов [2]
[1] https://cloud.google.com/storage-transfer/docs/[2] https://cloud.google.com/storage-transfer/quotas