oozie sqoop 动作具有 --map-column-java

Posted

技术标签:

【中文标题】oozie sqoop 动作具有 --map-column-java【英文标题】:oozie sqoop action having --map-column-java 【发布时间】:2015-08-18 07:26:53 【问题描述】:

我在 oozie 工作流程中遇到 sqoop 操作错误。当我从 unix propmt 运行相同的 sqoop 命令来测试它的工作原理时,但在 oozie 中它失败了

日志..

Sqoop 命令参数: 进口 - 连接 "jdbc:sqlserver://xxxx:1433;databaseName=INS;username=xxx;password=xxx" - 询问 "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 --目标目录 hdfs://csaa-aap-qa/user/xgkg5red/tu4h3/2015-08-17 --fields-terminated-by \001 --压缩编解码器 活泼的 --拆分 TIMESTAMP_UPDATED --map-column-java TIMESTAMP_UPDATED=字符串; 发射时间 = 1439879702947

作业启动时间 = 1439879702947 mapreduce.job.tags = oozie-1759ebad3e0fed00730556361c9eb485

现在调用 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 - 使用 1000 的默认 fetchSize 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] 错误 org.apache.sqoop.orm.ClassWriter - Java 类型字符串没有 ResultSet 方法; 2340 [main] 错误 org.apache.sqoop.tool.ImportTool - 导入失败:Java 类型字符串没有 ResultSet 方法; 拦截 System.exit(1)

失败的 Oozie 启动器,主类 [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 结束

【问题讨论】:

【参考方案1】:

这个问题与 Sqoop 或 Java 无关。

您的 Sqoop 参数包含一个 动态参数,它表示为 bash 脚本 sn-p,使用 date。因此,当您在 Linux 控制台中运行它时,它就可以工作。

但是 Oozie 不是一个 Linux 控制台,它是一个 Java 应用程序。 “日期”的东西作为字符串处理。这就是它在错误消息中按原样显示的原因 - 您应该注意到这一点。

如果您对 Oozie 中的动态日期参数感兴趣,请查看this post。

【讨论】:

如果没有“--map-column-java TIMESTAMP_UPDATED=String;”,我的 sqoop 操作可以正常工作..Timestamp_updated 是表中的日期时间数据类型列,这里没有什么是动态的...... 感谢 Samson...我将该日期动态参数移到了 oozie 中的 shell 操作中...现在我可以成功运行它

以上是关于oozie sqoop 动作具有 --map-column-java的主要内容,如果未能解决你的问题,请参考以下文章

oozie sqoop 操作导入失败

oozie怎么找到sqoop在哪个节点上

HUE中Oozie执行Sqoop

使用带有 Oozie 的 sqoop 观察重复项

Oozie Sqoop 工作

Oozie Sqoop 作业 - 无法恢复作业