繁体   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