0
votes

I'm running a Sqoop job to get the data from hdfs to Teradata and i'm getting array out of bound of exception can anyone let me know what could have gone wrong.

Below mentioned are the commands i have used

File name in 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 version : 15.10

Terdatada tablename contains 46 columns so does my file in HDFS.

Error:

java.lang.ArrayIndexOutOfBoundsException: 46 at com.teradata.connector.hdfs.serde.HdfsTextSerDe.deserialize(HdfsTextSerDe.java:293) at com.teradata.connector.common.ConnectorCombineInputFormat$ConnectorCombineFileRecordReader.getCurrentValue(ConnectorCombineInputFormat.java:397) 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:117) 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:415) at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1693) at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:158)

1
change input-fields-terminated-by to --lines-terminated-by and try onceArunakiran Nulu
try adding --input-null-string '\\N' --input-null-non-string '\\N' if the above doesn't workArunakiran Nulu
@ArunakiranNulu i tried with the second option you have suggested but still the same error. about the first suggestion do you want me to change the delimiter to something else ?Kishor m n
check my answer and try accordinglyArunakiran Nulu
I hope you hive table fields are terminated by '|'Arunakiran Nulu

1 Answers

0
votes

Keep your tera data connector jar in sqoop classpath and try below.

    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"