2013-07-09 49 views
6

我通過mrjob/boto模塊將代碼發送到亞馬遜的EMR。我有一些外部python依賴項(即numpy,boto等),目前必須下載python包的源代碼,並將它們作爲tar包發送到mrjob.config文件的「python_archives」字段中。EMR上的Python依賴關係管理

這使得依賴管理比我想要的更混亂,並且想知道我是否可以以某種方式使用與我的virtualenv安裝程序相同的requirements.txt文件來引導emr實例和我的依賴項。是否有可能建立在EMR實例的virtualenv的和做的是這樣的:

pip install -r requirements.txt 

,我會在本地?

回答

3

完成此操作的一種方法是使用bootstrap action。您可以使用這些來運行shell腳本。

如果你有安裝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) 

然後,你可以運行這個自舉的動作,而無需上傳requirements.txt

0

所以,如果你」重新使用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 

,並且將加載pgnparserboto模塊,對我來說,在我的mrjob腳本中使用。