Мы используем SFTP для доставки файлов из предварительной загрузки в EC2 и затем, наконец, загрузим их в хранилище данных S3.
Файлы представляют собой простые текстовые файлы и после загрузки в хранилище данных, мыВы используете Python3 pandas для создания одного и того же структурированного фрейма данных (некоторая бизнес-логика для обработки данных).
Код был разработан и протестирован локально с тестовыми файлами, локально присутствующими на моем компьютере с ОС Windows, и обычно занимает парусекунд, чтобы закончить преобразование. Но когда тот же код был перенесен в EC2 и SFTP-файлы, читаемые из S3, он начал обрабатываться вечно.
После запуска кода в режиме отладки (py-console) на EC2 мы быливозможность отследить команду, которая вызывала медлительность, поэтому мы попробовали различные сценарии, как указано ниже.
ДЛЯ ЛОКАЛЬНОГО ИЛИ ЛОКАЛЬНОГО EC2
file = open('/path/to/file/abc.out', 'r')
for line in file:
##############
BUSINESS LOGIC
##############
FOR S3
s3 = boto3.resource('s3')
obj = s3.Object(bucket_name, key)
body = obj.get()['Body']
for line in body.read().decode('utf-8').split('\n'):
##############
BUSINESS LOGIC
##############
Для каждого сценария файл успешно считывался в строку (после всей обработки бизнес-логики) (в течение секунды). Но когда мы пытаемся создать кадр данных строки, он имеет следующие поведения:
formatted_data = BUSINESS LOGIC
final_data = StringIO(formatted_data)
# reading data into a dataframe
df = pd.read_csv(final_data, sep='|')
АНАЛИЗ СЦЕНАРИЙ
| FILE LOCATION | PROCESSING | TIME TO EXECUTE |
------------------------------------------------------------------------------------
| WINDOWS LOCAL | LOCAL | SECONDS |
| COPY LOCAL TO S3 | EC2 | SECONDS |
| DOS2UNIX ON LOCAL & COPY TO S3 | EC2 | HOURS |
| UNIX2DOS ON LOCAL & COPY TO S3 | EC2 | SECONDS |
| SFTP TO EC2 | EC2 | SECONDS |
| SFTP TO EC2 & COPY TO S3 | EC2 | HOURS |
| SFTP TO EC2 & COPY TO S3 & RE-COPY FROM S3 TO EC2 | EC2 | SECONDS |
Из анализа мы подумалипроблема заключается в кодировке файлов Unix на S3. Но тот же файл, когда загружается в EC2, работает просто отлично. Кроме того, мы декодируем при чтении из S3 в для оператора . Любое понимание того, что может быть причиной? Заранее спасибо!