sqoop无法从teradata获取数据,出现java.io异常

1cklez4t  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(434)

这是我的sqoop导入,我用它从teradata中提取数据

sqoop import -libjars jars --driver drivers --connect connection_url -m 1 --hive-overwrite --hive-import --hive-database hivedatabase --hive-table hivetable --target-dir '/user/hive/warehouse/database.db/table_name' --as-parquetfile --query "select c1,c2,c3, to_char(SOURCE_ACTIVATION_DT,'YYYY-MM-DD HH24:MI:SS') as SOURCE_ACTIVATION_DT,to_char(SOURCE_DEACTIVATION_DT,'YYYY-MM-DD HH24:MI:SS') as SOURCE_DEACTIVATION_DT,to_char(EFF_DT,'YYYY-MM-DD HH24:MI:SS') as EFF_DT,to_char(EXP_DT,'YYYY-MM-DD HH24:MI:SS') as EXP_DT,to_char(SYS_UPDATE_DTM,'YYYY-MM-DD HH24:MI:SS') as SYS_UPDATE_DTM,to_char(SYS_LOAD_DTM,'YYYY-MM-DD HH24:MI:SS') as SYS_LOAD_DTM from source_schema.table_name WHERE to_char(SYS_UPDATE_DTM,'YYYY-MM-DD HH24:MI:SS')> '2017-03-30 10:00:00' OR to_char(SYS_LOAD_DTM,'YYYY-MM-DD HH24:MI:SS') > '2017-03-30 10:00:00' AND \$CONDITIONS"

下面是我得到的错误,这是运行了两天的罚款,并开始返回以下错误最近。

17/03/29 20:07:53 INFO mapreduce.Job:  map 0% reduce 0%
17/03/29 20:56:46 INFO mapreduce.Job: Task Id : attempt_1487033963691_263120_m_000000_0, Status : FAILED
Error: java.io.IOException: SQLException in nextKeyValue
    at org.apache.sqoop.mapreduce.db.DBRecordReader.nextKeyValue(DBRecordReader.java:277)
    at org.apache.hadoop.mapred.MapTask$NewTrackingRecordReader.nextKeyValue(MapTask.java:556)
    at org.apache.hadoop.mapreduce.task.MapContextImpl.nextKeyValue(MapContextImpl.java:80)
    at org.apache.hadoop.mapreduce.lib.map.WrappedMapper$Context.nextKeyValue(WrappedMapper.java:91)
    at org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:144)
    at org.apache.sqoop.mapreduce.AutoProgressMapper.run(AutoProgressMapper.java:64)
    at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:787)
    at org.apache.hadoop.mapred.MapTask.run(MapTask.java:341)
    at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:164)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAs(Subject.java:422)
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1693)
    at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:158)
Caused by: java.sql.SQLException: [Teradata JDBC Driver] [TeraJDBC 15.10.00.14] [Error 1005] [SQLState HY000] Unexpected parcel kind received: 9
    at com.teradata.jdbc.jdbc_4.util.ErrorFactory.makeDriverJDBCException(ErrorFactory.java:94)
    at com.teradata.jdbc.jdbc_4.util.ErrorFactory.makeDriverJDBCException(ErrorFactory.java:69)
    at com.teradata.jdbc.jdbc_4.statemachine.ReceiveRecordSubState.action(ReceiveRecordSubState.java:195)
    at com.teradata.jdbc.jdbc_4.statemachine.StatementReceiveState.subStateMachine(StatementReceiveState.java:311)
    at com.teradata.jdbc.jdbc_4.statemachine.StatementReceiveState.action(StatementReceiveState.java:200)
    at com.teradata.jdbc.jdbc_4.statemachine.StatementController.runBody(StatementController.java:137)
    at com.teradata.jdbc.jdbc_4.statemachine.PreparedStatementController.run(PreparedStatementController.java:46)
    at com.teradata.jdbc.jdbc_4.statemachine.StatementController.fetchRows(StatementController.java:360)
    at com.teradata.jdbc.jdbc_4.TDResultSet.goToRow(TDResultSet.java:374)
    at com.teradata.jdbc.jdbc_4.TDResultSet.next(TDResultSet.java:657)
    at org.apache.sqoop.mapreduce.db.DBRecordReader.nextKeyValue(DBRecordReader.java:237)
    ... 12 more

当我在google上搜索时,我看到人们在不同的错误中得到相同的错误,我知道这与我在where子句中使用的时间有关,但不确定我到底要修改什么。
提前谢谢。。。!!

rseugnpd

rseugnpd1#

sqoop使用 $CONDITIONS 获取元数据和数据。
元数据-它取代 $CONDITIONS 当1=0时。因此,使用此条件不会获取任何数据,而只获取元数据。
1个Map器的数据:替换 $CONDITIONS 1=1。所以,所有的数据都被提取出来了。
多Map器情况下的数据:替换 $CONDITIONS 有一定的射程条件。
在jdbc客户端中尝试以下查询:
选择c1、c2、c3,至字符(源激活日期,'yyyy-mm-dd hh24:mi:ss')作为源激活日期,至字符(源停用日期,'yyyy-mm-dd hh24:mi:ss')作为源停用日期,至字符(生效日期,'yyyy-mm-dd hh24:mi:ss')作为生效日期,至字符(生效日期,'yyyy-mm-dd hh24:mi:ss')作为到期日期,至字符(系统更新日期,'YYYYYY-mm-dd hh24:mi:ss')作为系统更新日期,to_char(sys_load_dtm,'yyyy-mm-dd hh24:mi:ss')as sys_load_dtm from source_schema.table_name where to_char(sys_update_dtm,'yyyyyy-mm-dd hh24:mi:ss')>'2017-03-30 10:00:00'或to_char(sys_load_dtm,'yyyyyy-mm-dd hh24:mi:ss')>'2017-03-30 10:00:00'和1=0”
选择c1、c2、c3,至字符(源激活日期,'yyyy-mm-dd hh24:mi:ss')作为源激活日期,至字符(源停用日期,'yyyy-mm-dd hh24:mi:ss')作为源停用日期,至字符(生效日期,'yyyy-mm-dd hh24:mi:ss')作为生效日期,至字符(生效日期,'yyyy-mm-dd hh24:mi:ss')作为到期日期,至字符(系统更新日期,'YYYYYY-mm-dd hh24:mi:ss')作为系统更新日期,to \u char(sys \u load \u dtm,'yyyy-mm-dd hh24:mi:ss')as sys \u load \u dtm from source \u schema.table \u name to \u char(sys \u update \u dtm,'yyyyy-mm-dd hh24:mi:ss')>'2017-03-30 10:00:00'或to \u char(sys \u load \u dtm,'yyyyy-mm-dd hh24:mi:ss')>'2017-03-30 10:00:00'和1“
如果这些都不起作用,那么带有此查询的sqoop命令将永远无法运行。

相关问题