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

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