4

上一个问题解决了如何为 hadoop 流导入诸如 nltk 之类的模块。

概述的步骤是:

zip -r nltkandyaml.zip nltk yaml
mv ntlkandyaml.zip /path/to/where/your/mapper/will/be/nltkandyaml.mod

您现在可以导入 nltk 模块以在 Python 脚本中使用:import zipimport

importer = zipimport.zipimporter('nltkandyaml.mod')
yaml = importer.load_module('yaml')
nltk = importer.load_module('nltk')

我有一份工作要在Amazon 的 EMR上运行,但我不确定将压缩文件放在哪里。我是否需要在引导选项下创建引导脚本,还是应该将 tar.gz 放在 S3 中,然后放在额外的 args 中?我对这一切都很陌生,如果能提供一个可以引导我完成整个过程的答案,我将不胜感激。

4

1 回答 1

2

您有以下选择:

  1. 创建引导操作脚本并将其放在 S3 上。该脚本将以您喜欢的任何格式下载模块并将其放置在您的映射器/减速器可以访问的地方。要找出您必须放置文件的确切位置,请以完成后不会关闭的方式启动集群,然后在此处进行 ssh 并检查目录结构。

  2. 使用 mrjob 启动您的工作流程。当使用 mrjob 启动作业时,可以通过解压缩 .tar.gz 并运行setup.py install来指定mrjob 将自动安装的bootstrap_python_packages

http://packages.python.org/mrjob/configs-runners.html

我更喜欢选项 2,因为 mrjob 还有助于在 Python 中开发 MapReduce 作业。特别是它允许在本地(使用或不使用 Hadoop)以及在简化调试的 EMR 上运行作业。

于 2011-11-15T16:00:02.100 回答