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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章