sqoop从netezza失败 - " java.lang.ArrayIndexOutOfBoundsException"

时间:2016-03-25 22:47:38

标签: hadoop sqoop netezza

我正在努力调试/理解为什么我的sqoop命令从Netezza数据库失败了。

我已经为许多其他表使用了基本相同的sqoop命令而没有问题。这个源表特别没有任何普通的数据类型,包括nvarchar,nchar,integer,timestamp等。

这是指定的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

2 个答案:

答案 0 :(得分:1)

所以,我们了解到这个问题与sqoop根本没有关系。事实证明,这是nzjdbc.jar旧版本的错误。升级到最新版本,现在sqoop正常运行。

答案 1 :(得分:0)

我们使用ora_hash函数在oracle db上用5个mapper来解决这个问题。

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