我在oozie工作流程中遇到sqoop操作错误。当我从unix propmt运行相同的sqoop命令来测试它是否有效,但是在oozie中它失败了
日志..
Sqoop命令参数:
进口
--connect
“JDBC:SQLSERVER:// XXXX:1433;的databaseName = INS;用户名= XXX;密码= XXX”
--query
“select * from dbo.tu4h3 WHERE CONCAT(substring(convert(CHAR(20),TIMESTAMP_UPDATED,120),1,10),substring(convert(CHAR(20),TIMESTAMP_UPDATED,120),12,19))> ='date "+%Y-%m-%d%T" -d "1 days ago"
'和$ CONDITIONS“
-m
8
--target-DIR
HDFS:// CSAA-AAP-QA /用户/ xgkg5red / tu4h3 / 2015年8月17日
--fields封端逐
\ 001
--compression编解码器
瞬间
--split,由
TIMESTAMP_UPDATED
--map柱-java的
TIMESTAMP_UPDATED =字符串;
发布时间= 1439879702947
立即调用Sqoop命令行>>>
1867 [main] WARN org.apache.sqoop.tool.SqoopTool - $ SQOOP_CONF_DIR尚未在环境中设置。无法检查其他配置。
1900 [main] INFO org.apache.sqoop.Sqoop - 运行Sqoop版本:1.4.4.2.1.5.0-695
1918 [main] WARN org.apache.sqoop.ConnFactory - $ SQOOP_CONF_DIR尚未在环境中设置。无法检查其他配置。
1940 [main] INFO org.apache.sqoop.manager.SqlManager - 使用默认的fetchSize为1000
1940 [main] INFO org.apache.sqoop.tool.CodeGenTool - 开始代码生成
2230 [main] INFO org.apache.sqoop.manager.SqlManager - 执行SQL语句:select * from dbo.tu4h3 WHERE CONCAT(substring(convert(CHAR(20),TIMESTAMP_UPDATED,120),1,10),substring(convert (CHAR(20),TIMESTAMP_UPDATED,120),12,19))> ='date "+%Y-%m-%d%T" -d "1 days ago"
'和(1 = 0)
2323 [main] INFO org.apache.sqoop.manager.SqlManager - 执行SQL语句:select * from dbo.tu4h3 WHERE CONCAT(substring(convert(CHAR(20),TIMESTAMP_UPDATED,120),1,10),substring(convert (CHAR(20),TIMESTAMP_UPDATED,120),12,19))> ='date "+%Y-%m-%d%T" -d "1 days ago"
'和(1 = 0)
2339 [main] ERROR org.apache.sqoop.orm.ClassWriter - 没有Java类型String的ResultSet方法;
2340 [main] ERROR org.apache.sqoop.tool.ImportTool - 导入失败:没有Java类型字符串的ResultSet方法;
拦截System.exit(1)
<<<主类的调用已完成<<<<
Oozie Launcher失败,主类[org.apache.oozie.action.hadoop.SqoopMain],退出代码[1]
Oozie Launcher失败了,优雅地完成了Hadoop工作
Oozie Launcher,将动作数据上传到HDFS序列文件:hdfs:// csaa-aap-qa / user / hdfs / oozie-oozi / 0000910-150729052958048-oozie-oozi-W / create-sqoop - sqoop / action -data.seq
Oozie Launcher结束
答案 0 :(得分:0)
该问题与Sqoop或Java无关。
您的Sqoop参数包含动态参数,使用date
表示为 bash脚本代码。因此,当您在Linux控制台中运行它时,它会起作用。
但是Oozie不是Linux控制台,它是一个Java应用程序。 “日期”的东西作为字符串文字处理。这就是为什么它在错误信息中显示为as-is - 你应该注意到的。
如果您对Oozie中的动态日期参数感兴趣,请查看this post。