2016-03-25 95 views
0

我努力調試/理解爲什麼我的sqoop命令從Netezza數據庫失敗。sqoop從netezza失敗 - 「java.lang.ArrayIndexOutOfBoundsException」

我對許多其他表使用基本相同的sqoop命令沒有問題。尤其是這個源表沒有任何出普通的數據類型,所有的數據類型爲nvarchar,NCHAR,整數,時間戳等

這裏是指定sqoop命令:

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 

我試過很多東西如進口直文本文件,如Avro的文件,而hive-drop-import-delimiters

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 

我在Sqoop version: 1.4.6.2.3.2.0-2950

回答

1

因此,我們瞭解到這個問題根本與sqoop無關。事實證明,這是一個老版本的nzjdbc.jar的錯誤。將其升級到最新版本,現在sqoop正在毫無問題地工作。

0

我們使用ora_hash函數來解決這個問題,在oracle db上有5個映射器。

--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"