利用conda在Hadoop-stream中使用定制python解释器

在大规模Hadoop集群上,通过hadoop-stream执行Python任务时,遇到'subprocess failed with code 1'错误通常是由于缺失第三方库或Python解释器问题。传统的解决方案是确保所有Datanode具有相同Python环境,但这在节点数量增加时变得复杂。文章介绍了使用conda创建可移植的Python环境,以替代virtualenv打包解释器,提高环境的移植性和稳定性。详细步骤包括如何使用conda创建指定版本的Python环境,并解决了virtualenv在某些场景下软链接失效的问题。
摘要由CSDN通过智能技术生成

在利用hadoop-stream工具发布python任务时很容易出现'subprocess failed with code 1'错误,一般这种错误都是因为Datanode在执行python脚本时发生异常导致。比较常见的是python脚本执行中发生了一些错误,这种可以通过增加try语句解决,另外最常见的就是缺失第三方库了。


缺失第三方库最简单的解决方法当然是在所有的Datanode中部署同样的python解释器——这种方法在小集群下可行,但集群节点数量上来后每当增加新库或更新python版本时就变成了繁琐又耗时的工作。而且如果有一个节点的python解释器出了问题排查起来也是相当恼人。


在之前的工作中,尝试了网上提到的virtualenv打包python解释器然后通过hadoop-stream的-archives选项把打包好的python解释器分发到每个执行节点中,然后指定使用这个解释器执行python脚本,节点就会自动解压这些包并执行相应脚本。

而在实际使用中发现打包的python解释器在测试环境没问题,到了实际的集群上就报错,排除了数据和脚本原因后怀疑还是python解释器运行有问题。把打包的python解释器传到服务器解包运行发现原来是lib文件夹下缺少了一些基础python库,这些库在virtualenv创建的环境中都是以软链接的形式保存的,所以当打包的python解释器在其他服务器上运行(如服务器上的python版本不同或没有python解释器或路径不同)这些软链接就会失效导致python解释器运行出错。解决办法有2种:


一、利用conda来创建一个python解释器的环境,也是本文推荐的方法

这种方法的好处在于可以指定安装任意python版本和第三方库,不像virtualenv一样是在原环境中复制python解释器然后再通过pip来安装第三

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值