在Docker中使用kettle遇到的問題解決


隨着我司的應用都開始容器化,相應的ETL流程也需要遷移到容器中。常規的SQL和shell腳本遷移之后執行基本沒有問題,主要的問題在於數據接入使用kettle的場景下,kettle啟動異常。

kettle部署方式

kettle掛載在某台主機的路徑下,該路徑映射到一個裝有Azkaban容器的路徑,日常任務通過Azkaban執行pan.sh導入各種源數據。

執行遇到的問題

spoon.sh: line 230: 18976 Killed                  "$_PENTAHO_JAVA" $OPT -jar "$STARTUP" -lib $LIBPATH "${1+$@}" 2>&1

分析和解決

因為pan.sh執行時會調用spoon.sh,所以直接從錯誤提示的spoon.sh的230行開始分析。

225 OS=`uname -s | tr '[:upper:]' '[:lower:]'`
226 if [ $OS = "linux" ]; then
227     (((("$_PENTAHO_JAVA" $OPT -jar "$STARTUP" -lib $LIBPATH "${1+$@}"  2>&1; echo $? >&3 ) | grep -viE "Gtk-WARNING|GLib-GObject|GLib-CRITICAL|^$" >&4 ) 3>&1)| inputtoexitstatus ) 4>&1
228 else
229     "$_PENTAHO_JAVA" $OPT -jar "$STARTUP" -lib $LIBPATH "${1+$@}"
230 fi
231 EXIT_CODE=$?

從這段shell代碼看,報錯的信息時第229行,原因是第225行查詢失敗。在Azkaban中單獨調用uname -s | tr '[:upper:]' '[:lower:]'語句,會提示uname: extra operand '|'

因為我這邊沒有容器的訪問方式 ,在確定容器后台是Linux的情況下。

直接注釋掉第225行到第231行,並將227行復制到231行后面。

225 #OS=`uname -s | tr '[:upper:]' '[:lower:]'`
226 #if [ $OS = "linux" ]; then
227 #    (((("$_PENTAHO_JAVA" $OPT -jar "$STARTUP" -lib $LIBPATH "${1+$@}"  2>&1; echo $? >&3 ) | grep -viE "Gtk-WARNING|GLib-GObject|GLib-CRITICAL|^$" >&4 ) 3>&1)| inputtoexitstatus ) 4>&1
228 #else
229 #    "$_PENTAHO_JAVA" $OPT -jar "$STARTUP" -lib $LIBPATH "${1+$@}"
230 #fi
231 #EXIT_CODE=$?
232 (((("$_PENTAHO_JAVA" $OPT -jar "$STARTUP" -lib $LIBPATH "${1+$@}"  2>&1; echo $? >&3 ) | grep -viE "Gtk-WARNING|GLib-GObject|GLib-CRITICAL|^$" >&4 ) 3>&1)| inputtoexitstatus ) 4>&1

再次使用Azkaban調用時就可以順利執行kettle數據導入。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM