我正在运行Sqoop作业以将数据从hdfs传输到Teradata,并且我发现数组超出了异常范围,任何人都可以让我知道可能出现的问题。
下面提到的是我使用的命令
HDFS中的文件名 - > file_name.dat
Sqoop command-->
sqoop export \
--connect jdbc:teradata://teradarta_server_name/DATABASE=database_name\
--username username\
--password pwd\
--table My_table_name\
--input-fields-terminated-by '|' \
--lines-terminated-by '\n' \
--export-dir /HDFS-path
Teradata版本:15.10
Terdatada tablename包含46列,因此我的文件也是HDFS。
错误:
java.lang.ArrayIndexOutOfBoundsException:46 at com.teradata.connector.hdfs.serde.HdfsTextSerDe.deserialize(HdfsTextSerDe.java:293) 在 com.teradata.connector.common.ConnectorCombineInputFormat $ ConnectorCombineFileRecordReader.getCurrentValue(ConnectorCombineInputFormat.java:397) 在 org.apache.hadoop.mapred.MapTask $ NewTrackingRecordReader.getCurrentValue(MapTask.java:535) 在 org.apache.hadoop.mapreduce.task.MapContextImpl.getCurrentValue(MapContextImpl.java:75) 在 org.apache.hadoop.mapreduce.lib.map.WrappedMapper $ Context.getCurrentValue(WrappedMapper.java:86) 在 com.teradata.connector.common.ConnectorMMapper.run(ConnectorMMapper.java:117) 在org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:787)at org.apache.hadoop.mapred.MapTask.run(MapTask.java:341)at at org.apache.hadoop.mapred.YarnChild $ 2.run(YarnChild.java:164)at at java.security.AccessController.doPrivileged(Native Method)at javax.security.auth.Subject.doAs(Subject.java:415)at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1693) 在org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:158)
答案 0 :(得分:0)
将您的tera数据连接器jar保存在sqoop类路径中,然后尝试以下。
sqoop export \
--connect jdbc:teradata://teradarta_server_name/DATABASE=database_name\
--connection-manager org.apache.sqoop.teradata.TeradataConnManager \
--table My_table_name\
--username username\
--password pwd\
--fields-terminated-by '|' \
--lines-terminated-by '\n' \
--export-dir /HDFS-path \
--input-null-string "\\\\N" \
--input-null-non-string "\\\\N"