使用hue中的sqoop导入数据被killed

339 阅读1分钟

本文已参与“新人创作礼”活动,一起开启掘金创作之路。​ ​

 今天在HUE中的Oozie执行Sqoop,因为数据都要现在这里汇总与处理。这里给一个样例:

sqoop import  --connect "jdbc:mysql://192.168.102.18:3306/school?useUnicode=true&characterEncoding=utf-8" --username root --password P@ssw0rd4321 --driver com.mysql.jdbc.Driver --query 'select * from snap_match where alarmTime>date_sub(date_format(now(), "%Y-%m-%d %H"), interval 1 hour) and alarmTime<date_format(now(), "%Y-%m-%d %H") and $CONDITIONS' --target-dir /user/activemq_topic/snap_match/${date_today}/${hour} --fields-terminated-by '\001' --lines-terminated-by '\n' --null-string '\N' --null-non-string '\N' --m 1;

这些指令之前已经在shell中测试好了,没有问题,结果在这里执行被KILLED:

执行以后报错,Job was KILLED

我们可以看他的这个解析结果:

​Sqoop command arguments :\
             import\
             --connect\
             "jdbc:mysql://192.168.102.18:3306/school?useUnicode=true&characterEncoding=utf-8"\
             --username\
             root\
             --password\
             ********\
             --driver\
             com.mysql.jdbc.Driver\
             --query\
             'select\
             *\
             from\
             snap_match\
             where\
             alarmTime>date_sub(date_format(now(),\
             "%Y-%m-%d\
             %H"),\
             interval\
             1\
             hour)\
             and\
             alarmTime<date_format(now(),\
             "%Y-%m-%d\
             %H")\
             and\
             $CONDITIONS'\
             --target-dir\
             /user/activemq_topic/snap_match/2020-04-15/08\
             --fields-terminated-by\
             '\001'\
             --lines-terminated-by\
             '\n'\
             --null-string\
             '\\N'\
             --null-non-string\
             '\\N'\
             --m\
             1;\
Fetching child yarn jobs\
tag id : oozie-b49b7f0dfebe4b4641a1626cb6e46621\
2020-04-15 09:28:51,392 [main] INFO  org.apache.hadoop.yarn.client.RMProxy  - Connecting to ResourceManager at xdata1/192.168.102.15:8032\
Child yarn jobs are found - \
=================================================================

 这里可以发现在这个Editor里执行的Sqoop命令会被Oozie用空格分隔,变成一个一个的参数。所以解析到--query时,后面把我之前测试好的SQL语句都解析成一个个参数,所以不能识别。这样的sqoop指令当然就被kill了。

如果想在HUE里执行含有空格的Sqoop命令,不能使用Sqoop Editor,因为它没有提供传参的地方。(注意,在使用--query时,参数中不要带有空格,否则出错)

这就很bug了呀,sql不用空格。。。不过问了公司大佬,提供一个解决方案,在Workflow里使用Sqoop时里面不写command,但是把语句都写到arguments里。就直接按照他解析的字段整合。如下图:


注:不过这里记得别忘了添加Files,要添加特定的sql驱动才可以。

然后就完美解决问题。注意如果在HUE中使用sqoop,并且里面有sql语句,那么最好不要在Oozie中编辑。直接在WorkFlow中添加ACTIONS中的sqoop,这样就可以直接写这些指令,而不需要使用DOCUMENTS中的sqoop了。