使用hue中的sqoop導入數據被killed

今天在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了。

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