Hue,Oozie執行sqoop找不到驅動解決辦法

2022-03-26 19:56:25 字數 2233 閱讀 5349

平台:cdh 5.13.0

公司在客戶那邊有個專案需要部署cloudera平台,部署的時候,在這個版本的cdh中,除了基本元件,還選了sqoop2作為資料傳輸工具,希望能在oozie中通過工作流呼叫sqoop。

如下圖所示,無論在editor還是在workflow的操作介面,只有sqoop1的操作,沒有sqoop2的。

然後在部落格中找到了原因:

oozie 自帶 sqoop、hive 等常用元件,比如執行sqoop指令碼命令時,並不是你主機裡或者cdh裡的的sqoop,而是 hdfs 下 oozie 裡的 sqoop 在起作用,這也是為什麼 總是報 could not load db driver class 的原因了,因為根本不是同乙個sqoop。[1]

也搜尋到了sqoop1和sqoop2的區別:

然而我們只需要簡單的工具,能夠從關係型資料庫中匯入資料而已,所以思路轉為呼叫sqoop1進行資料匯入。

「could not load db driver class」,這句估計是出現次數最多的報錯了,這個報錯搞了一天,所以要一步步來(以下操作在安裝oozie的主機進行操作):

將sqljdbc42.jar放入/var/lib/sqoop/目錄,然後將使用者和組改為sqoop。

ssh登入主機,我是用root執行命令:

sqoop import --connect 'jdbc:sqlserver://:;username=;password=;database=' --table table_name --target-dir "/user/root/sqoop_dir" -m 1
如果能夠正常執行,並且在hdfs上發現/user/root/sqoop_dir 目錄中有正確的資料,證明sqoop命令和驅動都是正常的。

首先,將sqljdbc42.jar包,複製到hdfs中的目錄:/user/oozie/share/lib/lib_/sqoop/ 其中timestamp因人而異;

可以通過命令:

更新共享庫,可以看到你現在oozie的共享庫是哪個。

然後,將jar包的owner和group都改成oozie;

最後,在cloudera介面重啟oozie元件;

做完這些之後,新建乙個workflow,如下圖所示:

有個坑是,剛開始字串用單引號,會報錯,改成雙引號後就可以執行了,執行結果如下:

但是,使用sqoop action執行資料匯入會有乙個致命的問題,就是無法使用—query 「sql語句」的方式去動態的選擇資料,原因是oozie在解析command的時候,會將空格當作分隔符進行分割,所以會報無法識別引數的錯,這個通過檢視workflow.xml可以看出oozie轉化後的檔案,詳情可以看:oozie – sqoop job failed when executing it with hue。

由於oozie的bug,導致無法使用sqoop action進行操作,所以還是需要將sqoop命令寫入shell指令碼,利用shell action去執行。

但是無論我把驅動包拷貝入oozie server所在主機還是namenode所在主機的相關目錄,還是會報找不到驅動,最後沒辦法,把驅動包分發到各個節點的/var/lib/sqoop目錄,竟然就成功了!

接下來的問題就是許可權問題,因為shell script預設是使用yarn使用者進行執行任務,需要你在shell前面指定執行使用者:

export hadoop_user_name=username
接下來就可以順利將sqlserver的資料匯入到hdfs中了。

最後我做了乙個實驗,分別刪除datanode節點上的驅動,發現乙個規律:

workflow會隨機在乙個節點對sqoop命令進行呼叫。

我猜想,應該取決於yarn將mapreduce任務分配到哪部主機上執行。我覺得應該有引數可以設定從**讀取驅動的,希望有辦法的朋友不吝留下您的解決方法。

1. hue + oozie + sqoop 使用

(完)

在hue(oozie)上提交pyspark

因為需要使用python的一些庫,不得不使用pyspark。在這裡記錄下遇到的問題。本地開發環境,網上比較容易查到,這裡就不寫了。這裡主要說線上提交的依賴問題。這裡是用hue提交,主要有以下幾個步驟 1 將所有的依賴打成zip包 2 使用sc.addpyfiles path 或者是sc.addpyf...

nohup執行sqoop卡頓問題

最近因為工作需要開始接觸hive和mysql的資料載入,其中hive向mysql儲存資料時,其中有些任務採用了nohup的方式後台執行。遇到了下面這個問題,因目前難以排查,現做乙個記錄。環境 指令碼內容為迴圈執行 nohup 後台執行 發現,任務顯示暫停 1 2856 stopped tty out...

hue oozie 任務顯示時間問題

cdh安裝hue,oozie.通過hue 建立oozie任務,提交任務執行的時間和hue上顯示的時間會不同於系統當前時間。問題是由於oozie,hue時區與系統時區不同。修改oozie時區 cloudera oozie配置 oozie server default group 高階 oozie si...