如何在代码中通过引导操作在Amazon EMR上安装自定义包?
我需要在亚马逊EMR的启动操作中安装一些软件包和二进制文件,但找不到相关的例子。
简单来说,我想安装一个Python包,并指定每个Hadoop节点使用这个包来处理S3桶里的数据,这里有一个来自boto的示例。
name='Image to grayscale using SimpleCV python package',
mapper='s3n://elasticmapreduce/samples/imageGrayScale.py',
reducer='aggregate',
input='s3n://elasticmapreduce/samples/input',
output='s3n://<my output bucket>/output'
我需要让它使用SimpleCV这个Python包,但不太确定在哪里指定这个包。如果这个包没有安装,我该怎么让它安装呢?有没有办法避免等待安装完成?是否可以先安装到某个地方,然后只引用这个Python包呢?
1 个回答
7
有一个类叫做 boto.emr.bootstrap_action.BootstrapAction,它是用来处理启动操作的。
你可以像下面这样定义它。大部分代码来自于 boto 示例页面。
import boto.emr
from boto.emr.bootstrap_action import BootstrapAction
action = BootstrapAction(name="Bootstrap to add SimpleCV",
path="s3n://<my bucket uri>/bootstrap-simplecv.sh")
conn = boto.emr.connect_to_region('us-west-2')
jobid = conn.run_jobflow(name='My jobflow',
log_uri='s3://<my log uri>/jobflow_logs',
steps=[step], # step defined elsewhere
bootstrap_actions=[action])
接下来,你需要定义启动操作。如果你需要使用不同版本的Python,那么在同一台电脑上预先编译好、打包成tar文件,然后放到S3存储桶里,最后在启动时解压,这样会节省时间。
#!/bin/sh
# filename: bootstrap-simplecv.sh (save it in an S3 bucket)
set -e -x
sudo apt-get install python-setuptools
sudo easy_install pip
sudo pip install -U SimpleCV
我觉得你可以通过boto让EMR实例保持运行状态,这样启动操作只会在你会话的第一次执行。只要记得在你登出之前关闭这些实例,以免账单上出现意外费用。