如何在Hadoop Streaming中管理依赖?
我有个关于Hadoop Streaming的小问题。如果我在用Python进行流处理,并且我的映射器(mappers)和归约器(reducers)需要一些默认没有安装的Python包,我是否需要在所有Hadoop机器上都安装这些包,还是说有某种方式可以把它们发送到远程机器上?
2 个回答
1
如果你使用Dumbo这个工具,你可以通过使用-libegg来分发egg文件,并自动配置Python的运行环境:
https://github.com/klbostee/dumbo/wiki/Short-tutorial#wiki-eggs_and_jars https://github.com/klbostee/dumbo/wiki/Configuration-files
2
如果这些东西没有安装在你的任务盒子里,你可以用 -file 来发送它们。如果你需要一个包或者其他的文件夹结构,你可以发送一个压缩文件(zip文件),系统会帮你解压。下面是一个Hadoop 0.17的调用示例:
$HADOOP_HOME/bin/hadoop jar $HADOOP_HOME/contrib/streaming/hadoop-0.17.0-streaming.jar -mapper mapper.py -reducer reducer.py -input input/foo -output output -file /tmp/foo.py -file /tmp/lib.zip
不过,注意这里有个问题: