Hadoop运行python作业时的依赖于其他库的问题
2011-07-18 17:31
351 查看
用hadoop streaming可以运行python写的map-reduce作业。但是如果map/reduce依赖于其他库呢?比如,map中依赖于我们自己写的一个库:hadoop_lib.py中的某些方法。这时在运行streaming作业的时候,如果还是像原来一样的命令行,就会出现”Broken Pipe”之类的异常。解决方法就是加上-file参数,并加上依赖的库文件。如果有多个依赖的文件,可以用多次-file参数,或者用-files。这样实际上hadoop是把文件放入它的分布式缓存中,然后在执行task的目录创建一个到实际文件的链接。
而在map.py/reduce.py中,我们直接导入即可:
importhadoop_lib
这个依赖库默认是和map/reduce程序在同一路径下。这对于开发可不太好,总不能把lib里的东西都放到特定作业的目录里来吧。我们可以这么做:
先创建lib的目录,比如/hadoop/lib,并把hadoop_lib.py库文件放到这个目录中。
然后在map.py/reduce.py中加上:
importsys;
sys.path.append(‘/hadoop/lib’);
importhadoop_lib
这时,如果程序是在本地测试,因为/hadoop/lib已经加入到path中,程序能够正确地找到库文件。而如果是在运行task的远程节点上,由于库文件和map/reduce是在同一目录,它仍能正确地找到,只不过sys.path.append这一行没有用罢了。
而在map.py/reduce.py中,我们直接导入即可:
importhadoop_lib
这个依赖库默认是和map/reduce程序在同一路径下。这对于开发可不太好,总不能把lib里的东西都放到特定作业的目录里来吧。我们可以这么做:
先创建lib的目录,比如/hadoop/lib,并把hadoop_lib.py库文件放到这个目录中。
然后在map.py/reduce.py中加上:
importsys;
sys.path.append(‘/hadoop/lib’);
importhadoop_lib
这时,如果程序是在本地测试,因为/hadoop/lib已经加入到path中,程序能够正确地找到库文件。而如果是在运行task的远程节点上,由于库文件和map/reduce是在同一目录,它仍能正确地找到,只不过sys.path.append这一行没有用罢了。
相关文章推荐
- 【问题】spark运行python写的mapreduce任务,hadoop平台报错,java.net.ConnectException: 连接超时
- hadoop运行时遇到的问题及解决方案
- python文件运行问题
- 后台运行python程序 遇到缓冲区问题
- Hadoop集群链接_Eclipse开发环境:成功运行mapreduce所遇问题
- python中运行其他python
- 解决python脚本 在cmd命令行窗口运行时,中文乱码问题
- Python守护线程被多次运行的问题【摘记】
- 在Hadoop上运行python程序错误集合
- 学习Python以及其他知识时自己出现的问题
- Hadoop问题之mapreduce运行时异常
- 【pom.xml 依赖】使用net.sf.json-lib-2.4-jdk15.jar所需要的其他依赖架包 以及其一直在pom.xml报错的问题
- python——scrapy安装成功,check项目成功,运行出现一下问题
- 解决vs2013下创建的python文件,到其他平台(如linux)下中文乱码(或运行时报SyntaxError: (unicode error) 'utf-8' codec can't decode byte...)
- centOS6.5-64位系统下编译hadoop2.2.0源码解决依赖本地库问题
- 【pom.xml 依赖】使用net.sf.json-lib-2.4-jdk15.jar所需要的其他依赖架包 以及其一直在pom.xml报错的问题
- DevExpress开发的项目其他机器无法正常运行问题
- python-scrapy 中运行出现DLL load faild :%1 不是32位应用程序的问题
- 笨办法学python中的作业问题,nosetests下遇到ImportError
- Eclipse中采用本地作业运行器(Job Runner)运行Hadoop测试(Hadoop2.7.3) - 1