sqoop 執行可以以job形式 也可以執行用命令執行,再用sqoopjob時,踩了幾個坑,分享一下
1、服務器重啟
由於服務器增加硬盤,需要重啟后,發現sqoop job 無法執行,報連接數據庫IO之類的錯誤,但是sqoop命令是可以執行的,
這也就奇怪了,剛開始以為是連接不上hadoop元數據庫,但是sqoop命令可以執行,這就比較坑了。
通過同不斷的查找分析發現,最后竟然是sqoop自帶的元數據庫沒啟動。
通過sqoop安裝目錄bin下的start-metastore.sh 可以重啟。
以下是進程,代表啟動成功
root 16666 1 0 Nov16 ? 00:02:23 /usr/local/jdk/bin/java -Xmx1000m -Djava.net.preferIPv4Stack=true -Dhadoop.log.dir=/usr/lib/hadoop/logs -Dhadoop.log.file=hadoop.log -Dhadoop.home.dir=/usr/lib/hadoop -Dhadoop.id.str= -Dhadoop.root.logger=INFO,console -Djava.library.path=/usr/lib/hadoop/lib/native -Dhadoop.policy.file=hadoop-policy.xml -Djava.net.preferIPv4Stack=true -Xmx4096m -Dhadoop.security.logger=INFO,NullAppender org.apache.sqoop.Sqoop metastore
2、修改
修改完腳本,發現不生效,原來sqoop job在執行中會先查找元數據庫中的job,如果有就執行,如果沒有就會生成一個job。
因為你原來腳本有job,所以還會繼續跑原來的腳本,
需要人工找到對應的job,刪除jobid即可,
當然這種好處也明顯,線上線上分離,如果上線流程規范,那么這種問題就可以避免。