将表导入Sqoop

时间:2017-05-17 15:39:49

标签: java oracle apache hadoop sqoop

我已经将一个包含5400万行的表导入 Hadoop Cluster HDFS ,现在,从Oracle DB导入该表的一部分<登记/> [我已经创建了一个查看,选择的时间很短。仅产生260K行]
,我收到以下错误:

  

错误:java.io.IOException:nextKeyValue中的SQLException   org.apache.sqoop.mapreduce.db.DBRecordReader.nextKeyValue(DBRecordReader.java:277)     在   org.apache.hadoop.mapred.MapTask $ NewTrackingRecordReader.nextKeyValue(MapTask.java:556)     在   org.apache.hadoop.mapreduce.task.MapContextImpl.nextKeyValue(MapContextImpl.java:80)     在   org.apache.hadoop.mapreduce.lib.map.WrappedMapper $ Context.nextKeyValue(WrappedMapper.java:91)     在org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:145)at   org.apache.sqoop.mapreduce.AutoProgressMapper.run(AutoProgressMapper.java:64)     在org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:787)
    在org.apache.hadoop.mapred.MapTask.run(MapTask.java:341)at   org.apache.hadoop.mapred.YarnChild $ 2.run(YarnChild.java:168)at at   java.security.AccessController.doPrivileged(Native Method)at   javax.security.auth.Subject.doAs(Subject.java:422)at   org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1709)     在org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:162)
  引起:java.sql.SQLDataException:ORA-01843:不是有效月份

使用的命令是:

sqoop import --connect jdbc:oracle:thin:@<my_host:port:instanceia> --username <user> --password <pass> --table <DB.TABLE> --split-by NUM_LINE --m 10 --target-dir /user/rodrigo/SLICED_TABLE 2>&1|tee import_tab_menor.txt

我是Hadoop / Hive / Sqoop的新手,这只是为了学习,但我真的想知道如何解决这个问题。

我考虑创建视图,将 date 数据类型更改为字符串只是为了导入表格,但它可以为我提供真实的结果。

编辑:

我发现这是视图创建中的内部数据库错误。 我正在创建视图的方式返回了我需要的结果。但是创建它是一种错误的方法。

在Sqoop内部的查询中,您需要分隔最后一个AND \$CONDITIONS,并且将查询发送到Oracle的格式为to_date('02/04/16', 'dd/mm/yy')。然后它奏效了。

为了绕过错误,我创建了一个视图,将日期字段的数据类型更改为varchar,由于某种原因,它也不会起作用。

所以我再次使用to_number(to_char('02/04/16', 'dd/mm/yy'))进行了更改以使其正常工作。

我不想结束这个问题,因为我想要解决这个问题。 如果我找到它,我会分享。

2 个答案:

答案 0 :(得分:0)

此问题的最常见原因是因为您的列名称包含关键字,例如将列命名为&#34; key&#34;或者&#34;命令&#34; (只是一个虚拟的例子)尝试像这样导入表

- 查询&#34;从DB.TABLE中选择*其中\ $ CONDITIONS&#34;

答案 1 :(得分:0)

错误与我创建视图的方式有关:

我已使用文字格式创建视图以选择日期间隔。

这样的东西
  

DT_F>'02/04/16

但是当我使用

创建 View
  

to_date('02/04/16', 'dd/mm/yy')

错误ORA-01843不再发生。