2016-03-25 7 views
0

Ich habe Schwierigkeiten zu debuggen/zu verstehen, warum mein sqoop-Befehl aus der Netezza-Datenbank ausfällt.sqoop schlägt fehl von netezza - "java.lang.ArrayIndexOutOfBoundsException"

Ich habe im Grunde genommen den gleichen sqoop Befehl für viele andere Tabellen ohne Problem verwendet. Diese Quelltabelle insbesondere nicht über gewöhnliche Datentypen alle, damit Sie alle nvarchar, nchar, integer, Zeitstempel usw.

Hier ist der angegebene Sqoop Befehl:

sqoop import \ 
--connect jdbc:netezza://netezza-host-name:5480/nzdatabase \ 
--username user \ 
--password secret \ 
--table source_table_name \ 
--as-sequencefile \ 
--hive-drop-import-delims \ 
--num-mappers 1 

ich viele Dinge ausprobiert habe wie ohne hive-drop-import-delimiters zu gerade Textdatei, als Avro-Datei, Importieren usw.

16/03/25 18:27:48 INFO mapreduce.Job: Job job_1458490578260_0050 running in uber mode : false 
16/03/25 18:27:48 INFO mapreduce.Job: map 0% reduce 0% 
16/03/25 18:28:52 INFO mapreduce.Job: Task Id : attempt_1458490578260_0050_m_000000_0, Status : 
FAILED 
Error: java.lang.ArrayIndexOutOfBoundsException 
     at org.netezza.sql.NzConnection.receiveDbosTuple(NzConnection.java:739) 
     at org.netezza.internal.QueryExecutor.update(QueryExecutor.java:340) 
     at org.netezza.sql.NzConnection.updateResultSet(NzConnection.java:2704) 
     at org.netezza.sql.NzResultSet.next(NzResultSet.java:1924) 
     at org.apache.sqoop.mapreduce.db.DBRecordReader.nextKeyValue(DBRecordReader.java:237) 
     at org.apache.hadoop.mapred.MapTask$NewTrackingRecordReader.nextKeyValue(MapTask.java:5 

ich bin auf Sqoop version: 1.4.6.2.3.2.0-2950.

Antwort

1

Also, wir haben gelernt, dass dieses Problem nicht mit sqoop überhaupt verwandt ist. Wie sich herausstellte, war es ein Bug mit einer älteren Version von nzjdbc.jar. Aktualisieren Sie dies auf die neueste Version, und jetzt funktioniert shoop ohne Problem.

0

Wir verwenden ora_hash Funktion, um dieses Problem mit 5 Mapper auf Oracle DB zu lösen.

--boundary-query 'select 1, 5 from dual' 
--query "select col1,col2,col3.... from (select *, ora_hash(rowid, 4) + 1 orah from db.table) where 1=1 AND \$CONDITIONS"