我正在尝试使用teradata连接器(tdch)从hadoop集群推送到teradata。整个过程包括将前一天的数据(基于分区)从配置单元表复制到配置单元外部表,以csv形式存储在hdfs中,然后将其推送到teradata。分区不发送给teradata,只用于确定推送什么。所有这些都是由shell脚本触发的。
它成功写入csv,但在使用java.lang.arrayindexoutofboundsexception的teradata推送上失败:44。两个表都有44列,因此不应该有44的索引。在控制台中,processor.teradabatchinsertprocessor打印出“create output stage table”的sql,其中包含一个附加列“tdch\u bi\u taskid”varchar(40)not case specific null)no primary index。
我可能认为我的列在表之间匹配有问题,但奇怪的是,当只推少量行时(例如3行而不是一整天的150万行),推送工作正常,并且在stage表中也创建了额外的列“tdch\u bi\u taskid”,所以这似乎不是越界异常的原因。
错误:
Error: java.lang.ArrayIndexOutOfBoundsException: 44
at com.teradata.connector.hdfs.serde.HdfsTextSerDe.deserialize(HdfsTextSerDe.java:298)
at com.teradata.connector.common.ConnectorCombineInputFormat$ConnectorCombineFileRecordReader.getCurrentValue(ConnectorCombineInputFormat.java:402)
at org.apache.hadoop.mapred.MapTask$NewTrackingRecordReader.getCurrentValue(MapTask.java:535)
at org.apache.hadoop.mapreduce.task.MapContextImpl.getCurrentValue(MapContextImpl.java:75)
at org.apache.hadoop.mapreduce.lib.map.WrappedMapper$Context.getCurrentValue(WrappedMapper.java:86)
at com.teradata.connector.common.ConnectorMMapper.run(ConnectorMMapper.java:122)
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:170)
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:1869)
at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:164)
暂无答案!
目前还没有任何答案,快来回答吧!