天天看点

sqoop从hive导入数据到Mysql报错ClassNotFoundException:class [tablename] not found

最后一条报错是:

2020-04-19 08:38:26,758 INFO mapreduce.ExportJobBase: Exported 0 records.
2020-04-19 08:38:26,758 ERROR tool.ExportTool: Error during export: Export job failed!
           

往上翻看报错日志(Mysql里表名为user_log):

java.lang.Exception: java.io.IOException: java.lang.ClassNotFoundException: user_log
           

原因:大概是sqoop找不到生成的jar包位置。

解决方法:

当你每次执行失败后,其实在

/tmp/sqoop-你的用户名/compile

(或者是

/tmp/sqoop/compile

,可以找找看)文件夹下有许多临时文件夹,文件夹名称为一大串字符,每个文件夹内有对应表名生成的.jar包、.java和.class文件。将这三个文件拷贝到

你的sqoop安装目录/lib

文件夹下即可解决。

PS:如果你不知道哪个文件夹下是你这次执行任务产生到文件有两种解决方法:

  1. 把文件夹按时间排序,找最新到一个,或者把全部文件夹删除重新执行一遍命令也行(删除文件总有一丝丝风险)。
  2. 在执行命令时加上

    --blind yourdirectory

    参数,指定生成文件的位置,移动完成后重新执行命令——当然,如果有权限的话可以直接写到

    你的sqoop安装目录/lib

    下,这样可以省去移文件的麻烦。

    示例

    sqoop export --connect jdbc:mysql://localhost:3306/dbtaobao --username root --password 123456 --table user_log --export-dir 
    '/user/hive/warehouse/dbtaobao.db/inner_user_log' 
    --bindir ./ --fields-terminated-by ',';
               

还有一个错误,可能会遇到:

ERROR tool.ExportTool: Encountered IOException running export job: java.io.IOException: No columns to generate for ClassWriter

原因:多半儿是因为mysql的链接问题,可以看看是不是密码输入错误。

注意

hive表和mysql表字段类型和数量要一致,mysql表编码要指定utf8。

可以暂时不需要安装Zokeeper。

参考:

link1

link2

link3

link4

继续阅读