Управление зависимостями Python в EMR

Я отправляю код в EMR Amazon через модули mrjob/boto. у меня есть некоторые внешние зависимости python (например, numpy, boto и т. д.), и в настоящее время мне нужно загрузить исходный код пакетов python и отправить их в виде архива в поле «python_archives» файла mrjob.config.

это делает управление зависимостями более запутанным, чем мне хотелось бы, и мне интересно, могу ли я каким-то образом использовать тот же файл requirements.txt, который я использую для моей настройки virtualenv, для начальной загрузки экземпляра emr с моими зависимостями. можно ли настроить virtualenv на экземплярах EMR и сделать что-то вроде:

pip install -r requirements.txt

как я бы локально?


person follyroof    schedule 09.07.2013    source источник


Ответы (2)


Один из способов добиться этого — использовать загрузочное действие. Вы можете использовать их для запуска сценариев оболочки.

Если у вас есть установочный файл Python, который делает что-то вроде:

requirements = open("requirements.txt", "r")
shell_script = open("pip.sh", "w+")
shell_script.write("sudo apt-get install python-pip\n")
for line in requirements:
    shell_script.write("sudo pip install -I " + line)

Затем вы можете просто запустить это как действие начальной загрузки без необходимости загружать свои требования.txt

person Matt    schedule 15.07.2013

Итак, если вы используете mrjob, я добился некоторого успеха, просто поместив вызовы pip прямо в мой файл .mrjob.conf в качестве действия начальной загрузки. Это не так элегантно, как использование файла requirements.txt (он будет загружать одни и те же модули для всех ваших заданий). Например, мой файл conf выглядит так:

runners:
  emr:
    aws_access_key_id: xx
    aws_secret_access_key: xx
    ec2_key_pair: xx
    ec2_key_pair_file: xx
    ssh_tunnel_to_job_tracker: true
    bootstrap_cmds:
      - sudo apt-get install -y python-pip
      - sudo pip install pgnparser
      - sudo pip install boto

и это загрузит модули pgnparser и boto для использования в моих сценариях mrjob.

person Tom Hayden    schedule 27.12.2013