本文是整理使用sqoop过程中出现过的问题以及对应的解决方案。
1.Can't parse input data: '\N' 空字符串造成的
解决方式:--input-null-string "\\\\N" --input-null-non-string "\\\\N" \
2. Can't parse input data: 'JM密封罐4件套分类存储防潮带刻度杂粮储物罐(一大两中一小)【合伙人专供】'
解决方式:trim(field)
3.Can't parse input data: 'NULL'
解决方式:nvl(field,'')
4.Caused by: java.lang.RuntimeException: Can't parse input data: 'JM密封罐4件套分类存储防潮带刻度杂粮储物罐(一大两中一小)【专供】
解决方式:不能解析字符串,有特殊字符,hive中处理掉,使用','分隔符,
防止\t特殊字符出现在hive表中,导致行的错乱,并且在sql中替换掉特殊字符
5.使用--update-key "monthkey,partner_id" --update-mode allowinsert
发现导出到mysql时没有更新记录而直接插入了,解决方式是建立mysql表时指定主键
6.sqoop1在oozie中执行任务,Error: app_total_partner_accu : Unsupported major.minor version 52.0
sqoop会先找cdh本身的jdk,如果cdh本身的jdk不存在,再去找其他的,
集群中没有cdh的那个jdk,而去找到了1.8版本的jdk,造成低版本用高版本编译失败。
解决方式是将cdh本身jdk放到/usr/java目录下。
7.Error: java.io.IOException: Cannot run program "mysqldump": error=2, 没有那个文件或目录
mysql->hive 使用了下面的命令,问题出在--direct上面,去掉即可
import --direct
--connect "jdbc:mysql://ip:port/database?zeroDateTimeBehavior=convertToNull"
--table "table1"
--username "slave_data"
--password "ungsten@dafy098QWE123"
--target-dir "/data/user/hive/warehouse/tmp.db/table2" --hive-database "tmp"
--hive-table "table2" --fields-terminated-by "\t"
--null-string '\\N'
--null-non-string '\\N'
--check-column "dtCreateTime"
--incremental "append"
--last-value ${datenow} -m 10