使用Numpy和Scipy与亚马逊弹性MapReduce
我在使用mrjob在亚马逊的Elastic MapReduce上运行Python代码时,成功找到了升级EMR镜像中numpy和scipy的方法。
从控制台运行以下命令可以成功:
tar -cvf py_bundle.tar mymain.py Utils.py numpy-1.6.1.tar.gz scipy-0.9.0.tar.gz
gzip py_bundle.tar
python my_mapper.py -r emr --python-archive py_bundle.tar.gz --bootstrap-python-package numpy-1.6.1.tar.gz --bootstrap-python-package scipy-0.9.0.tar.gz > output.txt
这个方法可以顺利地将最新版本的numpy和scipy安装到镜像中,并且运行得很好。我的问题是关于速度的。这个过程在一个小实例上需要21分钟才能完成。
有没有人知道如何加快升级numpy和scipy的速度呢?
2 个回答
3
目前这个问题的答案是,EMR上已经安装了NumPy。
如果你想把NumPy更新到比现在版本更新的版本,可以运行一个脚本(作为启动操作),这个脚本的内容是 sudo yum -y install numpy
。这样NumPy就会很快被安装上。
5
对EMR镜像进行任何操作的唯一方法就是使用启动操作(bootstrap actions)。如果你通过控制台来做这件事,只会改变主节点,而不会影响那些负责处理的任务节点。启动操作会在所有节点启动时运行一次,可以是一个简单的脚本,通过命令行执行。
elastic-mapreduce --create --bootstrap-action "s3://bucket/path/to/script" ...
为了加快对EMR镜像的更改,可以把安装后的文件打包成一个压缩文件,然后上传到S3。接着,使用启动操作来下载和部署这些文件。你需要为32位(微型、小型、中型)和64位机器分别准备不同的压缩包。
在脚本中,从S3下载的命令是:
hadoop fs -get s3://bucket/path/to/archive /tmp/archive