[英]How to invoke an oozie workflow via shell script and block/wait till workflow completion
[英]How to fetch value from Hive in shell script via an oozie workflow?
我有一個 shell 腳本example.sh
hive -e "select max(id) from dummy.table;" > data.txt
hdfs dfs -put -f data.txt /user/username/data.txt
此腳本從 hive 獲取數據並將結果存儲在 hdfs 中。 這在終端中按預期工作。 但是當我創建一個 oozie 工作流時,創建的文件是空的。 我嘗試打印一些硬編碼值,然后工作流程運行良好。 問題是,當涉及 hive 查詢時,盡管作業成功,但數據不存在。 我嘗試用 hql 運行同樣的東西,它運行成功。
insert overwrite directory '/user/username/hiveData' select max(id) from dummy.table;
但我的要求是我必須在我的 shell 腳本中獲取 hive 數據。
既然你沒有對$?
你可能不知道它失敗了。 所以第一步是在你的 shell 腳本中添加它。 否則你不會知道 shell 腳本是否失敗(因為 hive 失敗)並且 Oozie 將獲得 shell 腳本的成功運行狀態。
因此,在不知道 hive 代碼失敗的真正原因的情況下,我正在猜測。
如果您有由 Hive 使用的 kerberos 身份驗證,則 hive 查詢可能在 Oozie 調用的 shell 腳本中失敗。 要解決 kerberos 問題,您可能需要執行以下操作:
if [ -z ${HADOOP_TOKEN_FILE_LOCATION} ]
then
hive -e "select max(id) from dummy.table;" > data.txt
else
hive -e "SET mapreduce.job.credentials.binary=$HADOOP_TOKEN_FILE_LOCATION; select max(id) from dummy.table;" > data.txt
fi
您可以在此處閱讀有關此內容的更多信息
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.