crontab执行python脚本提示ImportError解决方法

早上看到hadoop的计算结果没有进入到mysql数据库,查看关于hadoop计划任务的输出日志发现有报错信息。果断拿来手动执行相关的python脚本,并没有错误,然后丢到计划任务里面就报错,折腾了我一上午终于搞好了。

报错信息

报错执行/data/datax/bin/tool_hive2mysql_build_json.py脚本的时候ImportError

[root@uhadoop-mrdv2j-task1 data]# tailf /var/log/bigdata/run-hive-qz_yy_uv_source_2mysql.sh.log
	at com.alibaba.datax.core.util.ConfigParser.parse(ConfigParser.java:26)
	at com.alibaba.datax.core.Engine.entry(Engine.java:137)
	at com.alibaba.datax.core.Engine.main(Engine.java:204)
Caused by: java.io.FileNotFoundException: File '/data/datax/job/hive-qz_yy_uv_source-2mysql.json' does not exist
	at org.apache.commons.io.FileUtils.openInputStream(FileUtils.java:299)
	at org.apache.commons.io.FileUtils.readFileToString(FileUtils.java:1711)
	at org.apache.commons.io.FileUtils.readFileToString(FileUtils.java:1748)
	at com.alibaba.datax.core.util.ConfigParser.getJobContent(ConfigParser.java:106)
	... 4 more
 
Traceback (most recent call last):
  File "/data/datax/bin/tool_hive2mysql_build_json.py", line 6, in <module>
    import argparse
ImportError: No module named argparse
 
DataX (DATAX-OPENSOURCE-3.0), From Alibaba !
Copyright (C) 2010-2016, Alibaba Group. All Rights Reserved.
 
 
2017-11-24 10:28:02.649 [main] ERROR Engine - 

解决

经过google、baidu得知,crontab执行出错(或者不执行计划任务)90%的错误都是环境变量引起的。此次问题的原因是crontab本身的环境变量中找不到python的argparse模块,所以就抛出ImportError。我的解决方法是在python脚本中添加相关模块的路径到$PYTHONPATH中。 1.查询模块的位置

>>> import argparse
>>> argparse.__file__  //查询argparse模块的位置
'/usr/local/lib/python2.7/argparse.pyc'

2.在脚本中将模块的路径append到PYTHONPATH中

#!/usr/local/bin/python2.7
#coding:utf-8
import json
import sys
sys.path.append("/usr/local/lib/python2.7") //append一定要在报错模块之前
import argparse
.....
   coding
.....

参考资料:http://blog.csdn.net/rj03hou/article/details/5709276

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java3y

Druid数据库连接池就是这么简单

前言 本章节主要讲解Druid数据库连接池,为什么要学Druid数据库连接池呢?? 我的知识储备数据库连接池有两种->C3P0,DBCP,可是现在看起来并不够用...

50811
来自专栏杨建荣的学习笔记

Java微服务应用测试,走起

从近几年的技术发展来看,行业里提到微服务应用场景越来越多,是时候能够提升目前的业务扩展能力了。相比于传统的EJB,SOA的方案,微服务是一种相对于更加轻量的方案...

841
来自专栏代码拾遗

Spring Boot 2.0 教程 - 日志详解

Spring Boot 内部使用commons logging 作为日志输出工具,同时也可以配置其他的工具例如,Java Logging,Log4j2,log...

1744
来自专栏CodingBlock

Android查缺补漏(IPC篇)-- 进程间通讯基础知识热身

本文作者:CodingBlock 文章链接:http://www.cnblogs.com/codingblock/p/8479282.html

1243
来自专栏CodingBlock

Android查缺补漏(IPC篇)-- 进程间通讯基础知识热身

本文作者:CodingBlock 文章链接:http://www.cnblogs.com/codingblock/p/8479282.html

1082
来自专栏码匠的流水账

java9系列(二)docker运行java9

850
来自专栏A周立SpringCloud

Spring Cloud各组件重试总结

最近挺多童鞋问我如何配置Spring Cloud xxx组件的重试。本篇进行一个总结。 Spring Cloud中的重试机制应该说是比较混乱的,不同的版本有一定...

4626
来自专栏JadePeng的技术博客

jenkins X实践系列(2) —— 基于jx的DevOps实践

jx是云原生CICD,devops的一个最佳实践之一,目前在快速的发展成熟中。最近调研了JX,这里为第2篇,使用已经安装好的jx来实践CICD,旨在让大家了解基...

6342
来自专栏云原生架构实践

Jhipster技术栈定制 - 基于UAA的微服务之间安全调用

3个微服务都是通过Jhipster生成。 工程代码生成完之后,根据上一节启动的组件的实际情况,修改微服务配置文件中Eureka和database相关的配置。

9943
来自专栏battcn

一起来学SpringBoot | 第二十五篇:打造属于你的聊天室(WebSocket)

WebSocket 是 HTML5 新增的一种在单个 TCP 连接上进行全双工通讯的协议,与 HTTP 协议没有太大关系....

2132

扫码关注云+社区

领取腾讯云代金券