Hadoop Streaming:在EMR上导入模块
之前有个问题讨论了如何在Hadoop流处理工作中导入像nltk这样的模块。
这里面提到的步骤是:
zip -r nltkandyaml.zip nltk yaml
mv ntlkandyaml.zip /path/to/where/your/mapper/will/be/nltkandyaml.mod
现在你可以在你的Python脚本中导入nltk模块了: import zipimport
importer = zipimport.zipimporter('nltkandyaml.mod')
yaml = importer.load_module('yaml')
nltk = importer.load_module('nltk')
我有一个工作想在亚马逊的EMR上运行,但我不太确定该把压缩文件放在哪里。我需要在启动选项下创建一个引导脚本,还是应该把tar.gz文件放在S3上,然后在额外参数中引用它?我对这些都很陌生,如果能有个详细的步骤指导我一下,我会非常感激。
1 个回答
2
你有以下几种选择:
创建一个启动脚本,并把它放到S3上。这个脚本会下载你需要的模块,并把它放在你的mapper/reducer可以访问的地方。要找出具体应该把文件放在哪里,可以启动集群并保持它在完成后不关闭,然后通过ssh连接到集群,查看目录结构。
使用mrjob来启动你的作业流。在用mrjob启动作业时,可以指定bootstrap_python_packages,mrjob会自动安装这些包,它的方式是解压缩.tar.gz文件并运行setup.py install。
http://packages.python.org/mrjob/configs-runners.html
我更倾向于选择第二种,因为mrjob在用Python开发MapReduce作业时非常有帮助。特别是它可以让你在本地(无论是否使用Hadoop)以及在EMR上运行作业,这样可以简化调试过程。