Шаги Python и AWS EMR: использование os.system для запуска таких команд, как chmod, не работает, когда выполняется как шаг EMR - PullRequest
0 голосов
/ 16 октября 2018

Моя команда работает в AWS, и у нас есть скрипты на Python, которые выполняют некоторые основные перемещения файлов из корзины S3 в экземпляр EC2.Я хочу предвосхитить это сценарием, который мы используем, работает, когда он запускается непосредственно из экземпляра ec2, и только и запускается, когда выполняется как шаг EMR.(Попытка автоматизировать) вот некоторые фрагменты кода, который работает вручную, но не в шаге def.

1: создать регистратор

import os, sys, boto3
import logging, datetime
import Configuration as cfg

# setup logger for this module
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)
formatter = logging.Formatter(cfg.logFormatterStr)
logFileName = os.path.splitext(os.path.basename(__file__))[0] + '_' + \
                 datetime.datetime.now().strftime('%Y%m%d_%H%M%S.log')
file_handler = logging.FileHandler(logFileName)
file_handler.setFormatter(formatter)
logger.addHandler(file_handler)

2: мы загружаем объекты.

for pre in prefixes:
for obj in SB.objects.filter(Prefix=pre):
    if '.' in obj.key:
        temp = obj.key.split('/')
        objList.append((obj.key,temp[-1]))
for item in objList:
    SB.download_file(item[0],os.getenv("HOME") + '/' + item[1])
    logger.info('Downloaded - %s' % item[0])
objList[:] = []

3: Затем мы пытаемся использовать os.system для выполнения команды chmod, а также mkdir и mv

os.system('chmod 775 *.py')

# Move HQL files to a subfolder
os.system('mkdir -p hive')
os.system('mv -f *.hql hive')

Шаг 2 работает.файлы загружаются в экземпляр ec2.По какой-то причине файл журнала никогда не пишется и не создается.и мы получаем ошибки для всех команд os.system.

chmod: cannot access ‘*.py’: No such file or directory
mv: cannot stat ‘*.hql’: No such file or directory

(Мы почти уверены, что необычные символы вокруг * .hql и * .py - некоторые проблемы с регистрацией цитат в amazon.

1 Ответ

0 голосов
/ 17 октября 2018

Один из членов моей команды сумел устранить неполадки и найти причину своих ошибок.Его утверждение ниже для других:

Мой сценарий был расположен в / home / hadoop.Когда я запускал этот сценарий как шаг EMR (с аргументом расположения файла в / home / hadoop), сценарий запускался в другом каталоге (/ mnt / var / lib / hadoop / steps / {unique-step-ID)}).Так как запущенный скрипт искал файл в / home / hadoop, он не смог его найти и, похоже, проблема с правами доступа.

...