如何在 shell 脚本中通过 oozie 工作流从 hive 中取值?

2skhul33  于 2021-04-12  发布在  Hive
关注(0)|答案(1)|浏览(651)

我有一个shell的脚本,例子.sh。

hive -e "select max(id) from dummy.table;" > data.txt
hdfs dfs -put -f data.txt /user/username/data.txt

这个脚本从hive中获取数据,并将结果存储在hdfs中。在终端中,这个脚本和预期的一样工作,但是当我创建一个oozie工作流时,创建的文件是空的。

insert overwrite directory '/user/username/hiveData' select max(id) from dummy.table;

但我的要求是,我必须在我的shell脚本中获取hive数据。

jq6vz3qz

jq6vz3qz1#

由于你没有检查$?,你可能不知道它失败了。所以第一步是在你的shell脚本中加入这一点,否则你不会知道shell脚本是否失败(因为hive失败),oozie会得到shell脚本的成功运行状态。
所以在不知道hive代码失败的真正原因的情况下,我在做一个猜测。
如果你有 kerberos 认证,被 hive 使用,那么 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

你可以在这里读到更多的信息

相关问题