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即可,
当然这种好处也明显,线上线上分离,如果上线流程规范,那么这种问题就可以避免。