![](/img/trans.png)
[英]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.