簡體   English   中英

如何通過 oozie 工作流從 shell 腳本中的 Hive 中獲取值?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM