分享

sqoop 将hive数据导入mysql报错Can't parse input data: '633507'

sunt99 发表于 2016-11-3 13:13:54 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 7 43806
hive中的表结构:
hive> desc channel_pv_day;
OK
day                     string                                      
channel                 string                                      
pv                      int                                         
month                   string                  按月份的分区字段            
         
# Partition Information         
# col_name                data_type               comment            
         
month                   string                  按月份的分区字段

mysql中的表结构:
+---------+--------------+------+-----+---------+-------+
| Field   | Type         | Null | Key | Default | Extra |
+---------+--------------+------+-----+---------+-------+
| day     | varchar(100) | YES  |     | NULL    |       |
| channel | varchar(100) | YES  |     | NULL    |       |
| pv      | bigint(20)   | YES  |     | NULL    |       |
| month   | varchar(100) | YES  |     | NULL    |       |
+---------+--------------+------+-----+---------+-------+
sqoop 语句:
sqoop-export   --connect jdbc:mysql://mysqlDB:3306/test   --username biadmin  --password Abcd1234  --table channel_pv_day --input-null-string '\\N' --input-null-non-string '\\N' --input-fields-terminated-by '\001' --export-dir /user/hive/warehouse/channel_pv_day/month=201606;
报错如下:
java.lang.RuntimeException: Can't parse input data: '2830'        at channel_pv_day.__loadFromFields(channel_pv_day.java:335)        at channel_pv_day.parse(channel_pv_day.java:268)        at org.apache.sqoop.mapreduce.TextExportMapper.map(TextExportMapper.java:89)        at org.apache.sqoop.mapreduce.TextExportMapper.map(TextExportMapper.java:39)        at org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:145)        at org.apache.sqoop.mapreduce.AutoProgressMapper.run(AutoProgressMapper.java:64)        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)Caused by: java.util.NoSuchElementException        at java.util.ArrayList$Itr.next(ArrayList.java:834)        at channel_pv_day.__loadFromFields(channel_pv_day.java:330)
大家帮忙看下,是什么原因?谢谢啦





已有(7)人评论

跳转到指定楼层
arsenduan 发表于 2016-11-3 13:56:28
本帖最后由 arsenduan 于 2016-11-3 14:00 编辑

mysql 数据类型是bigint,范围可能超出hive的int,导致转换失败。或则可能数据类型不一致造成的


回复

使用道具 举报

sunt99 发表于 2016-11-3 14:37:10
arsenduan 发表于 2016-11-3 13:56
mysql 数据类型是bigint,范围可能超出hive的int,导致转换失败。或则可能数据类型不一致造成的

之前mysql 用的是Int,也不行,报错也是一样的

回复

使用道具 举报

easthome001 发表于 2016-11-3 15:35:30
sunt99 发表于 2016-11-3 14:37
之前mysql 用的是Int,也不行,报错也是一样的

sqoop-export   --connect jdbc:mysql://mysqlDB:3306/test   --username biadmin  --password Abcd1234  --table channel_pv_day --input-null-string '\\N' --input-null-non-string '\\N' --input-fields-terminated-by '\001' --export-dir /user/hive/warehouse/channel_pv_day/month=201606;

export-dir应该是路径,后面=201606这个没见过啊。sqoop应该不支持吧
回复

使用道具 举报

sunt99 发表于 2016-11-3 16:19:49
easthome001 发表于 2016-11-3 15:35
sqoop-export   --connect jdbc:mysql://mysqlDB:3306/test   --username biadmin  --password Abcd1234  ...

这个是按照月进行分区的
-rwxrwxrwt   3 root hive        297 2016-11-03 10:47 /user/hive/warehouse/channel_pv_day/month=201606/part-00073.gz
-rwxrwxrwt   3 root hive        256 2016-11-03 10:46 /user/hive/warehouse/channel_pv_day/month=201606/part-00074.gz
-rwxrwxrwt   3 root hive        230 2016-11-03 10:46 /user/hive/warehouse/channel_pv_day/month=201606/part-00075.gz
-rwxrwxrwt   3 root hive        206 2016-11-03 10:46 /user/hive/warehouse/channel_pv_day/month=201606/part-00076.gz
-rwxrwxrwt   3 root hive        214 2016-11-03 10:46 /user/hive/warehouse/channel_pv_day/month=201606/part-00077.gz
-rwxrwxrwt   3 root hive        293 2016-11-03 10:46 /user/hive/warehouse/channel_pv_day/month=201606/part-00078.gz

回复

使用道具 举报

w517424787 发表于 2016-11-3 16:31:13
mysql全部用string类型试试,sqoop抓数据的时候会把类型转成string类型的,是改下试试!
回复

使用道具 举报

einhep 发表于 2016-11-3 16:54:28
本帖最后由 einhep 于 2016-11-3 17:00 编辑
sunt99 发表于 2016-11-3 16:19
这个是按照月进行分区的
-rwxrwxrwt   3 root hive        297 2016-11-03 10:47 /user/hive/warehouse/ ...

目录最好不要使用关键字或则符号命名,这样很可能会造成错误解析
回复

使用道具 举报

sunt99 发表于 2016-11-3 17:54:45
我重新建了一张hive表,只是把hive 表中的分区去掉了,结果就可以了,不知道为什么?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条