使用Numpy和Scipy与亚马逊弹性MapReduce

9 投票
2 回答
3340 浏览
提问于 2025-04-17 06:07

我在使用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

撰写回答